Как настроить git-проект для использования субмодуля внешнего репо? - PullRequest
203 голосов
/ 26 января 2010

Я хотел бы создать репо, которое использует удаленное репо.

Например, скажем, jQuery в качестве подмодуля:

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

Каков будет процесс созданиярепозиторий с jQuery в качестве подмодуля и добавление моего внешнего в качестве удаленного репо.

Кроме того, после настройки, если я нажму / потяну к своему удаленному пульту, внешнее устройство останется неповрежденным?

Ответы [ 4 ]

331 голосов
/ 05 марта 2011
  1. У вас есть проект - назовите его MyWebApp , в котором уже есть репозиторий github
  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 еще раз. Обратите внимание: у меня обычно есть несколько внешних репозиториев в моих проектах, поэтому я всегда группирую репозитории в каталоге "externals".

Онлайн Pro Git Book содержит некоторую полезную информацию о подмодулях (и git в целом), представленную в удобной для чтения форме. С другой стороны, git help submodule также даст хорошую информацию. Или взгляните на учебник по подмодулям Git на вики-сайте git.

Я заметил эту запись в блоге, которая рассказывает о подмодулях и сравнивает их с механизмом Subversion svn: externals: http://speirs.org/blog/2009/5/11/understanding-git-submodules.html

* Рекомендуется всегда размещать подмодули в их собственном каталоге, например, в Externals. Если вы этого не сделаете, ваш корневой каталог проекта может стать очень загроможденным очень быстро.

21 голосов
/ 11 мая 2012

На большую часть того, что вам нужно знать, уже дан ответ, поэтому я не буду беспокоиться об этом, однако я обнаружил небольшую часть информации, которая обычно отсутствует.

Как вы знаете, "git pull" не будет обновлять подмодули, а "git submodules update" также не будет загружать последнюю HEAD из этих подмодулей.

Чтобы обновить все ваши подмодули до последней версии, вы можете использовать

git submodule foreach git pull

Если вы часто меняете свои подмодули, и у вас их много, то «git foreach» станет бесценным.

2 голосов
/ 31 мая 2010

В конце концов, я обнаружил, http://github.com/evilchelu/braid, похоже, соответствует тому, как я ожидал работы субмодулей и пультов

0 голосов
/ 20 января 2016

Я думаю, что ответ @Hugo может быть тем, что вам нужно, и отлично работает. Поэтому я нашел более простой способ.

git submodule update --remote

Вот и все.

Таким образом, полный рабочий процесс может быть:

git clone project-with-submodules
git submodule init
git config -l
git submodule update --remote
...