今天,在我的工作中,我们将源代码托管在我们无法管理员访问的公共svn存储库中。现在,我们想使用git(github)来托管我们的源代码。由于某些内部原因,我们使用的svn存储库必须镜像git。
显然,Subgit是完成这项工作的最佳工具,因为svn< - > git是非常流畅和无压力的(根据我的测试,它看起来真的很像)。所以,我一直都是这样的布局:
svn-repo< - subgit-repo< - github< - >来自每个开发人员的本地git-repo。
svn-repo将是只读的,即只能使用git提交。
阅读Subgit博客我看到了post。在这篇文章中,svnsync用于将subgit-repo与svn-repo同步,但同步只是单向的,从svn-repo到subgit-repo :(
所以,我发现了svnadmin转储和加载,我可以使用它们来保持svn-repo与subgit-repo同步。例如:
svnadmin dump --incremental subgit-repo | svnadmin加载svn-repo
我的问题是:使用svnadmin dump和load来保持我的存储库同步是一个好主意吗?
谢谢!
答案 0 :(得分:2)
让我们按如下方式分解问题:
使用svnsync。
所以,我发现了svnadmin转储和加载,我可以使用它们来保持svn-repo与subgit-repo同步。
svnadmin dump --incremental subgit-repo | svnadmin加载svn-repo
很遗憾,除非您拥有svn-repo的管理员权限,否则无法运行svnadmin load svn-repo
。但您可以尝试使用svnsync:
$ svnsync init svn-repo subgit-svn-repo
$ svnsync sync svn-repo
这样您就可以将更改从subgit-svn-repo同步到svn-repo 远程。请注意,在您的问题中,您已经指出了从svn-repo同步到subgit-svn-repo的方法,但在我的示例中,我已经证明这也是相反的方向。
但是这种方法存在一个问题:svn-repo中应该有pre-revprop-change
个钩子。这意味着您仍然必须在本地访问svn-repo以启用挂钩。幸运的是,这是管理员启用此类挂钩时的常见情况。希望这也适合你。
您可以在this blog post中找到详细的HOW-TO。
使用SubGit 2.0。
现在我们有一个SubGit 2.0的工作原型,它支持Subversion的读写镜像和位于不同主机上的Git存储库。一个人必须具有Git存储库的管理员访问权限,所以无论如何都不需要修改Subversion存储库。
目前它的工作原理如下:
$ git init --bare git-repo
$ subgit configure --svn-url svn-repo git-repo
$ subgit install git-repo
此时SubGit会将pre-receive
和post-receive
挂钩安装到git-repo中,自动将传入的更改与远程svn-repo同步。
我们非常接近发布具有此功能的第一个EAP版本。我们建议您在构建完成后立即对其进行测试。据我所知,在此之前只有svnsync
选项。
从你的问题来看,你还不清楚如何将subgit-git-repo的变化与github-repo同步。
我想注意,必须将更改推送到subgit-git-repo才能将它们与subgit-svn-repo同步。
基本上你的团队可能只使用github存储库,有人会手动将所有更改推送到SubGit控制的Git存储库:
$ git remote add github github-repo
$ git remote add subgit subgit-git-repo
$ git pull github
$ git push subgit
或者可以设置一个cron作业来定期将更改推送到SubGit。