Каковы наилучшие практики для представления зависимости проекта git от локального пакета с его собственным репозиторием git?
У меня есть локальная зависимость пакета со своим собственным git-репозиторием, и у меня есть проект, который зависит от этого каталога. Каков наилучший способ синхронизации репозитория проекта и его локального репозитория пакетов в синхронизации?
Один из вариантов - объединить пакет как подпроект, как описано здесь:
Как перенести Git-проекты в один проект с подпроектами
Однако, если я внесу изменения в зависимость от пакета, мне понадобится объединить их обратно. Кроме того, в итоге будет поддерживаться две зеркальные версии пакета. Это лучшая практика в этом сценарии или есть лучшее решение?
В качестве альтернативы, я мог бы иметь символическую ссылку на пакет, но я не уверен, что лучше всего, когда у проекта есть суб-репозиторий git, который символически связан.
1 ответ
Для исходных зависимостей у вас есть выбор между:
git submodule add -b master -- /url/of/dependency.git
git поддерево (как показано здесь, см. этот урок)
git subtree add --prefix=subdir --squash /usr/of/dependency.git master
И то, и другое допускает эволюцию в субрепо, но если вы не вносите постоянные изменения, я предпочитаю субмодуль: он позволяет ссылаться на фиксированный SHA1 другого репо.
См. Больше в разделе " Различия между подмодулем git и поддеревом".
Подотчет упоминается как gitlink, специальная запись в индексе родительского репо. Вы по-прежнему можете совершать коммиты в этом подпреступлении, пока вы фиксируете и толкаете их, затем переходите на один уровень вверх к родительскому репо, добавляете и фиксируете новый SHA1 (gitlink) и тоже толкаете его.
Вы можете ссылаться на подмодуль, чтобы следовать за веткой (то есть -b master
часть)
Любой другой проект, ссылающийся на тот же субмодуль, должен был бы сделать:
git submodule update --remote
Они будут получать последние из этой ветви (и должны будут добавить и зафиксировать новый SHA1, полученный в результате выборки подмодуля)