繁体   English   中英

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

[英]git-svn: keeping git repo and svn repo in sync

我们有一个新的git repo,来自svn repo。 git repo现在是进一步开发的领先存储库。 这个回购是一个托管的。 另一方面的svn repo将继续作为非git用户的发布管道。 问题是,如何从git repo不时更新svn repo? 我读了很多关于git-svn的内容,并且不应该使用merge等(请参阅git之后的git-svn dcommit dcommit? )。 但合并将在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也完全没问题。

我的设置略有不同:SVN repo不是从Git repo克隆的。

我的Git repo主要有两个分支: mastersvn master与远程裸Git repo同步, svn链接到远程SVN repo。

我使用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将提交应用于我的遥控器。

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

简单而无痛。

你可以在Git仓库中进行任何你想要的合并,前提是你不要将你要重新命名的分支重新设置回SVN。
只要您不重写该分支中的任何历史记录,您就可以根据需要自由管理Git repo工作流程。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM