git subtree pull -P what <repo> <ref> 总是合并冲突

ken*_*dds 5 git merge git-subtree

问题:即使我没有任何更改,每次尝试拉入我的子树时,我都会遇到合并冲突。

我在做什么

子树仓库中

# Make some changes

$ git commit -am 'Changes made'

$ git push origin master
Run Code Online (Sandbox Code Playgroud)

主回购

$ git subtree add --prefix public/common {{subtree-repo}} master --squash

# Make some changes

$ git commit -am 'Changes made'

$ git subtree push --prefix public/common {{subtree-repo}} master
Run Code Online (Sandbox Code Playgroud)

子树仓库中

$ git pull origin master

# Make some changes

$ git commit -am 'Changes made'

$ git push origin master
Run Code Online (Sandbox Code Playgroud)

主回购

$ git subtree pull --prefix public/common {{subtree-repo}} master --squash
Run Code Online (Sandbox Code Playgroud)

这就是事情爆发的地方。拉力给了我:

remote: Counting objects: 5, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 1), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From {{subtree-repo}}
 * branch            master     -> FETCH_HEAD
   a53e6fc..c078461  master     -> {{subtree-repo}}/master
Auto-merging public/common/README.md
CONFLICT (content): Merge conflict in public/common/README.md
Automatic merge failed; fix conflicts and then commit the result.
Run Code Online (Sandbox Code Playgroud)

那么为什么在我没有进行任何更改时会出现合并冲突呢?

我想要完成的是:我有一个 Web 项目和一个正在 Cordova 上构建的移动项目。因为它们都使用 JavaScript,所以我想在两者之间共享几个组件和模型。我想将这些常见的东西放在他们两个之间的共享文件夹中,这样我就不必复制粘贴了。我研究了子模块和子树的优缺点,并决定使用子树。现在这是一个单人项目,但我想以正确的方式做事,以便它可以扩展。

注意:如果您有更好的方法来完成我正在尝试做的事情的建议,那就太棒了:-)

ken*_*dds 2

不确定是什么导致了问题,但我已经为我想要完成的任务确定了更好的解决方案:

bower install git@bitbucket.org:username/my_repo.git --save
Run Code Online (Sandbox Code Playgroud)

所以我将使用 Bower 在存储库之间共享内容。我没有意识到你可以使用 git 存储库 url 作为 Bower 组件。我说很甜蜜。不幸的是,这不允许我从我正在使用的存储库进行上游更改,但至少我有一个超级简单的方法来做到这一点:)


更新

在 Google+ 上发布了这个方法Rob Becker提到你可以通过使用 Bower 符号链接使其变得更简单:

尝试添加“bower link”以减少所有复制。您只需将共享代码放在单独的存储库中,然后将其设置为已有的 Bower 组件即可。$ bower link 然后在 bs-js-common 中执行

这样就设置了链接。然后在你的主项目中,你对 bs-js-common 有一个 Bower 依赖,只需执行以下操作: $ bower link bs-js-common

然后,您将获得从主项目 Bower_components/bs-js-common 文件夹到实际项目存储库所在位置的文件系统链接。这可以让您看到两个地方的实时变化。

  • 我想看到原始问题的正确答案!在 Bower 不适用的不同用例中也会出现相同的问题。 (4认同)