Как я могу связать зависимости в репозитории git?

В моих сценариях я часто использую библиотеки (мои или другие), которые имеют свои собственные репозитории. Я не хочу дублировать их в своем репо и застревать при их обновлении каждый раз, когда выйдет новая версия. Однако, когда кто-то клонирует репо, он все равно должен работать локально и не иметь сломанных ссылок.

Любые идеи о том, что я могу сделать?

Ответ 1

Вы можете сделать это с помощью подмодулей в git. В своем репозитории выполните:

git submodule add path_to_repo path_where_you_want_it

Итак, если в репозитории библиотеки был URL-адрес git://github.com/example/some_lib.git, и вы хотели его в lib/some_lib в своем проекте, вы должны ввести:

git submodule add git://github.com/example/some_lib.git lib/some_lib

Обратите внимание, что это нужно делать из каталога верхнего уровня в вашем репозитории. Поэтому не cd в каталог, где вы его помещаете первым.

После добавления подмодуля или всякий раз, когда кто-то делает новую проверку вашего репозитория, вам нужно будет сделать:

git submodule init
git submodule update

И тогда все подмодули, которые вы добавили, будут проверены в той же версии, что и у вас.

Если вы хотите обновить до более новой версии одной из библиотек, cd в подмодуле и вытяните:

cd lib/some_lib
git pull

Затем, когда вы делаете git status, вы должны увидеть lib/somelib, указанный в измененном разделе. Добавьте этот файл, зафиксируйте и обновите его. Когда коллаборатор вытаскивает эту фиксацию в свой репозиторий, они будут видеть lib/somelib как измененные, пока они не запустит git submodule update снова.