我遇到了 git-svn dcommits 问题,导致 git 存储库无法跟踪哪些提交。
我尝试确保 git 中的 master 分支始终遵循 SVN 存储库中的 trunk。所以每当我工作时,我都会在一个主题分支上。这是我的场景:
在主题分支工作一段时间
git checkout -b my-topic
git commit -m "blah blah blah"
然后我决定将我的分支合并回 master
git checkout master
git svn rebase #get any changes in svn
git rebase master my-topic
git merge my-topic --ff-only
到这里为止,一切都很顺利。现在,我的 master 和 my-topic 都已达到最新状态并指向同一个提交,整个历史记录如下所示:
A -- B -- C - master + my-topic
然而,当我这样做时
git svn dcommit
我最终得到一棵看起来像这样的树(B 和 C 是我最初对该主题所做的提交):
-- B -- C - my-topic
/
A -- B -- C - master + remotes/trunk
似乎在 dcommit 过程中,git 将提交推送到 SVN,然后在 master 上重放它们。我认为问题在于他们获得了不同的提交者信息。我正在使用 tortoise plink 和 SSH 密钥登录 svn。
git 存储库中尚未推送到 SVN 的提交的提交者信息如下:
Collin Hockey <[email protected] /cdn-cgi/l/email-protection>
已推送到 svn 存储库的提交具有以下内容:
chockey <chockey@6206317d-b652-48a9-a948-4036602fc523>
有什么办法可以防止这些树枝分裂吗?我可以通过说来解决它
git rebase master my-topic
再次,但我觉得这应该是不必要的。这样做的主要问题是,一旦分支的更改被推送到 SVN,git 就不再认为该分支已在任何地方合并。删除不再需要的旧分支会让人感到困惑。