【发布时间】:2014-03-05 16:54:05
【问题描述】:
我有两个项目,ProjectA 和 ProjectB。他们每个人都有自己的 git repo。这些项目有许多相同的文件。这些文件位于 ProjectA 和 ProjectB 中名为“common”的文件夹中。以下是文件示例:
项目A:
...
cat-folder
dog-folder
common
commonFile1
commonFile2
fish-file.php
squirrel-file.txt
...
项目B:
...
potato-folder
apple-folder
common
commonFile1
commonFile2
tomato-file.xml
pineapple-file.csv
...
我从事这两个项目。我可能会对 ProjectA 或 ProjectB 上的常用文件进行更改。我希望在 ProjectA 中对公共文件所做的更改也出现在 ProjectB 的公共文件中(反之亦然)。 因此,我希望两个项目中的“common”文件夹始终是最新的并包含相同的文件。
为此,我使用 git subtree。我创建了第三个仓库“common-repo”,将“common”文件夹的所有文件放在那里,然后删除了“common”文件夹这两个项目。然后在每个项目中我都会这样做:
$ cd /path/to/ProjectA # or ProjectB
$ git remote add common-repo https://my_user@bitbucket.org/url/of/common-repo
$ git fetch common-repo
$ git subtree add --prefix=common/ common-repo master --squash # this command adds the "common" folder with my common files to the current project
然后,如果我在 common-repo 中进行更改并推送它们,我可以轻松地将它们拉入 ProjectA 或 ProjectB:
$ cd /path/to/ProjectA # or ProjectB
$ git pull -X subtree=common common-repo master # this pulls changes from common-repo
但是当我更改在 ProjectA(或 ProjectB)中工作的“common”文件夹中的文件并尝试推送它时,就会出现问题到 common-repo。
$ cd /path/to/ProjectA # or ProjectB
$ git subtree push --prefix=common common-repo master # !!!!
最后一条命令将ProjectA的所有文件推送到common-repo,包括它的非公共文件!
我如何才能推送到 common-repo 仅“common”文件夹的文件? 或者我做错了什么?
【问题讨论】:
标签: git git-subtree multiple-repositories