подмодуль git foreach не работает - PullRequest
3 голосов
/ 08 января 2012

Я хочу выяснить, почему команда git submodule foreach не работает для меня. Я клонировал git-репозиторий, в котором есть несколько подмодулей. Я хотел инициализировать и обновить все подмодули одновременно, чтобы раскрыть исходники подмодулей. Но что бы я ни делал, подмодуль git foreach у меня не работает ... Я пробовал несколько вещей:

git submodule foreach init
git submodule foreach update
git submodule foreach update --init
git submodule foreach --recursive git submodule update --init

Каждая команда будет выполняться, но без какого-либо вывода ... Если я пойду и инициализирую / обновлю каждый модуль отдельно (без использования foreach), тогда никаких проблем.

Есть идеи?

Ответы [ 3 ]

6 голосов
/ 08 января 2012

git submodule init или git submodule update должны работать для всех подмодулей, зарегистрированных в .gitmodules, поэтому не имеет смысла их выполнять для каждого подмодуля.

Если бы у вас были подмодули в подмодулях, git submodule update --recursive рекурсивно позаботился бы о всех подмодулях.

3 голосов
/ 09 января 2012

После клона все, что вам обычно нужно сделать, это:

git submodule update --init --recursive

После того, как это сделано изначально, вы отбрасываете опцию --init.

Опция init является частьюкоманда, которая копирует URL-адрес, указанный в файле .gitmodules, в конфигурацию репо подмодуля.Возможно, вы не захотите делать это, если вы используете определенный пульт дистанционного управления по вашему выбору, и проект переместился на тот, который вы не хотите использовать.Типичный случай, когда вы предпочитаете использовать свой форк проекта на GitHub, а репо верхнего уровня указывает на основной.

2 голосов
/ 09 декабря 2012

Вы должны запустить:

git submodule init
git submodule update

-

Вам нужен файл .gitmodules в корне вашего дерева, он выглядит следующим образом.

[submodule "LiveReload/Compilers"]
        path = LiveReload/Compilers
        url = git://github.com/livereload/livereload-plugins.git
[submodule "Shared/libs/fsmonitor"]
        path = Shared/libs/fsmonitor
        url = git://github.com/andreyvit/fsmonitor.c.git
[submodule "js"]
        path = js
        url = git://github.com/livereload/livereload-js.git

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

Nicks-MacBook:LiveReload2 admin$ git submodule init
Submodule 'LiveReload/Compilers' (git://github.com/livereload/livereload-plugins.git) registered for path 'LiveReload/Compilers'
Submodule 'Shared/libs/fsmonitor' (git://github.com/andreyvit/fsmonitor.c.git) registered for path 'Shared/libs/fsmonitor'
Submodule 'js' (git://github.com/livereload/livereload-js.git) registered for path 'js'
Nicks-MacBook:LiveReload2 admin$ git submodule update
Cloning into 'LiveReload/Compilers'...
remote: Counting objects: 7571, done.
remote: Compressing objects: 100% (5446/5446), done.
remote: Total 7571 (delta 2326), reused 6733 (delta 1488)
Receiving objects: 100% (7571/7571), 7.80 MiB | 2.73 MiB/s, done.
Resolving deltas: 100% (2326/2326), done.
Submodule path 'LiveReload/Compilers': checked out 'd770710edc2362caf4ed9adf303da1edc9e6e494'
Cloning into 'Shared/libs/fsmonitor'...
remote: Counting objects: 132, done.
remote: Compressing objects: 100% (79/79), done.
remote: Total 132 (delta 73), reused 112 (delta 53)
Receiving objects: 100% (132/132), 23.29 KiB, done.
Resolving deltas: 100% (73/73), done.
Submodule path 'Shared/libs/fsmonitor': checked out '1290027aea3a8e3f7fe06e3c228a16240c0fc17f'
Cloning into 'js'...
remote: Counting objects: 745, done.
remote: Compressing objects: 100% (413/413), done.
remote: Total 745 (delta 301), reused 703 (delta 259)
Receiving objects: 100% (745/745), 864.22 KiB | 820 KiB/s, done.
Resolving deltas: 100% (301/301), done.
Submodule path 'js': checked out '6aa86b01479c3aad785e9623f39cfcde2b8615f
...