Как я могу связать зависимости в git-репо? - PullRequest
136 голосов
/ 19 октября 2011

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

Есть идеи о том, что я могу сделать?

1 Ответ

193 голосов
/ 19 октября 2011

Вы можете сделать это с помощью подмодулей в 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 снова.

...