我们有一个新的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。
答案 0 :(得分:2)
我的设置略有不同:SVN仓库未从Git仓库克隆。
我的Git回购主要有两个分支:master
和svn
。 master
与远程裸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用户可见的“公共”分支) )。