Как включить подпапку из одного git-репо в другой?
Скажем, у меня есть Project1 в git-репо. В Project1 есть подпапка, которую я хочу включить в Project1+ (Project2, Project3 и т. Д.). Под словом "включить" я не имею в виду копирование и вставку. Мне нужна ссылка на Project1, чтобы при внесении изменений в Project1 я мог автоматически интегрировать эти изменения в Projects1+. Кроме того, я хочу разместить его в нескольких местах в Project1+.
Пример:
Project1
|-Subfolder1
|-Stuff I want...
|-README.md
Project2
|-Subfolder1 <- from Project1
|-SomeOtherFolder
|-Subfolder1 <- from Project1
|-README.md
Подмодули Git не будут работать, потому что:
- Подмодулем является весь репо, а не подпапка. Я не хочу всего репо, только одну папку.
Стратегия слияния поддеревьев не будет работать, потому что:
- Поддерживается только одно поддерево; когда вы выполняете вытягивание для поддерева (git pull -s поддерево...), оно обновляет только одно на самом высоком уровне (независимо от того, в каком порядке они были созданы).
Помните, что я новичок в Git, так что, возможно, вышеприведенные выводы неверны. Но это то, что я обнаружил в результате исследований и экспериментов.
Возможное решение, которое я придумал:
- Создать ветку для Project1.
- Delete everything I don't want from this branch.
- Move the files I DO want to the root of this branch.
- Delete Subfolder.
- Add this branch as a submodule to Project1+.
This sorta-kinda worked. I modified the Project1 master branch and was able to merge the changes into the new branch, and therefore update the submodule, but this seems unnecessarily complex (given how easy it is in SVN). Furthermore when I merged the changes in Project1 it seemed to consider the deleted files as conflicted; ie it was just a huge PITA to update Project1. Maybe I need a different merge strategy?
But mainly I'm asking is this even the right path at all?
For the record, this is trivially easy with SVN Externals. So the use-case is there. And I realize it's entirely possible no one is doing this with git. The explanations I can find online after a couple days of research all boil down to "restructure your projects so each repo has what you want to share"; ie "Subfolder" from Project1 becomes its own repo. I'm hoping that's not really the final answer.
Спасибо!
1 ответ
В любом случае, для всех возможных рабочих процессов вы должны использовать 3 репозитория: Subfolder1 становится отдельным репозиторием, который вы будете использовать в "superrepos"
- Я думаю, вы можете использовать даже субмодули (с примечанием выше)
- ИМХО (очень скромно), git-subtree - лучшая итерация, и в ближайшем будущем будет полная замена подмодулей. Совместное использование кода между проектами с поддеревом git демонстрирует хороший вариант использования для ситуации, почти идентичной вашей, с подробным пошаговым руководством, иллюстрирующим руководство по преобразованию монолитного репо в репо, связанное с поддеревом 2, при этом отдельный репозиторий готов к повторному использованию.