Переход к стратегии разделения репозитория поддерева
-
21-12-2019 - |
Вопрос
Наконец я понял, как создать репозиторий поддерева из моего основного репозитория с помощью Git.
Осталась одна вещь, в которой я не совсем уверен.Предположим, что «Основной» — это репозиторий, в котором хранится весь мой код, а «Общий» — это подпапка, которую я отделил от «Основной».
Когда я вношу изменения в код в своем основном репозитории, а также вношу изменения в «Общий» репозиторий, как мне действовать?
Могу ли я сначала сделать commit
в репозитории «Главный», если я внес изменения как в «Основной», так и в «Общий» репозиторий?
git commit -am "Made changes to main and shared"
Должен ли я тогда ВСЕГДА сделай push
сначала в репозиторий «Общий»?
git subtree push --prefix=path/to/code --squash shared master
И после этого просто нажмите «Основной» репозиторий:
git push
Должен ли я с этого момента всегда брать на себя обязательства и настаивать на этом?Или, может быть, это неправильный подход?
Решение
Нет всегда, поскольку вы можете захотеть сохранить некоторые изменения поддерева только в контексте вашего Main
репо, и в этом случае простая фиксация + вставка указанного Main
репо достаточно (в этом случае вам не нужно вносить свой вклад в восходящий репозиторий поддерева).
Это отличается от субмодуля, где любой модификация в подмодуле должна быть зафиксирована, а затем вам нужно вернуться к родительскому репозиторию и снова зафиксировать (чтобы записать новый SHA1 этого подмодуля).
В этом случае (подмодуль), да, рекомендуется сначала отправить подмодуль (в его восходящий репозиторий), прежде чем отправлять родительский репозиторий:любой, кто клонирует родительский репозиторий, захочет получить указанный SHA1 из восходящего репозитория подмодуля (и если вы не отправили подмодуль...что SHA1 будет недоступен).
В поддереве главный репозиторий включает в себя все, поэтому добавления основного репозитория может быть достаточно.
Вы отправляете изменения в восходящий репозиторий поддерева только в том случае, если хотите, чтобы ваши изменения были отражены в этом восходящем репозитории.