使用“--depth”选项浅更新 git 子模块

问题描述 投票:0回答:1

git submodule update
已支持此
answer
中描述的--depth选项。

但我们仍然无法轻易确定深度值,这可能会使 git 无法找到子模块的预期修订版。

是否有浅更新子模块的真正解决方案?

git git-submodules
1个回答
6
投票

所以我认为确切的深度仍然是一个神话,这是唯一必须解决的问题

虽然确实没有“确切深度”,但你仍然可以用 git 2.9.x+ (Q3 2016) 记录一个“深度推荐”。

参见 commit abed000commit 37f52e9(2016 年 5 月 26 日),作者 Stefan Beller (

stefanbeller
)
(由 Junio C Hamano 合并 --
gitster
--
commit 3807098,2016 年 6 月 20 日)

submodule update
:学习
--[no-]recommend-shallow
选项

上游项目可以建议浅克隆它发布的

.gitmodules
文件中的一些子模块。

有时上游项目认为子模块的历史并不重要。
为了让下游用户更容易,在

submodule.<name>.shallow
中允许一个布尔字段'
.gitmodules
',它可以用来推荐上游是否认为历史重要。

默认情况下,该字段在初始克隆中受到尊重,可以通过提供

--no-recommend-shallow
选项来忽略它。

这样,一个简单的

git submodule update
(没有附加参数)将使用推荐的深度值,如果找到的话。

另见“Git submodule without extra weight”:

git config -f .gitmodules submodule.<name>.shallow true

g19fanatic 在评论中提出

quick 1-liner 添加

shallow=true
到所有子模块:

git submodule | awk '{print $2}' | \
  xargs -n 1 -I %% bash -c 'git config -f .gitmodules submodule.%%.shallow true'

或者,与

git submodule foreach

git submodule foreach 'git config -f .gitmodules submodule.$sm_path.shallow true'

但是,akhan 添加了评论

foreach
命令是从子模块执行的,因此不会像这里描述的那样工作(例如尝试
git submodule foreach 'echo $PWD'
)。

但是

xargs
工作得很好。

工作配方:

git submodule | awk '{print $2}' | \
 xargs -n 1 -I %% bash -c 'git config -f .gitmodules submodule.%%.shallow true' 
git submodule update --depth=1
© www.soinside.com 2019 - 2024. All rights reserved.