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

5

问题: 每次尝试将子树拉取时,即使我没有进行任何更改,也会出现合并冲突。

我的做法:

子树仓库中:

# Make some changes

$ git commit -am 'Changes made'

$ git push origin master

主版本库 中。
$ 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

子树仓库

$ git pull origin master

# Make some changes

$ git commit -am 'Changes made'

$ git push origin master

主存储库
$ git subtree pull --prefix public/common {{subtree-repo}} master --squash

这就是事情爆炸的地方。拉取给了我:

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.

我没有做任何更改,为什么会出现合并冲突呢?
我想实现的目标是:我有一个基于 Cordova 构建的 Web 项目和移动项目。因为它们都使用 JavaScript,所以我有几个组件和模型希望在两者之间共享。我想把这些通用的东西放在两者之间的一个共享文件夹中,这样我就不必复制粘贴了。我研究了子模块和子树的利弊,并决定采用子树。现在这是一个单人项目,但我希望按正确的方式进行,以便未来可以扩展。
注意:如果您对我想要完成的工作有更好的建议,那将是非常棒的 :-)
1个回答

2
不确定是什么导致了问题,但我已经找到了一个更好的解决方案来实现我想要达到的目标:
bower install git@bitbucket.org:username/my_repo.git --save

所以我只会使用 bower 来在存储库之间共享东西。我没有意识到可以使用 git 存储库 URL 作为 bower 组件。我觉得这非常好。不幸的是,这并不允许我从我正在使用的存储库进行上游更改,但至少我有一个超级简单的方法来做到这一点 :)

更新

我在Google+上发布了这种方法Rob Becker提到你可以使用bower symlink使它更简单:

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

这将设置链接。然后,在您的主项目中,您已经有一个依赖于bs-js-common的bower时,只需执行: $ bower link bs-js-common

然后,您的主项目的bower_components/bs-js-common文件夹中将有一个文件系统链接到实际项目存储库所在的位置。这样,您可以在两个地方看到实时更改。


4
我会尽力进行翻译:我希望看到原问题的正确回答!同样的问题在另一种情况下也会出现,此时bower不适用。 - Alex R
@AlexR,我建议你再问一遍。 - kentcdodds

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接