可能会有浅层子模块吗?我有一个带有几个子模块的 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 fb43e31Stefan Beller ( stefanbeller )(2016年2月24日)。
帮助:Junio C Hamano ( gitster )
(由Junio C Hamano -- gitster --commit 9671a76中 merge ,2016年2月26日)




MVG指出in the commentscommit 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 2b1257ecommit 76e9bdccommit b5c259f(2018年10月25日)和commit 23dd8f5commit b2faad4commit 2502ffccommit 996df4dcommit d1b13dfcommit 45f5ef3commit bcbc780Antonio Ospite ( ao2 )(2018年10月5日)。
(由Junio C Hamano -- gitster --commit abb4824中 merge ,2018年11月13日)








注意:Git 2.24(Q4 2019)修复了克隆浅子模块时可能出现的段错误。
参见commit ddb3c85Ali 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 f0e58b3Philippe 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 4f3e57ecommit 10c64a0Jonathan 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/

10-14 16:04