Як я можу пов'язати залежності в git repo?


149

У своїх сценаріях я часто використовую бібліотеки (мої чи інші), які мають свої репости. Я не хочу дублювати ті, хто знаходиться у моїй репо-репортажі, і заважаю оновлювати їх щоразу, коли виходить нова версія. Однак, коли хтось клонує репо, він все одно повинен працювати локально і не мати розірваних зв’язків.

Будь-які ідеї про те, що я міг би зробити?

Відповіді:


212

Це можна зробити з підмодулями в 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знову.


2
Дякуємо за вашу відповідь! (і, мабуть, прийму це завтра) Чи є спосіб додати лише один файл з іншого репо як залежність? Або це має бути ціла папка?
Леа Веру

2
Якщо ви хочете відслідковувати його як підмодуль (і, таким чином, мати можливість легко втягувати оновлення), вам доведеться задіяти все сховище. На відміну від багатьох інших VCS, git дійсно хоче мати справу лише з сховищем верхнього рівня.
Емілі

7
прочитайте це, щоб знати, для чого підмодуль корисний і шляхи вирішення потенційних проблем. і дискусія про це .
minghua

1
давайте скажемо, що ви імпортуєте як підмодуль інше репо, яке вам належить. Чи можете ви внести зміни до вихідного репо через локальні зміни в підмодулі? Скажімо, ви знайшли помилку та вам потрібно оновити оригінал?
andrevenancio

3
Я знаю, що це стара відповідь, але підмодулі git можна оновити за допомогою, git submodule update --remoteя рекомендую використовувати більше прапорів, хоча і для більш складних проектів. Я використовуюgit submodule update --remote --recursive --init
Кріс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.