如何快速获取Git指定文件集中最新提交文件的时间戳?
高效获取Git指定文件集的最新提交时间戳
你的核心问题是多次启动git log进程导致的开销——之前的命令要启动261次git log,每次进程启动都有额外消耗,这是耗时30秒的关键。下面是能把耗时压缩到1-2秒内的解决方案:
优化命令
git ls-files -z -- . ':!:*.md' ':!:*.bin' | xargs -0 git log --reverse --format=%ct --name-only -- | awk ' /^[0-9]+$/ { current_ct = $0; next } { file = $0; latest_ct[file] = current_ct } END { max_ct = 0; max_file = "" for (file in latest_ct) { if (latest_ct[file] > max_ct) { max_ct = latest_ct[file] max_file = file } } print max_ct, max_file } '
为什么这更快?
- 单次Git调用:取消了
xargs -n1,一次性把所有筛选后的文件传给git log,只启动1次Git进程,彻底消除了多次进程启动的开销。 - 高效输出处理:
--reverse让提交按时间从旧到新输出,这样每个文件最后一次出现的时间戳就是它的最新提交时间,无需额外排序。- 用
awk直接处理git log的输出,不需要paste等额外工具,逻辑简洁且处理速度快。
扩展:查看所有文件的最新提交时间
如果需要验证每个文件的最新时间,可修改awk部分,输出所有文件及其时间戳:
git ls-files -z -- . ':!:*.md' ':!:*.bin' | xargs -0 git log --reverse --format=%ct --name-only -- | awk ' /^[0-9]+$/ { current_ct = $0; next } { latest_ct[$0] = current_ct } END { for (file in latest_ct) print latest_ct[file], file } '
内容的提问来源于stack exchange,提问作者sdbbs
相关产品推荐
相关产品推荐

