如何使用git-svn将远程分支与trunk同步

Sun*_*nov 7 git git-svn

我正在使用git-svn来对抗svn存储库.布局是标准的,我已经创建了本地存储库:

$ git svn clone -s http://mysvnrepo
(master)$ 
Run Code Online (Sandbox Code Playgroud)

我需要在远程(svn)分支 - MyBranch上工作,所以我创建了一个本地分支来跟踪远程分支:

(master)$ git checkout -b localMyBranch remotes/MyBranch
(localMyBranch)$
Run Code Online (Sandbox Code Playgroud)

我继续工作并且在我去的时候去当地的分公司工作,偶尔我会这样做:

(localMyBranch)$ git svn dcommit
Run Code Online (Sandbox Code Playgroud)

与此同时,其他人正在使用主干,并且我不时会将更改从主干合并到我的分支以保持同步.这就是我真的很困惑的地方,因为我找不到如何执行此操作的良好信息.到目前为止,我知道我需要这样做:

(localMyBranch)$ git svn dcommit
(localMyBranch)$ git checkout master
(master)$ git svn rebase
Run Code Online (Sandbox Code Playgroud)

怎么办?我读到这不是正确的方法:

(master)$ git checkout localMyBranch
(localMyBranch)$ git rebase master
Run Code Online (Sandbox Code Playgroud)

因为它会破坏svn的合并信息.

那么将我的远程svn分支"重新绑定"到远程主干的最佳方法是什么,保留svn的合并信息?

Pet*_*ton 7

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

试试这个:

(localMyBranch)$ git checkout -b merge_work
(merge_work)$ git merge master
(merge_work)$ git checkout localMyBranch
(localMyBranch)$ git rebase merge_work
Run Code Online (Sandbox Code Playgroud)

反之亦然,以另一种方式合并.

编辑

如果您使用的是git-svn 1.7.7或更高版本,则有一个配置设置可以告诉git-svn填充远程存储库上的mergeinfo属性:

git config --global svn.pushmergeinfo true
Run Code Online (Sandbox Code Playgroud)