我正在使用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的合并信息?
您将需要创建一个本地工作分支来处理您的合并.关键是你需要一个没有主动跟踪远程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)