Git поддерево. Одна общая папка в двух репозиториях
У меня есть два проекта, ProjectA и ProjectB. У каждого из них есть свой git-репо. Эти проекты имеют много одинаковых файлов. Эти файлы находятся в папках с именем " common " как в ProjectA, так и в ProjectB. Вот пример файлов:
ProjectA:
...
cat-folder
dog-folder
common
commonFile1
commonFile2
fish-file.php
squirrel-file.txt
...
ProjectB:
...
potato-folder
apple-folder
common
commonFile1
commonFile2
tomato-file.xml
pineapple-file.csv
...
Я работаю над обоими проектами. Я могу внести изменения в общие файлы, работающие над ProjectA или ProjectB. Я хотел бы, чтобы изменения общих файлов, сделанные в ProjectA, также появлялись в общих файлах в ProjectB (и наоборот). Итак, я бы хотел, чтобы " общая " папка в обоих проектах всегда была актуальной и содержала одни и те же файлы.
Для этого я использую git поддерево. Я создал третий репо " common-repo ", поместил туда все файлы " общей " папки, затем удалил " общие " папки из обоих проектов. Затем в каждом проекте я делаю это:
$ 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
Затем, если я внесу изменения в общий репо и протолкну их, я смогу легко перенести их в ProjectA или ProjectB:
$ cd /path/to/ProjectA # or ProjectB
$ git pull -X subtree=common common-repo master # this pulls changes from common-repo
Но проблема возникает, когда я меняю файлы в " общей " папке, работающей в ProjectA (или ProjectB), и пытаюсь перенести ее в общий репо.
$ cd /path/to/ProjectA # or ProjectB
$ git subtree push --prefix=common common-repo master # !!!!
Последняя команда помещает все файлы ProjectA в общее хранилище, в том числе его не общие файлы!
Как я могу подтолкнуть к общему репо только файлы из " общей " папки? А может я что-то делаю абсолютно неправильно?
1 ответ
Вместо того, чтобы использовать:
git pull -X subtree
Попробуйте использовать subtree pull
команда. Предположительно это сделано для работы по subtree push
и другие subtree
подкоманды:
git subtree pull --prefix=common common-repo master