我想以编程方式列出某个版本中每个文件的名称和最后修改时间。 对每个文件运行
git log
,按照此处的建议 非常慢。
有没有更快的方法来完成这个?
在一个不平凡的存储库 (SDL) 上运行下面的脚本在我的机器上需要 59 秒。
#!/usr/bin/env python
import datetime
import subprocess
import time
commit = "HEAD"
start = time.time()
file_names = subprocess.check_output(["git", "ls-tree", "--name-only", "-r", commit], text=True).strip().split("\n")
print(f"[{time.time() - start:.4f}] git ls-tree finished")
file_times = list(datetime.datetime.fromisoformat(subprocess.check_output(["git", "log", "-1", "--pretty=format:%cI", commit, "--", name], text=True).strip()) for name in file_names)
print(f"[{time.time() - start:.4f}] git info finished")
git log --name-status --pretty=%ci | awk -F$'\t' '
NF==1 { stamp=$0; next }
!seen[$2]++ { print stamp,$0 }
' | sort -t$'\t' -k2,2
一如既往地调味。您是否正在旋转生锈?我使用便宜的 SSD 在 SDL 默认结账上执行此操作,需要 0.548 秒,因此快了一百倍以上。