Как "git clone", включая подмодули?

Я пытаюсь поместить субмодуль в репо. Проблема в том, что когда я клонирую родительский репозиторий, папка субмодуля полностью пуста.

Есть ли способ сделать так, чтобы git clone parent_repo фактически git clone parent_repo данные в папку субмодуля?

Например, http://github.com/cwolves/sequelize/tree/master/lib/, nodejs-mysql-native указывает на внешний подмодуль git, но когда я sequelize проект sequelize, эта папка пуста.

Ответ 1

С версии 2.13 из Git и позже, --recurse-submodules можно использовать вместо --recursive:

git clone --recurse-submodules -j8 git://github.com/foo/bar.git
cd bar

Примечание редактора: -j8 - это дополнительная оптимизация производительности, которая стала доступна в версии 2.8 и позволяет одновременно получать до 8 субмодулей одновременно - см. man git-clone.

С версией 1.9 Git до версии 2.12 (флаг -j доступен только в версии 2. 8+):

git clone --recursive -j8 git://github.com/foo/bar.git
cd bar

С Git версии 1.6.5 и выше вы можете использовать:

git clone --recursive git://github.com/foo/bar.git
cd bar

Для уже клонированных репозиториев или более старых версий Git используйте:

git clone git://github.com/foo/bar.git
cd bar
git submodule update --init --recursive

Ответ 2

Вы должны сделать две вещи перед заполнением подмодуля:

git submodule init 
git submodule update

Ответ 3

Git 2.23 (Q3 2019): если вы хотите клонировать и обновить подмодули до их последней версии:

git clone --recurse-submodules --remote-submodules

Если вы просто хотите клонировать их на записанном SHA1:

git clone --recurse-submodules

Смотри ниже.


Оригинальный ответ 2010

Как упоминает joschi в комментариях, git submodule теперь поддерживает опцию --recursive (Git1.6.5 и более).

Если указано --recursive, эта команда будет добавлена в зарегистрированные подмодули и обновит все вложенные подмодули внутри.

См. Рекурсивная работа с подмодулями git для части init.
Подробнее см. git submodule..

В git версии 1.6.5 и выше вы можете сделать это автоматически, клонировав супер-проект с опцией –-recursive:

git clone --recursive git://github.com/mysociety/whatdotheyknow.git

Обновление 2016 года с git 2.8: см. "Как ускорить/распараллелить загрузку подмодулей git с помощью git clone --recursive?"

Вы можете начать выборку подмодуля, используя несколько потоков, параллельно.
Для примеров:

git fetch --recurse-submodules -j2

Более того, с Git 2.23 (Q3 2019) вы можете клонировать и извлекать субмодуль в их ветку отслеживания одной командой!

См. коммит 4c69101 (19 мая 2019 г.) от Бена Ависона ('').
(Merged by Junio C Hamano -- [TG410] -- in commit 9476094, 17 Jun 2019)

clone: добавить флаг --remote-submodules

При использовании git clone --recurse-submodules ранее не было никакого способа передать переключатель --remote неявной команде git submodule update для любой случай использования, когда вы хотите, чтобы субмодули были проверены на их ветвь удаленного отслеживания, а не SHA-1, записанная в суперпроекте.

Этот патч исправляет эту ситуацию.
Он фактически передает --no-fetch в git submodule update также на том основании, что субмодуль только что был клонирован, поэтому выборка с пульта снова только замедляет процесс.

Это значит:

--[no-]remote-submodules:

Все подмодули, которые клонируются, будут использовать состояние ветки удаленного отслеживания подмодулей для обновления подмодуля, а не для суперпроектов, записанных SHA-1. Эквивалентно передаче --remote в git submodule update.

Ответ 4

Вы можете использовать эту команду для клонирования своего репо со всеми подмодулями:

git clone --recursive YOUR-GIT-REPO-URL

Или, если вы уже клонировали проект, вы можете использовать:

git submodule init
git submodule update

Ответ 5

Если ваш субмодуль был добавлен в ветку, обязательно включите его в свою команду clone...

git clone -b <branch_name> --recursive <remote> <directory>

Ответ 6

Попробуйте следующее:

git clone --recurse-submodules

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

Ответ 7

Я думаю, что вы можете пойти с 3 шага:

git clone
git submodule init
git submodule update

Ответ 8

поздний ответ

// git CLONE INCLUDE-SUBMODULES ADDRESS DESTINATION-DIRECTORY
git clone --recursive https://[email protected]/USERNAME/REPO.git DESTINATION_DIR

Поскольку я просто провел целый час, играя с другом: даже если у вас есть права администратора на BitBucket, всегда клонируйте архив ORIGINAL и используйте пароль того, кто владеет репо. Раздражающе узнать, что вы столкнулись с этим минетом: P

Ответ 9

Попробуйте это для включения подмодулей в репозиторий git.

git clone -b <branch_name> --recursive <remote> <directory>

или

git clone --recurse-submodules

Ответ 10

Вы можете использовать флаг --recursive при клонировании репозитория. Этот параметр заставляет git клонировать все определенные подмодули в хранилище.

git clone --recursive [email protected]:your_repo.git

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

git submodule foreach "git checkout master"

Ответ 11

[Быстрый ответ]

После клонирования родительского репо (в котором содержалось некоторое количество субмодульного репо) выполните следующие действия:

git submodule update --init --recursive

Ответ 12

Параллельная выборка субмодулей направлена ​​на сокращение времени, необходимого для извлечения репозиториев и всех связанных с ним подмодулей, позволяя сразу выбирать несколько репозиториев. Это можно сделать, используя новую опцию --jobs, например:

git fetch --recurse-submodules --jobs=4

Согласно команде Git, это может существенно ускорить обновление репозиториев, содержащих много подмодулей. При использовании -recurse-subodules без новой опции -jobs, Git будет получать подмодули один за другим.

Источник: http://www.infoq.com/news/2016/03/git28-released

Ответ 13

Попробуй это.

git clone -b <branch_name> --recursive <remote> <directory>

Если вы добавили подмодуль в ветку, убедитесь, что вы добавили его в команду clone.

Ответ 14

Если это новый проект, просто вы можете сделать это так:

$ git clone --recurse-submodules https://github.com/chaconinc/YourProjectName 

Если он уже установлен, чем:

$ cd YourProjectName (for the cases you are not at right directory) 
$ git submodule init
$ git submodule update

Ответ 15

У меня была такая же проблема для репозитория GitHub. В моем аккаунте отсутствовал ключ SSH. Процесс

  1. Создать ключ SSH
  2. Добавление нового ключа SSH в вашу учетную запись GitHub

Затем вы можете клонировать репозиторий с субмодулями (git clone --recursive YOUR-GIT-REPO-URL)

или

Запустите git submodule init и git submodule update, чтобы получить подмодули в уже клонированном хранилище.