man*_*lds 121
子模块只不过是另一个repo中的git repo的克隆,带有一些额外的元数据(gitlink tree entry,.gitmodules文件)
$ cd your_submodule
$ git checkout master
<hack,edit>
$ git commit -a -m "commit in submodule"
$ git push
$ cd ..
$ git add your_submodule
$ git commit -m "Updated submodule"
Run Code Online (Sandbox Code Playgroud)
Von*_*onC 103
请注意,由于git1.7.11([ANNOUNCE] Git 1.7.11.rc1和发行说明,2012年6月)提到:
"
git push --recurse-submodules"学会了选择性地查看与超级项目绑定的子模块的历史并推出它们.
可能在此补丁和--on-demand选项之后完成:
recurse-submodules=<check|on-demand>::
Run Code Online (Sandbox Code Playgroud)
确保要推送的修订使用的所有子模块提交都可在远程跟踪分支上使用.
- 如果
check使用,将检查在推送的修订中更改的所有子模块提交在远程上是否可用.
否则推送将被中止并以非零状态退出.- 如果
on-demand使用,则将推送要推送的修订中更改的所有子模块.
如果按需无法推送所有必要的修订,它也将被中止并退出非零状态.
因此,您可以一次性推送所有内容(来自父代仓库)a:
git push --recurse-submodules=on-demand
Run Code Online (Sandbox Code Playgroud)
此选项仅适用于一个嵌套级别.不会推送对另一个子模块内部子模块的更改.
使用git 2.7(2016年1月),一个简单的git push就足以推送父repo ...及其所有子模块.
请参阅提交d34141c,提交f5c7cd9(2015年12月3日),提交f5c7cd9(2015年12月3日),并提交b33a15b(2015年11月17日)作者:Mike Crowe(mikecrowe).
(由Junio C gitsterHamano合并- -在2015年12月21日的提交5d35d72中)
push:添加recurseSubmodules配置选项该
--recurse-submodules命令行参数已存在一段时间,但它没有配置文件等同.按照相应参数的样式
git fetch,让我们发明push.recurseSubmodules为这个参数提供一个默认值.
这还需要添加--recurse-submodules=no以允许在需要时在命令行上覆盖配置.实现这一点最直接的方法似乎 是以类似的方式
push使用代码.submodule-configfetch
push.recurseSubmodules:确保要推送的修订使用的所有子模块提交都可在远程跟踪分支上使用.
- 如果值为'
check',则Git将验证在子模块的至少一个远程处可用的所有要推送的修订中更改的子模块提交.如果缺少任何提交,则推送将中止并以非零状态退出.- 如果值为'
on-demand',那么将推送在要推送的修订版中更改的所有子模块.如果按需无法推送所有必要的修订,它也将被中止并退出非零状态.-- 如果值为'
no',则保留推送时忽略子模块的默认行为.您可以通过指定'
--recurse-submodules=check|on-demand|no' 来在推送时覆盖此配置.
所以:
git config push.recurseSubmodules on-demand
git push
Run Code Online (Sandbox Code Playgroud)
Git 2.12(2017年第1季度)
git push --dry-run --recurse-submodules=on-demand 实际上会有效.
请参阅Brandon Williams()提交0301c82,提交1aa7365(2016年11月17日).(由Junio C Hamano合并- -在提交12cf113,2016年12月16日)mbrandonw
gitster
push run with --dry-run当push配置为按需推送子模块时,实际上并没有(Git 2.11 Dec. 2016和lower/before)执行干运行.
相反,所有需要推送的子模块实际上都被推送到他们的遥控器,而超级项目的任何更新都是作为干运行执行的.
这是一个错误,而不是干跑的预期行为.在配置为递归推送子模块"按需"时教导
push尊重该--dry-run选项.
这是通过将--dry-run标志传递给子进程来完成的,子进程在执行干运行时执行子模块的推送.
仍然在Git 2.12中,你现在有了一个" --recurse-submodules=only"选项来推送子模块而不需要推送顶级超级项目.
请参阅Brandon Williams()提交225e8bf,提交6c656c3,提交14c01bd(2016年12月19日).(由Junio C Hamano合并- -在提交792e22e,2017年1月31日)mbrandonw
gitster