我非常喜欢这个获取带子模块的代码库的命令:
git clone git@github.com:my_user/my_repo.git --recursive
然而,当子模块到达时,它们都被设置为“无分支”,我必须手动在每个子模块上检出主分支。是否有一种递归拉取子模块并自动将分支设置为主分支的方法?
我非常喜欢这个获取带子模块的代码库的命令:
git clone git@github.com:my_user/my_repo.git --recursive
然而,当子模块到达时,它们都被设置为“无分支”,我必须手动在每个子模块上检出主分支。是否有一种递归拉取子模块并自动将分支设置为主分支的方法?
克隆包含子模块的存储库后,使用以下命令可一次检出所有子模块的主分支:
git submodule foreach --recursive git checkout master
git submodule update --init --recursive
初始化所有子模块以及所有嵌套的子模块。不确定是否会检出主分支。
git submodule foreach --recursive git checkout master
命令可以检出每个子模块的主分支。 - randomness2077问题是为什么要checkout主分支。你的子模块被固定到一个特定的sha,这也是为什么子模块克隆会被固定到那个特定提交的原因。如果不指向一个特定的sha,外部仓库很容易破坏你的构建。这绝对不是你想要的。最好有意识地进行更新。构建应该是可重复的,并且尽可能稳定。
如已回答
git submodule foreach --recursive git checkout master
能够在主分支master上工作。
但如果这是一个不在所有子模块中都存在的分支,可以使用
git submodule foreach --recursive "git checkout branchname || true"
否则,如果第一个仓库没有指定的分支,命令将失败。git submodule foreach --recursive "git checkout master || git checkout main"
。谢谢疯狂觉醒的人们。 - ili
[alias]
,以便获得更多收益! - Ray Foss