Git在将更新合并到我的子树时感到困惑

Git在将更新合并到我的子树时感到困惑,git,merge,git-subtree,subtree,Git,Merge,Git Subtree,Subtree,我们以前在主存储库中使用了许多子模块,但为了提高项目的可维护性,我们启动了一个实验分支,在那里我们用子树替换了所有子模块 这很有效——但现在当我尝试更新其中一个子树时,它错误地将更新合并到一个完全错误的目录中,而这个目录甚至不是子树 分支“子树”包含实验分支的主存储库是:git://github.com/hugowetterberg/goodold_drupal.git 要从中合并更新的存储库:git://github.com/voxpelli/drupal-oembed.git 通过执行以下操

我们以前在主存储库中使用了许多子模块,但为了提高项目的可维护性,我们启动了一个实验分支,在那里我们用子树替换了所有子模块

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

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

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

通过执行以下操作进行合并:git merge-s子树oembed/master

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

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


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

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

解决此问题的最佳方法是:

  • 像上面那样合并文件

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

  • git commit-a——修改
    以更正合并提交

  • 未来的合并可能会很好地工作,除非这个目录经常处于难以置信的流量中

    实验性的“”命令有一个
    --prefix
    参数,可以让您覆盖它,但不幸的是,它目前不起作用(因为它需要处理“git merge-s subtree”特性,而且还没有时间这样做)

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

    git版本1.7.9.5

    git pull -s subtree <remote name> <remote branch>
    
    git pull-s子树
    
    (合并进入了错误的目录)

    git重置——硬头^
    git pull-s subtree-Xsubtree=correct/directory
    
    请注意,目录上没有尾随斜杠

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


    我刚刚向git提交了一个补丁,允许您使用“-Xsubtree=”选项显式覆盖子树,并被接受。在git 1.7.0左右的版本中寻找它。当你从源repo引入一个文件夹(例如
    git read tree--prefix=dest/-u source\u repo/master:folder\u in\u repo/
    )而不是整个文件夹时,将即使是很小的更改合并回repo似乎也会导致整个文件夹被放置到repo中的一个新位置(即重复)(事实上,这是git出错时最痛苦的合并。尝试
    -X subtree=XX
    帮助了我,谢谢大家。这让我发疯了,因为幸运的是,我第一次做子树实验时,就自然而然地遇到了这个bug。)。