You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅克隆Git子目录并获取该子目录的最后提交时间

当你用--depth=1做浅克隆时,Git只会拉取仓库最新的整仓提交,但目标子目录的最后修改可能发生在更早的提交里,这就导致git log -1 -- cdf返回的是整仓最新提交,而非子目录的真实最后修改记录。以下是两种解决方法:

方法一:克隆时直接获取子目录的完整相关历史

不用--depth=1限制提交深度,结合稀疏 checkout 和轻量过滤,既能只关注目标子目录,又能获取其完整修改历史(且克隆体积极小):

# 初始化稀疏克隆,仅拉取提交记录和树结构(不下载文件内容)
git clone --filter=blob:none --sparse https://github.com/starlink/starjava.git
cd starjava
# 将目标子目录加入稀疏 checkout 范围
git sparse-checkout add cdf
# 检出子目录文件
git checkout
# 查询子目录的最新提交
git log -1 -- cdf

方法二:修复已有的浅克隆仓库

如果已经用--depth=1完成克隆,可以通过扩展提交深度来获取子目录的历史:

cd starjava
# 拉取足够多的历史提交(此处设为1000,可根据实际调整,确保覆盖子目录的最后修改提交)
git fetch origin master --depth=1000
# 再次查询子目录的最新提交
git log -1 -- cdf

若不确定需要的深度,也可以直接将浅克隆转为完整克隆:

git fetch --unshallow
git log -1 -- cdf

原理说明

--depth=1会截断Git的历史,仅保留最新的一次整仓提交。而子目录的修改记录可能存在于更早的提交中,取消深度限制或扩展深度后,Git就能访问到这些历史提交,从而返回正确的子目录最新修改记录。

内容的提问来源于stack exchange,提问作者olebole

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 09:53:12