只迁移具有读访问权限的仓库的工具?

时间:2010-04-13 06:10:41

标签: svn repository svnsync

我的学校服务器上有一个subversion存储库来自我的朋友和我过去学期的一个项目。我们想要对项目进行修改并使其更像是一个项目组合项目,我不太确定回购将在学校服务器上保持完好(他们通常会在几个学期后擦除它)。我无权转储回购,虽然我已发送电子邮件,看看我是否可以获得 - 这将是最好的解决方案。

我尝试过svnsync,但学校服务器不支持重播命令(可能已关闭),所以这对我不起作用。

现在,从理论上讲,不可能(手动或以编程方式)签出存储库的每个版本并将其签入我们自己服务器上的新存储库中吗?我认为它会起作用 - 我们只有3个人,并且没有我们不得不担心的工作副本冲突,只需要复制一份回购中的所有历史记录,以防我们需要返回并查看它。

话虽如此,在我通过编写脚本来重新发明轮子之前 - 这样的事情是否已经存在?我必须确定已经有了一个工具来完成它,或者有人编写了一个脚本来完成它。

4 个答案:

答案 0 :(得分:0)

如果你愿意使用Mercurial - 哪个a)离Subversion不太远,那么命令方面,b)会阻止这种问题,c)实际上很有趣* - 你可以使用convert extension。它内置于Mercurial中,您只需激活它即可。

*我想是的,无论如何

答案 1 :(得分:0)

您没有指定项目中大约有多少修订。并且可以基于脚本检查每个修订版。但这是不现实的,因为为每个文件夹创建了所有“.svn”文件夹。因为他们,你

  1. 在另一个脚本可以检入之前,是否需要另一个脚本执行这些文件的递归删除。
  2. 或者,对于每个修订版执行svn导出,然后编写另一个将检查它的脚本。
  3. 你可以看到它不可行。而且我不知道要执行此操作的脚本。

    但是,您可以从repo执行许多导出,每个导出最重要的提交,然后将它们添加到新的存储库中。如果修订数量较少,则应该更容易。

答案 2 :(得分:0)

对subversion存储库的读访问应始终足以在svnsync的帮助下创建该存储库的克隆。一个简短的例子如何做到这一点:

svnadmin create new_repos

使用

之类的东西创建钩子脚本new_repos/hooks/pre-revprop-change
#!/bin/sh
exit 0
#

不要忘记让它可执行

chmod u+x new_repos/hooks/pre-revprop-change

然后初始化同步:

svnsync init file:///PATH/TO/new_repos https://old_repos/trunk/subfolder
svnsync sync file:///PATH/TO/new_repos https://old_repos/trunk/subfolder

测试新存储库

svn co file:///Users/bjoern/test/new_repos new_working_copy

不要忘记删除钩子脚本

rm new_repos/hooks/pre-revprop-change

有关存储库复制的更多详细信息,请参见svn book

答案 3 :(得分:0)

  

我尝试过svnsync,但学校服务器不支持重放   命令(可能已关闭),这对我不起作用。

我认为svnsync因为一些小问题而无效; svnsyncsvnrdump都不需要任何服务器端修改才能正常工作!


如果您通过HTTP(S)或svn(+ssh)://至少拥有对Subversion存储库的只读访问权限,那么您绝对可以使用svnsyncsvnrdump工具获取完整的修订历史记录。

svnrdump接近。

只需运行命令并等待它完成:

svnrdump URL-TO-ORIGINAL-REPO > repo.dump

在结果中,您将获得包含完整更改历史记录的repo.dump文件。您可以稍后使用svnadmin load命令将文件加载到空存储库。

svnsync接近。

所有步骤都应在您的(本地)机器上执行:

  1. 创建新存储库:svnadmin create newrepo

  2. 允许更改新存储库的修订版(未版本控制)属性:

    echo exit 0 > myrepo\hooks\pre-revprop-change.bat

  3. svnsync init file:///C:\Repositories\newrepo https://URL-TO-ORIGINAL-REPO

  4. svnsync sync file:///C:\Repositories\newrepo https://URL-TO-ORIGINAL-REPO