代码之家  ›  专栏  ›  技术社区  ›  Harmon Wood

为什么git merge会将我的svn url设置为分支

  •  1
  • Harmon Wood  · 技术社区  · 15 年前

    在我主人结账时,我可以 git svn info 网址是 svn://myrepo.com/trun K 当我的新功能结帐时,SVN URL是 svn://myrepo.com/branches/new_feature .

    在运行 git merge new_feature 在我的主签出时,主URL更改为 svn://myrepo.com/branches/new_功能 . 这使我的主功能和新功能都指向某个地方,我再也不能 git svn dcommit 到后备箱。

    注意:这是上周的工作,我能想到的唯一不同的是我需要更新分支到主干。我跑 git merge trunk 在我的分公司。也许现在吉特不会再让我把树枝合并回树干了?

    我想知道这是为什么,以及如何防止它发生,或者在它发生后修复它。

    2 回复  |  直到 13 年前
        1
  •  3
  •   Tobu    15 年前

    Git SVN并没有认真尝试在SVN数据模型中表示Git合并(可能是因为它不能正确完成)。SVN分支信息是从Git日志消息中获取的;不知何故,新的_特性首先出现在日志中。遵循第一个合并父级会更好(编辑:git-svn可能会,见下文)。

    无论如何,处理此问题的建议方法是不记录合并(使用 git merge --squash 或者完全切换到Git。

    看到您的编辑:您的合并回主干一定是一个快速前进。所以Gitsvn遵循它看到的第一个合并的第一个父级,这是将主干合并到新的_特性中,直到它找到一个带有Gitsvn元数据的日志消息。通过使用阻止Git快速转发合并到主干中 git merge --no-ff feature_branch .

        2
  •  0
  •   Shadow Man    13 年前

    根据 git documentation :

    If you do merge, note the following rule: git svn dcommit will
    
    attempt to commit on top of the SVN commit named in
    
    git log --grep=^git-svn-id: --first-parent -1
    

    …所以当你合并你的 new-feature 分支(该分支已被数据提交,并具有一个带有 git-svn-id 指向它的分支) master 分支(在合并之前 Git SVN标识 原木指向树干)你给了 主人 一 --first-parent 记录 Git SVN标识 指向错误的分支 新功能

    这就是为什么在合并由SVN支持的内容(或者根本不这样做)时,各地都有警告要小心的原因。