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

标签 git git-svn

我正在使用 git-svn 来处理 svn 存储库。布局是标准的,我创建了本地存储库:

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

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

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

我一直在工作并提交到本地分支,偶尔我会提交:

(localMyBranch)$ git svn dcommit

与此同时,其他人正在处理主干,有时我想将主干中的更改 merge 回我的分支以保持它们同步。这就是我真正感到困惑的地方,因为我找不到如何执行此操作的好信息。到目前为止,我知道我需要做的是:

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

现在呢?我读到这不是正确的方法:

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

因为它会弄乱 svn 的 merge 信息。

那么将我的远程 svn 分支“ rebase ”到远程主干的最佳方法是什么,同时保留 svn 的 merge 信息?

最佳答案

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

试试这个:

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

反之亦然,以另一种方式 merge 。

编辑

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

git config --global svn.pushmergeinfo true

关于git - 如何使用 git-svn 将远程分支与主干同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9177495/

相关文章:

git - git 如何在提交图中存储 "edges"?

git - 跳过提交并在 Git 中

Git LFS 删除早于提交的文件

Git:解释为什么使用 PGP key 签署提交/标签并不愚蠢

git - 如何在GIT和SVN之间进行双向同步

git - 为 RHEL 6 安装/构建 git-svn

git - 从 cloud9ide.com 将我的代码推送到 DotCloud

windows - 从 SVN 迁移到 GIT 时的外部

svn - 如何创建一个分支为 "subproject"的 git clone?

使用 svn.pushmergeinfo 进行 merge 的 git-svn 工作流程