Git子模块推送
如果我修改一个子模块,我可以将提交推回到子模块的起源,还是需要一个克隆? 如果克隆,我可以在另一个存储库中存储一个克隆?
一个子模块只不过是在一个额外的元数据(gitlink树入口,.gitmodules文件)另一个回购的git回购的克隆,
$ 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"
请注意,由于git1.7.11( [ANNOUNCE] Git 1.7.11.rc1和发行说明 ,2012年6月)提到:
学会了“
git push --recurse-submodules
”,以便有select地查看绑定到超级项目的子模块的历史logging并将其推出。
可能在这个补丁和--on-demand
选项之后完成:
recurse-submodules=<check|on-demand>::
确保所推送的版本使用的所有子模块提交在远程跟踪分支上可用。
- 如果使用检查,将检查所有在要修订的版本中更改的子模块提交在远程可用。
否则,推送将被中止并以非零状态退出。- 如果
on-demand
,则会推送修订中要更改的所有子模块。
如果按需不能推动所有必要的修改,它也将被中止并以非零状态退出。
所以你可以把所有东西都放在一起(从母公司回购)a:
git push --recurse-submodules=on-demand
该选项仅适用于一个嵌套级别。 其他子模块内子模块的更改将不会被推送。
使用git 2.7(2016年1月),一个简单的git push将足以推动父代回购…及其所有子模块。
请参阅提交d34141c , 提交f5c7cd9 (2015年12月3日), 提交f5c7cd9 (2015年12月3日),并提交b33a15b (2015年11月17日) Mike Crowe( mikecrowe
) 。
(由Junio C gitster
合并- gitster
-于2015年12月21日提交5d35d72 )
push
:添加recurseSubmodules
configuration选项
--recurse-submodules
命令行参数已经存在了一段时间,但是它没有等价的configuration文件。按照
git fetch
的相应参数的样式,我们来创buildpush.recurseSubmodules
来为这个参数提供默认值。
这也需要添加--recurse-submodules=no
,以便在需要时在命令行上覆盖configuration。实现这个最直接的方法似乎是以类似的方式在
submodule-config
中push
使用代码。
git config
doc现在包括 :
push.recurseSubmodules
:确保远程跟踪分支上提供了要推送的版本所使用的所有子模块提交。
- 如果这个值是'
check
',那么Git会validation所有在被修改版本中被改变的子模块提交在子模块的至less一个远端是可用的。 如果有任何提交丢失,推送将被中止并以非零状态退出。- 如果该值是“
on-demand
”,那么在推送中修改的所有子模块将被推送。 如果按需不能推动所有必要的修改,它也将被中止并以非零状态退出。 –- 如果该值为“
no
”,则在保持推送时忽略子模块的默认行为。您可以在推送时通过指定'
--recurse-submodules=check|on-demand|no
'来覆盖此configuration。
所以:
git config push.recurseSubmodules on-demand git push
Git 2.12(2017年第1季度)
git push --dry-run --recurse-submodules=on-demand
将会实际工作。
见布兰登·威廉姆斯(布兰登·威廉姆斯)( mbrandonw
)的 提交0301c82 , 提交1aa7365 (2016年11月17日) 。
(由Junio C gitster
合并- gitster
-在12cf113 ,2016年12月16日提交 )
push run with --dry-run
实际上并没有(push run with --dry-run
2016年12月11日和更低/之前)执行干运行时,configuration推推子模块按需。
相反,所有需要推送的子模块实际上被推送到他们的遥控器,而超级项目的任何更新都是以空运行的方式执行的。
这是一个错误,而不是干运行的预期行为。当configuration为按需recursion
--dry-run
模块时,教导push
尊重--dry-run
选项。
这是通过将--dry-run
标志传递给执行干运行的子模块的subprocess来完成的。
仍然在Git 2.12,你现在有一个“ --recurse-submodules=only
”选项来推子模块而不用推顶级超级项目 。
见布兰登·威廉姆斯(布兰登·威廉姆斯)( mbrandonw
)的 提交225e8bf , 提交6c656c3 , 提交14c01bd (2016年12月19日) 。
(由Junio C gitster
合并- gitster
– 承诺 2017年1月31日第792e22e )