Git子树。两个存储库中的一个常见文件夹

时间:2014-03-05 16:54:06

标签: git git-subtree multiple-repositories

我有两个项目, 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 ? 或者我可能做错了什么?

1 个答案:

答案 0 :(得分:1)

而不是使用:

git pull -X subtree

尝试使用subtree pull命令。据说它可以在subtree push和其他subtree子命令中使用:

git subtree pull --prefix=common common-repo master