Как "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. Процесс
- Создать ключ SSH
- Добавление нового ключа SSH в вашу учетную запись GitHub
Затем вы можете клонировать репозиторий с субмодулями (git clone --recursive YOUR-GIT-REPO-URL
)
или
Запустите git submodule init
и git submodule update
, чтобы получить подмодули в уже клонированном хранилище.