把所有内容都存放在Git中,包括所有子模块?

时间:2015-04-10 09:15:00

标签: git git-submodules

当项目包含子模块时,您需要分别存储/取消暂存所有子模块。有没有办法用较少的动作来做到这一点?

此链接可能有用:

Easy way pull latest of all submodules

关于"拉"命令,但有一些方法如何在所有子模块之间进行迭代。

2 个答案:

答案 0 :(得分:14)

您可以使用foreach在每个子模块上运行特定的git命令。例如,要将'git stash'应用于每个模块,请使用:

git submodule foreach 'git stash'

同样,以下命令将检出master分支,然后从每个子模块的远程源中提取任何更新。

git submodule foreach 'git checkout master; git pull'

阅读详情:http://git-scm.com/book/en/v2/Git-Tools-Submodules

答案 1 :(得分:0)

警告:在Git .24(2019年第四季度)之前,使用“ git submodule foreach git stash”可能会丢失对子模块的本地更改

请参见commit 556895dJakob Jarmar (jarmar)(2019年10月12日)。
(由Junio C Hamano -- gitster --commit bb52def中合并,2019年10月18日)

  

stash:避免在子模块上进行递归硬重置

     

签名人:Jakob Jarmar

     

git stash推送不会递归地隐藏子模块,但是如果设置了submodule.recurse,它可能会递归地 reset --hard

     

仅具有破坏性动作的递归可能是令人惊讶的行为,并且不太可能是可取的,因此最简单的解决方法应该是确保对git reset --hard的调用永远不会递归到子模块中。

     

这与忽略子模块的check_changes_tracked_files,的行为相匹配。