我遇到了git-svn dcommits的问题,使得git存储库无法跟踪哪些提交.
我尝试确保git中的master分支始终跟随SVN存储库中的trunk.所以,每当我工作,我都在一个主题分支.这是我的情景:
在主题分支中工作一段时间
git checkout -b my-topic
git commit -m "blah blah blah"
Run Code Online (Sandbox Code Playgroud)
然后我决定将我的分支合并回主人
git checkout master
git svn rebase #get any changes in svn
git rebase master my-topic
git merge my-topic --ff-only
Run Code Online (Sandbox Code Playgroud)
直到这里,一切都进展顺利.我现在有主人和我的主题加速并指向相同的提交,整个历史记录如下所示:
A -- B -- C - master + my-topic
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做的时候
git svn dcommit
Run Code Online (Sandbox Code Playgroud)
我最终得到了一个看起来像这样的树(B和C是我最初对该主题做出的提交):
-- B -- C - my-topic
/
A -- B -- C - master + remotes/trunk
Run Code Online (Sandbox Code Playgroud)
看起来在dcommit过程中,git将提交推送到SVN,然后在master上重放它们.我认为问题是他们得到不同的提交者信息.我正在使用tortoise plink和SSH密钥登录svn.
在未被推送到SVN的git存储库中提交的提交者信息如下:
Collin Hockey <chockey@xyz.com>
Run Code Online (Sandbox Code Playgroud)
已经推送到svn存储库的提交有这个:
chockey <chockey@6206317d-b652-48a9-a948-4036602fc523>
Run Code Online (Sandbox Code Playgroud)
有什么办法可以防止这些分支分裂吗?我可以通过说来解决它
git rebase master my-topic
Run Code Online (Sandbox Code Playgroud)
再次,但我觉得这应该是不必要的.这个问题的主要问题是,一旦分支的更改被推送到SVN,git就不再认为分支已被合并到任何地方.删除不再需要的旧分支会让人感到困惑.
Lau*_*eyn 10
该git svn dcommit命令的工作原理如下:
last-svnlast-svn..HEAD到Subversion(顺便丢弃电子邮件)HEAD为last-svn换句话说,您发送到SVN的提交将被销毁并从SVN的更新中重新创建.这必须发生,因为来自SVN的提交与使用Git创建的提交不同:
这就是你的分支my-topic偏离的原因master.
您可以git svn dcommit使用--authors-file和--authors-prog选项自定义从SVN用户名计算作者电子邮件的方式.