git submodule foreach不起作用

5

我想弄清楚为什么 git submodule foreach 命令对我不起作用。我克隆了一个包含多个子模块的 git 仓库。我希望一次性地初始化和更新所有子模块以获取子模块源代码。但无论我尝试什么,git submodule foreach 都对我没用...... 我尝试了几种方法:

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

每个命令都会执行,但没有任何输出... 如果我单独初始化/更新每个模块(而不使用foreach循环),那么就没有问题。
有什么想法吗?
3个回答

7

git submodule initgit submodule update应该适用于在.gitmodules中注册的所有子模块,因此没有必要为每个子模块执行它们。

如果您有嵌套的子模块,则git submodule update --recursive将递归处理所有子模块。


好的,这肯定有效...那么什么时候适合使用foreach命令? - Primoz Rome
@PrimozRome:对于你想在每个子模块上使用的任何命令,可以像这个外部脚本示例中一样执行:https://dev59.com/CVbUa4cB1Zd3GeqPCdvc - VonC

4

克隆后,通常只需要执行以下操作:

git submodule update --init --recursive

完成初始操作后,您可以删除“--init”选项。

“init”选项是命令的一部分,它将.gitmodules文件中指定的url复制到子模块存储库配置中。如果您使用特定的远程选择并且项目已经转移到您不想使用的远程,则可能不希望执行此操作。这种情况的典型案例是,您更愿意在GitHub上使用自己的项目分支,而顶级存储库指向主要存储库。


2

你需要运行:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接