首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Git-Svn dcommit导致分支拆分

Git-Svn dcommit导致分支拆分
EN

Stack Overflow用户
提问于 2011-04-08 21:36:46
回答 2查看 668关注 0票数 8

我在git-svn dcommit方面遇到了一个问题,使得git存储库忘记了哪些是哪些提交。

我尝试确保git中的主分支始终遵循SVN存储库中的主干。所以每当我工作的时候,我就在一个主题分支上。这是我的场景:

在主题分支中工作一段时间

代码语言:javascript
复制
git checkout -b my-topic
git commit -m "blah blah blah"

然后我决定将我的分支合并回master

代码语言:javascript
复制
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,并且指向相同的提交,整个历史看起来是这样的:

代码语言:javascript
复制
A -- B -- C - master + my-topic

但是,当我这样做的时候

代码语言:javascript
复制
git svn dcommit

我最终得到了一个看起来像这样的树(B和C是我最初对这个主题进行的提交):

代码语言:javascript
复制
  -- B -- C - my-topic
 /
A -- B -- C - master + remotes/trunk

似乎在dcommit过程中,git将提交推送到SVN,然后在master上重放它们。我认为问题在于他们得到了不同的提交者信息。我正在使用乌龟链接和SSH密钥登录svn。

git存储库中尚未推送到SVN的提交具有提交者信息,例如:

代码语言:javascript
复制
Collin Hockey <chockey@xyz.com>

但是,已推送到svn存储库的提交具有以下内容:

代码语言:javascript
复制
chockey <chockey@6206317d-b652-48a9-a948-4036602fc523>

有什么方法可以防止这些分支分裂吗?我可以这样说来修复它

代码语言:javascript
复制
git rebase master my-topic

再说一次,但我觉得这应该是不必要的。这样做的主要问题是,一旦分支的更改被推送到SVN,git就不再认为该分支在任何地方被合并了。删除不再需要的旧分支会让人感到困惑。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-08 23:30:23

git svn dcommit命令的工作方式如下:

从SVN找到最后一个提交;让我们称其为last-svn

  • Send last-svn

  • Update to (顺便说一句,丢弃电子邮件)范围内的提交
  1. HEAD重置为来自SVN的提交,并创建相应的提交

换句话说,您发送到SVN的提交将被销毁,并从SVN的更新中重新创建。这肯定会发生,因为来自SVN的提交与使用Git创建的提交不同:

SVN revision

  • Their作者电子邮件是根据SVN

计算得出的

这就是您的分支my-topicmaster不同的原因。

您可以使用--authors-file--authors-prog选项定制git svn dcommit从SVN用户名计算作者电子邮件的方式。

票数 10
EN

Stack Overflow用户

发布于 2011-04-08 23:28:45

你是对的,git再次从svn重放提交。git中的分支只是指向提交(或者有in /散列)的指针。来自svn的提交将具有不同的散列,并且git svn dcommit只更新当前检出的分支,因此您的主题分支仍然指向旧的提交

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5595870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档