我有一个关于git-svn dcommits的问题,它导致git存储库无法跟踪哪些提交是哪些。我尽力确保git中的主分支始终跟随SVN存储库中的主干。因此,每当我在工作时,我都会在一个专题分支上工作。以下是我的情况:在一个专题分支上工作了一段时间。
然而,当我这样做时。
我最终得到了一棵如下所示的树形结构(B和C是我最初提交到这个主题的版本)。
提交到svn仓库的提交记录有以下内容:
git checkout -b my-topic
git commit -m "blah blah blah"
接下来我决定将我的分支合并回主分支
git checkout master
git svn rebase #get any changes in svn
git rebase master my-topic
git merge my-topic --ff-only
到目前为止,一切都进行得很顺利。现在我已经将主分支和我的专题分支同步,并指向相同的提交,整个历史记录如下:
A -- B -- C - master + my-topic
然而,当我这样做时。
git svn dcommit
我最终得到了一棵如下所示的树形结构(B和C是我最初提交到这个主题的版本)。
-- B -- C - my-topic
/
A -- B -- C - master + remotes/trunk
在dcommit过程中,Git会将提交推送到SVN,然后将它们重新应用到主分支上。问题可能是它们具有不同的提交者信息。我使用Tortoise Plink和SSH密钥登录svn。
在Git仓库中尚未推送到SVN的提交具有以下提交者信息:
Collin Hockey <chockey@xyz.com>
提交到svn仓库的提交记录有以下内容:
chockey <chockey@6206317d-b652-48a9-a948-4036602fc523>
有没有什么方法可以防止这些分支断裂?我可以通过以下方式修复:
git rebase master my-topic
我觉得再重复一遍可能是没有必要的。这个问题的主要原因是一旦一个分支的更改被推送到SVN,git就不再认为该分支已经被合并到任何地方。这会使删除你不再需要的旧分支变得混乱。