我在git-svn dcommit方面遇到了一个问题,使得git存储库忘记了哪些是哪些提交。
我尝试确保git中的主分支始终遵循SVN存储库中的主干。所以每当我工作的时候,我就在一个主题分支上。这是我的场景:
在主题分支中工作一段时间
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上重放它们。我认为问题在于他们得到了不同的提交者信息。我正在使用乌龟链接和SSH密钥登录svn。
git存储库中尚未推送到SVN的提交具有提交者信息,例如:
Collin Hockey <chockey@xyz.com>但是,已推送到svn存储库的提交具有以下内容:
chockey <chockey@6206317d-b652-48a9-a948-4036602fc523>有什么方法可以防止这些分支分裂吗?我可以这样说来修复它
git rebase master my-topic再说一次,但我觉得这应该是不必要的。这样做的主要问题是,一旦分支的更改被推送到SVN,git就不再认为该分支在任何地方被合并了。删除不再需要的旧分支会让人感到困惑。
发布于 2011-04-08 23:30:23
git svn dcommit命令的工作方式如下:
从SVN找到最后一个提交;让我们称其为last-svn
last-svn
HEAD重置为来自SVN的提交,并创建相应的提交换句话说,您发送到SVN的提交将被销毁,并从SVN的更新中重新创建。这肯定会发生,因为来自SVN的提交与使用Git创建的提交不同:
SVN revision
计算得出的
这就是您的分支my-topic与master不同的原因。
您可以使用--authors-file和--authors-prog选项定制git svn dcommit从SVN用户名计算作者电子邮件的方式。
发布于 2011-04-08 23:28:45
你是对的,git再次从svn重放提交。git中的分支只是指向提交(或者有in /散列)的指针。来自svn的提交将具有不同的散列,并且git svn dcommit只更新当前检出的分支,因此您的主题分支仍然指向旧的提交
https://stackoverflow.com/questions/5595870
复制相似问题