Як налаштувати проект git для використання зовнішнього підмодуля repo?


213

Я хотів би створити репо, яке тягне у віддалений репо.

Наприклад, скажімо, jQuery як підмодуль:

git://github.com/jquery/jquery.git

Яким би був процес створення репо з jQuery як підмодулю та додавання мого власного зовнішнього як віддаленого репо.

Крім того, коли це налаштування, якщо я натискаю / тягну до власного пульта, чи залишиться зовнішня недоторканою?


1
Коли ви говорите "підключитися", ти кажеш, що хочеш, щоб repo jQuery був підмодулем власного репо?
ezod

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

Дивіться підручник з підмодулю Git на вікі git.
Грег Бекон

Відповіді:


343
  1. У вас є проект - називайте його MyWebApp, у якого вже є github repo
  2. Ви хочете використовувати сховище jquery у своєму проекті
  3. Ви хочете залучити репорт jquery до свого проекту як підмодуль .

Підмодулі справді, дуже прості для посилання та використання. Якщо припустити, що у вас вже створено MyWebApp як репо, з терміналу видайте ці команди:

cd MyWebApp
git submodule add git://github.com/jquery/jquery.git externals/jquery

Це створить каталог з назвою externals/jquery* та зв’яже його з сховищем github jquery. Тепер нам просто потрібно запустити підмодуль і клонувати до нього код:

git submodule update --init --recursive

Тепер у вас повинен бути клонований останній код у підмодулі. Якщо репортаж jquery змінюється, і ви хочете зняти останній код вниз, просто submodule updateповторіть команду. Зверніть увагу: у моїх проектах зазвичай є декілька зовнішніх сховищ, тому я завжди групую репости під каталогом "зовнішні".

В Інтернеті Pro Git Book є хороша інформація про підмодулі (та git взагалі), представлені легко для читання. По черзі, git help submoduleтакож дасть гарну інформацію. Або подивіться підручник Git Submodule на git wiki.

Я помітив цей запис у блозі, який розповідає про субмодулі та порівнює їх із механізмом svn: externals Subversion: http://speirs.org/blog/2009/5/11/understanding-git-submodules.html

* Як найкраща практика, ви завжди повинні розміщувати свої підмодулі у власному каталозі, наприклад, Зовнішні. Якщо цього не зробити, ваш кореневий каталог проекту може дуже швидко захаращуватися.


4
Чудове пояснення! :) Крім того, "підмодулі git help" допомагають, якщо ви хочете трохи більше деталей, внутрішніх даних тощо
WhyNotHugo

2
Дякую, саме те, що мені було потрібно.
MikeSchinkel

1
@Chevi Це залежить від ваших вимог. Загалом, додавання git-проекту як підмодуля до вашого проекту є хорошим рішенням для проектів, які часто змінюються або ще знаходяться на стадії розробки. Це дозволяє легко переконатися, що всі сторонні коди у вашому проекті актуальні. Для стороннього коду, який по суті є статичним - стабільний, зрілий код, який, ймовірно, не сильно зміниться від версії до версії - використання підмодуля не дає великого значення.
пам’ятки

2
вибачте, але порівняти зі зовнішніми версіями svn, це не так просто
Keil

2
@Keil Це дві команди, git submodule addі git submodule update... я не впевнений, наскільки це було легше.
пам’ятки

24

Більшість з того, що вам потрібно знати, вже відповіли, тому я не буду турбуватися, щоб вирішити, що, однак, я знайшов невелику частину інформації, якої зазвичай не вистачає.

Як відомо, "git pull" не буде оновлювати підмодулі, і "оновлення підмодулів git" також не завантажить останню HEAD цих підмодулів.

Щоб оновити всі ваші підмодулі до їх останньої версії вище, можна скористатися

git submodule foreach git pull

Якщо ви часто змінюєте свої підмодулі та маєте багато, тоді "git foreach" стане неоціненним.



0

Я думаю, що відповідь @Hugo може бути тим, що вам потрібно, і працює добре. Тож я знайшов простіший шлях.

git submodule update --remote

Це все.

Таким чином, повний робочий процес може бути таким:

git clone project-with-submodules
git submodule init
git config -l
git submodule update --remote
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.