我如何在一行中的所有子模块上git clone --recursive和checkout master?

时间:2011-06-24 23:47:57

标签: git git-submodules

我真的很喜欢这个命令来获取子模块的回购:

git clone git@github.com:my_user/my_repo.git --recursive

但是,子模块到达时都设置为“无分支”,我必须在每个子模块上手动检出主模块。有没有办法递归拉取子模块并自动将分支设置为主?

4 个答案:

答案 0 :(得分:61)

在克隆包含子模块的存储库之后,以下命令将一次性检出所有这些的主分支:

git submodule foreach --recursive git checkout master

答案 1 :(得分:54)

怎么样:

git submodule update --init --recursive

初始化子模块内的所有子模块和子模块。不知道这是否会结账大师。

答案 2 :(得分:24)

问题是为什么你结帐主人。您的子模块固定到特定的sha - 这也是子模块克隆固定到该特定提交的原因。通过不指向特定的sha,外部仓库很容易破坏你的构建。绝对不是你想要的。更有意识地更新。构建应该是可重现的并且尽可能地修复。

答案 3 :(得分:6)

也许您应该将gitslave视为git-submodule的替代方案,这取决于您的开发工作流程,它可能更好(或更糟)。特别针对您的问题,gitslave将超级项目的所有成员保留在同一分支上(缺少特定的git(而不是gitslave)命令,否则当您在不同的分支上时,许多命令会发出警告)。

Gitslave在您控制和开发子项目时非常有用,与超级项目同时进行控制和开发,此外,当您通常希望同时标记,分支,推送,拉取等所有存储库时时间。

当您不控制子项目或更具体地希望在子项目更改时将子项目修复为特定修订时,git-submodule会更好。