我有两个项目, 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子树。我创建了第三个repo“ 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 :< / p>
$ 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 ”文件夹中的 common-repo 文件推送到 common-repo ? 或者我可能做错了什么?
答案 0 :(得分:1)
而不是使用:
git pull -X subtree
尝试使用subtree pull
命令。据说它可以在subtree push
和其他subtree
子命令中使用:
git subtree pull --prefix=common common-repo master