git-svn:保持git repo和svn repo同步

时间:2011-08-09 09:07:31

标签: git svn synchronization

我们有一个新的git repo,它来自svn repo。 git repo现在是进一步开发的领先存储库。这个回购是一个托管的。 另一方面的svn repo将继续作为非git用户的发布管道。 问题是,如何从git repo不时更新svn repo?我读了很多关于git-svn的内容,并且不应该使用merge等(参见Is git-svn dcommit after merging in git dangerous?)。 但合并将在git repo中发生,我们不希望通过奇怪的规则限制git repo中的开发(例如“仅允许rebase”)。

所以问题很简单:他们是如何让svn repo与git repo保持同步的最佳实践(让我们说两周一次)。甚至可以安全地将更改从svn重新传输到git(如果必须对svn repo应用紧急修复,那么这种情况很少发生)。

由于新的git repo是托管的,所以中间必须有一个svn-git repo作为中介。这个repo可以用来“重新连接”git-merges到git-rebases左右。它也完全没问题,所有中间git提交都作为一个blob提交给SVN。

2 个答案:

答案 0 :(得分:2)

我的设置略有不同:SVN仓库未从Git仓库克隆。

我的Git回购主要有两个分支:mastersvnmaster与远程裸Git仓库同步,​​svn链接到远程SVN仓库。

我使用git cherry-pick将提交从一方应用到另一方,并且在重新定位和合并方面没有任何问题。

我之前尝试将master合并到svn,但总是以无休止的冲突解决会话结束。只使用樱桃采摘,生活就容易多了。

要将svn提交到我的master,我会执行以下操作:

首先,让两个分支与其上游同步:

git checkout svn
git svn rebase

git checkout master
git pull

然后(在master上时):

gitk svn

这将显示gitk窗口,我在其中选择要从svn转移到master的提交。然后,我使用git push将提交应用于我的遥控器。

要从master更改为svn,我git checkout svn,然后启动gitk master。再次,我选择要传输的提交,完成后,git svn dcommit将提交推送到SVN服务器。

简单而无痛。

答案 1 :(得分:1)

你可以在你的Git仓库中进行任何你想要的合并,前提是你不要将你想要回到SVN的分支机构重新组合。
只要您不重写该分支中的任何历史记录,您就可以随意管理您的Git仓库工作流程。

因此,最佳做法是尽量减少与SVN仓库同步的分支数量,以便于管理那些“公共”分支(对所有git用户和所有svn用户可见的“公共”分支) )。