【问题标题】:Git confused when merging an update into my subtree将更新合并到我的子树时 Git 感到困惑
【发布时间】:2010-11-21 08:27:22
【问题描述】:

我们之前在主存储库中使用了许多子模块,但为了提高项目的可维护性,我们启动了一个实验分支,将它们全部替换为子树。

这很好用 - 但是现在当我尝试更新其中一个子树时,它错误地将更新合并到一个完全错误的目录中,甚至不是子树。

分支“子树”包含实验分支的主存储库是:git://github.com/hugowetterberg/goodold_drupal.git

要合并更新的存储库:git://github.com/voxpelli/drupal-oembed.git

通过做合并:git merge -s subtree oembed/master

更新应合并到的路径:sites/all/modules/oembed/

它们合并到的路径:modules/aggregator/translations/

任何人知道如何将更新放入子树或错误可能是什么?

【问题讨论】:

    标签: git merge git-subtree subtree


    【解决方案1】:

    不幸的是,这是“git merge -s subtree”代码中的一个错误(或缺少的功能)。它实际上猜测您要合并的子树。通常,这神奇地证明是正确的,但如果您的子树包含大量更改(或者最初是空的,或其他),那么它可能会严重失败。

    解决它的最佳方法是:

    1. 像上面那样合并文件。

    2. 手动将所有生成的文件移动到它们应该去的地方。

    3. git commit -a --amend 更正合并提交。

    未来的合并可能会正常工作,除非这个目录一直处于令人难以置信的流量中。

    实验性的“git subtree”命令有一个--prefix 参数,应该可以让你覆盖它,但不幸的是它目前不起作用(因为它需要解决“git merge -s subtree”功能和那里还没来得及做)。

    无论如何,这应该是一种罕见的情况,即使将来合并同一项目也不需要解决方法。

    【讨论】:

    • 我刚刚向 git 提交了一个补丁,它允许您使用该 '-Xsubtree=' 选项显式覆盖子树,并且它被接受了。在 git 1.7.0 左右寻找它。
    • 当您从源代码库(例如git read-tree --prefix=dest/ -u source_repo/master:folder_in_repo/)引入单个文件夹而不是整个文件夹时,将即使很小的更改合并回代码库似乎也会导致整个文件夹被放入一个回购中的新位置(即重复)。
    • 事实上,这种情况并不罕见:-(
    • 当 git 出错时最痛苦的合并。尝试-X subtree=XX对我有帮助,谢谢
    • 谢谢大家。这让我发疯了,因为我很幸运地在我的第一个子树实验中遇到了这个 bug。
    【解决方案2】:

    git 版本 1.7.9.5

    git pull -s subtree <remote name> <remote branch>
    

    (合并到了错误的目录)

    git reset --hard HEAD^
    git pull -s subtree -Xsubtree=correct/directory <remote name> <remote branch>
    

    注意目录后面没有斜杠

    谢谢apenwarr

    http://git.661346.n2.nabble.com/PATCH-0-8-The-return-of-Xours-Xtheirs-Xsubtree-dir-td4069081.html

    【讨论】:

      猜你喜欢
      • 2015-10-28
      • 2022-06-13
      • 1970-01-01
      • 2023-01-14
      • 2011-02-28
      • 1970-01-01
      • 2016-11-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多