首页 文章

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

提问于
浏览
2

我有两个项目,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 ", put there all files of " common " folder, then deleted " 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”文件夹?或者我可能做错了什么?

1 回答

  • 1

    而不是使用:

    git pull -X subtree
    

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

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

相关问题