可能会有浅层子模块吗?我有一个带有几个子模块的 super 项目,每个子模块都有悠久的历史,因此不必要地拖累了所有历史。
我发现的只是this unanswered thread。
我应该hack git-submodule来实现吗?
最佳答案
即将推出的git1.8.4 (July 2013)的新功能:
(并且git 2.10 Q3 2016允许使用git config -f .gitmodules submodule.<name>.shallow true
记录它。
请参阅此答案的结尾)
参见commit 275cd184d52b5b81cb89e4ec33e540fb2ae61c1f:
这意味着这有效:
git submodule add --depth 1 <repo-url> <path>
git config -f .gitmodules submodule.<path>.shallow true
这些命令可以以任何顺序运行。 git submodule
命令执行实际的克隆(这次使用深度1)。并且git config
命令使该选项对于以后将递归克隆存储库的其他人来说是永久的。例如,假设您有 repo
https://github.com/foo/bar
,并且想在 repo 中的https://github.com/lorem/ipsum
处添加path/to/submodule
作为子模块。这些命令可能如下所示:git submodule add --depth 1 [email protected]:lorem/ipsum.git path/to/submodule
git config -f .gitmodules submodule.path/to/submodule.shallow true
以下也会导致相同的结果(相反的顺序):git config -f .gitmodules submodule.path/to/submodule.shallow true
git submodule add --depth 1 [email protected]:lorem/ipsum.git path/to/submodule
下次有人运行git clone --recursive [email protected]:foo/bar.git
时,它将提取https://github.com/foo/bar
的整个历史记录,但只会按预期方式浅化克隆该子模块。和:
--depth
atwyman添加in the comments:
那是真实的。
也就是说,直到git 2.8(2016年3月)。使用2.8,即使可以从远程 repo HEAD之一直接访问SHA1,
submodule update --depth
也有成功的机会。参见commit fb43e31的Stefan Beller (
stefanbeller
)(2016年2月24日)。帮助:Junio C Hamano (
gitster
)。(由Junio C Hamano --
gitster
--在commit 9671a76中 merge ,2016年2月26日)MVG指出in the comments为commit fb43e31(git 2.9,2016年2月)
2016年8月更新(3年后)
使用Git 2.10(2016年第三季度),您将能够
git config -f .gitmodules submodule.<name>.shallow true
有关更多信息,请参见“Git submodule without extra weight”。Git 2.13(2017年第二季度)确实通过commit 8d3047c添加了Sebastian Schuberth (
sschuberth
)(2017年4月19日)。(由Sebastian Schuberth --
sschuberth
--在commit 8d3047c中 merge ,2017年4月20日)但是,Ciro Santilli添加了in the comments(以及详细信息in his answer)
Git 2.20(Q4 2018)改进了子模块支持,当工作树中缺少
HEAD:.gitmodules
文件时,该子模块支持已更新为从blob中的.gitmodules
读取。请参阅commit 2b1257e的commit 76e9bdc,commit b5c259f(2018年10月25日)和commit 23dd8f5,commit b2faad4,commit 2502ffc,commit 996df4d,commit d1b13df,commit 45f5ef3,commit bcbc780和Antonio Ospite (
ao2
)(2018年10月5日)。(由Junio C Hamano --
gitster
--在commit abb4824中 merge ,2018年11月13日)注意:Git 2.24(Q4 2019)修复了克隆浅子模块时可能出现的段错误。
参见commit ddb3c85的Ali Utku Selen (
auselen
)(2019年9月30日)。(由Junio C Hamano --
gitster
--在commit 678a9ca中 merge ,2019年10月9日)Git 2.25(Q1 2020)阐明了
git submodule update
文档。参见commit f0e58b3的Philippe Blain (
phil-blain
)(2019年11月24日)。(由Junio C Hamano --
gitster
--在commit ef61045中 merge ,2019年12月5日)警告:在Git 2.25(2020年第一季度)中,“
git clone --recurse-submodules
”与备用对象存储之间的交互设计不当。参见commit 4f3e57e的commit 10c64a0和Jonathan Tan (
jhowtan
)(2019年12月2日)。(由Junio C Hamano --
gitster
--在commit 5dd1d59中 merge ,2019年12月10日) https://android.googlesource.com/platform/superproject \
master
git clone --recurse-submodules --branch=master -j8 \
https://android.googlesource.com/platform/superproject \
--reference master master2
'<snip>' is shallow
详细说明:
在Git 2.25(2020年第1季度)中,“git clone --recurse-submodules”与备用对象存储之间的交互设计不良。
config submodule documentation现在包括:
关于git - 如何制作浅git子模块?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8520887/