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

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

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

然而,子模块到达时都设置为“不分支”,我必须手动对每一个主模块进行结账。 有没有办法recursion拉子模块,并自动将分支设置为主?

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

 git submodule foreach --recursive git checkout master 

怎么样:

 git submodule update --init --recursive 

初始化子模块内的所有子模块和子模块。 不知道这是否会签出主。

问题是为什么你结帐主。 你的子模块固定在一个特定的sha – 这也是为什么子模块克隆被固定到特定的提交。 通过不指向具体的沙,外部回购很容易破坏你的构build。 绝对不是你想要的。 更好地自我更新。 构build应该是可重复的,尽可能的修复。

也许你应该考虑使用gitslave作为git-submodule的替代方法,这取决于你的开发stream程可能会更好(或更糟)。 具体到你的问题,gitslave保持超级项目的所有成员在同一分支(没有特定的git(而不是gitslave)命令做,否则许多命令警告你,当你在不同的分支)。

当你在超级项目的同时控制和开发子项目时, Gitslave是有用的,此外,当你通常想要同时标记,分支,推,拉等所有的仓库时。

git-submodule更好,当你不控制子项目,或者更具体地说,即使在子项目改变时,也希望在特定的修订版本中修复子项目。