2012-02-07 62 views
7

我使用Git svn涉及到对svn库工作树干远程分支同步。布局是标准的,而我已创建了本地资源库:如何使用Git svn的

$ git svn clone -s http://mysvnrepo 
(master)$ 

我需要在远程(SVN)工作的分支 - MyBranch,所以我创建了一个本地分支用于跟踪远程之一:

(master)$ git checkout -b localMyBranch remotes/MyBranch 
(localMyBranch)$ 

我继续工作,并提交到当地的分行,我走了,偶尔我也dcommit:

(localMyBranch)$ git svn dcommit 

同时其他人正在使用的行李箱,并从我不时要合并回从主干到我的分支的更改保持同步。这就是我非常困惑的地方,因为我无法找到一个很好的信息来说明如何执行此操作。到目前为止,我知道我需要做的:

(localMyBranch)$ git svn dcommit 
(localMyBranch)$ git checkout master 
(master)$ git svn rebase 

现在怎么办?我读到,这是不正确的路要走:

(master)$ git checkout localMyBranch 
(localMyBranch)$ git rebase master 

因为它会混乱svn的合并信息。

那么什么是“重订”我的远程SVN分支到远程主干,保留SVN的合并信息的最佳方式?

回答

7

你要创建一个本地工作的分支来处理您的合并。关键是你需要一个不主动跟踪远程svn分支的分支。

试试这个:

(localMyBranch)$ git checkout -b merge_work 
(merge_work)$ git merge master 
(merge_work)$ git checkout localMyBranch 
(localMyBranch)$ git rebase merge_work 

,反之亦然为合并的其他方式。

编辑

如果您使用的git - svn的1.7.7或更高版本,有一个配置设置来告诉混帐svn的填充在远程存储库中的合并信息属性:

git config --global svn.pushmergeinfo true 
+0

谢谢。它是否会保留svn POV的合并信息? – 2012-02-08 13:44:14

+0

是的,如果你配置git来这样做。我将编辑答案以包含该命令。 – 2012-02-08 15:11:06

+0

@ jordan002:它真的有用吗?我习惯于像[这](http://stackoverflow.com/a/4908930/158074)回答建议,但这种方式似乎更简单。另外,第一行应该是'git checkout -b merge_work',对吧? – rsenna 2012-08-09 17:43:14