Git 子模块推送
如果我修改子模块,我可以将提交推回到子模块原点,还是需要克隆? 如果克隆,我可以将克隆存储在另一个存储库中吗?
If I modify a submodule, can I push the commit back to the submodule origin, or would that require a clone?
If clone, can I store a clone inside another repository?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
子模块只不过是另一个存储库中 git 存储库的克隆,带有一些额外的元数据(gitlink 树条目、.gitmodules 文件)
A submodule is nothing but a clone of a git repo within another repo with some extra meta data (gitlink tree entry, .gitmodules file )
请注意,自 git1.7.11 ([ANNOUNCE] Git 1.7.11.rc1 和发行说明,2012 年 6 月)提到:
可能是在此补丁 和
--on-demand
选项:因此,您可以使用(来自父存储库)一次性推送所有内容:
此选项仅适用于一层嵌套。对另一个子模块内部的子模块的更改不会被推送。
使用 git 2.7(2016 年 1 月),一个简单的 git Push 就足以推送父存储库...及其所有子模块。
请参阅提交 d34141c、提交 f5c7cd9 (2015 年 12 月 3 日),提交 f5c7cd9(2015 年 12 月 3 日),以及提交 b33a15b(11 月 17 日) 2015),作者:Mike Crowe (
mikecrowe
)。(由 Junio C Hamano --
gitster
-- 合并于 提交 5d35d72,2015 年 12 月 21 日)git config
文档现在包括:所以:
Git 2.12(2017 年第一季度)
git push --dry-run --recurse-submodules=on-demand
实际上可以工作。请参阅 提交 0301c82、提交 1aa7365(2016 年 11 月 17 日),作者:Brandon Williams (
mbrandonw
)。(由 Junio C Hamano --
gitster
-- 合并于 提交 12cf113,2016 年 12 月 16 日)仍然在 Git 2.12 中,您现在有一个“
--recurse-submodules=only
”选项可以在不推送顶级超级项目的情况下推送子模块。请参阅提交225e8bf,提交 6c656c3, 提交 14c01bd(2016 年 12 月 19 日)作者:Brandon Williams (
mbrandonw
)。(由 Junio C Hamano --
gitster
-- 合并于 提交 792e22e,2017 年 1 月 31 日)使用 Git 2.36(2022 年第 2 季度),“
git fetch --仅协商
< /a>"(man ) 是git 推送
(man) 来找出我们历史的哪一部分在另一边缺失了。即使设置了
fetch.recursesubmodules
配置变量,它也不应该递归到子模块,也不应该触发“gc
”。代码已经被收紧,以确保它只进行共同祖先发现,而不进行其他操作。
请参阅提交 386c076、提交 135a12b, 提交 bec587d(2022 年 1 月 18 日)作者:Glen Choo (
chooglen
)。请参阅 commit de4eaae(2022 年 1 月 20 日),作者:Junio C Hamano (
gitster
)。(由 Junio C Hamano --
gitster
-- 合并于 提交 472a219,2022 年 2 月 9 日)fetch-options
现在包含在其 手册页:在 Git 2.39(2022 年第 4 季度)中,使用“
--recurse-submodules=on-demand
”递归推送所有子模块。请参阅 提交 e62f779(2022 年 11 月 14 日),作者:乔纳森·谭 (
jhowtan
)。(由 Junio C Hamano --
gitster
-- 合并于 提交 173fc54,2022 年 11 月 23 日)警告消息:
git config
现在包含在其 手册页:git Push
现在包含在其Note that since git1.7.11 ([ANNOUNCE] Git 1.7.11.rc1 and release note, June 2012) mentions:
Probably done after this patch and the
--on-demand
option:So you could push everything in one go with (from the parent repo) a:
This option only works for one level of nesting. Changes to the submodule inside of another submodule will not be pushed.
With git 2.7 (January 2016), a simple git push will be enough to push the parent repo... and all its submodules.
See commit d34141c, commit f5c7cd9 (03 Dec 2015), commit f5c7cd9 (03 Dec 2015), and commit b33a15b (17 Nov 2015) by Mike Crowe (
mikecrowe
).(Merged by Junio C Hamano --
gitster
-- in commit 5d35d72, 21 Dec 2015)The
git config
doc now include:So:
Git 2.12 (Q1 2017)
git push --dry-run --recurse-submodules=on-demand
will actually work.See commit 0301c82, commit 1aa7365 (17 Nov 2016) by Brandon Williams (
mbrandonw
).(Merged by Junio C Hamano --
gitster
-- in commit 12cf113, 16 Dec 2016)And still in Git 2.12, you now havea "
--recurse-submodules=only
" option to push submodules out without pushing the top-level superproject.See commit 225e8bf, commit 6c656c3, commit 14c01bd (19 Dec 2016) by Brandon Williams (
mbrandonw
).(Merged by Junio C Hamano --
gitster
-- in commit 792e22e, 31 Jan 2017)With Git 2.36 (Q2 2022), "
git fetch --negotiate-only
"(man) is an internal command used bygit push
(man) to figure out which part of our history is missing from the other side.It should never recurse into submodules even when
fetch.recursesubmodules
configuration variable is set, nor it should trigger "gc
".The code has been tightened up to ensure it only does common ancestry discovery and nothing else.
See commit 386c076, commit 135a12b, commit bec587d (18 Jan 2022) by Glen Choo (
chooglen
).See commit de4eaae (20 Jan 2022) by Junio C Hamano (
gitster
).(Merged by Junio C Hamano --
gitster
-- in commit 472a219, 09 Feb 2022)fetch-options
now includes in its man page:With Git 2.39 (Q4 2022), push all submodules recursively with '
--recurse-submodules=on-demand
'.See commit e62f779 (14 Nov 2022) by Jonathan Tan (
jhowtan
).(Merged by Junio C Hamano --
gitster
-- in commit 173fc54, 23 Nov 2022)Warning message:
git config
now includes in its man page:git push
now includes in its man page:可以使用git的foreach命令
bash 命令示例:
You can use the foreach command of git
example of bash command: