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,所以我想在两者之间共享几个组件和模型。我想将这些常见的东西放在他们两个之间的共享文件夹中,这样我就不必复制粘贴了。我研究了子模块和子树的优缺点,并决定使用子树。现在这是一个单人项目,但我想以正确的方式做事,以便它可以扩展。
注意:如果您有更好的方法来完成我正在尝试做的事情的建议,那就太棒了:-)
不确定是什么导致了问题,但我已经为我想要完成的任务确定了更好的解决方案:
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 文件夹到实际项目存储库所在位置的文件系统链接。这可以让您看到两个地方的实时变化。