获取 git 修订版中每个文件的最后修改时间的最有效方法是什么?

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

我想以编程方式列出某个版本中每个文件的名称和最后修改时间。 对每个文件运行

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")
python git time
1个回答
0
投票
 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 秒,因此快了一百倍以上。

© www.soinside.com 2019 - 2024. All rights reserved.