如何仅获取Git子模块指定日期后的历史,shallow-since与depth能否转换
问题1:实现拉取SUBMODULE_2 2021-01-01之后的提交历史
你使用的Git 2.33.1版本完全支持子模块的--shallow-since参数,有两种可行方案:
- 方案1:直接在update命令中指定参数
直接执行以下命令即可:
git submodule update --init --shallow-since=2021-01-01 SUBMODULE_2
如果上述命令不生效,可以通过--将参数透传给底层的git clone逻辑:
git submodule update --init SUBMODULE_2 -- --shallow-since=2021-01-01
- 方案2:先配置子模块拉取规则再执行更新
如果需要长期对该子模块生效该规则,可以先配置再拉取:
# 初始化子模块配置 git submodule init SUBMODULE_2 # 配置该子模块的拉取规则 git config submodule.SUBMODULE_2.fetchOpts --shallow-since=2021-01-01 # 执行更新拉取 git submodule update SUBMODULE_2
问题2:--shallow-since和--depth的等效转换关系
两者没有固定的等效转换方式,本质逻辑完全不同:
--depth是按提交数量截断,从当前拉取的分支HEAD往回数N个提交,只保留这N个提交的历史--shallow-since是按日期截断,只保留指定日期之后产生的所有提交历史
指定日期之后的提交数量完全取决于对应仓库的开发频率,不同仓库、同一仓库的不同分支、不同时间点的数值都不一样。
如果需要临时获得近似的depth数值,可以在完整拉取该子模块后执行以下命令统计提交数,统计结果仅对当前分支当前时间点有效:
git rev-list --count HEAD --since="2021-01-01"
内容的提问来源于stack exchange,提问作者theCuriousOne
相关产品推荐
相关产品推荐

