我想以编程方式列出某个版本中每个文件的名称和上次修改时间. 每个文件运行git logas suggested here是非常慢的. 有没有更快的方法来实现这一点?

在我的机器上运行下面的脚本在一个不平凡的repo(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进行后处理,并寻找你感兴趣的名字的第一次出现.所有的版本:

 git log --name-status --pretty=%ci | awk -F$'\t' '
         NF==1 { stamp=$0; next }
         !seen[$2]++ { print stamp,$0 }
' | sort -t$'\t' -k2,2

和往常一样,品尝季节.你是不是在旋转Rust ?我在SDL默认结帐时使用便宜的ssd,它需要0.548s,所以快了一百倍以上.但是,它在历史上的行走次数减少了1500倍,所以就有了这个.

Python相关问答推荐

如何使用Google Gemini API为单个提示生成多个响应?

我必须将Sigmoid函数与r2值的两种类型的数据集(每种6个数据集)进行匹配,然后绘制匹配函数的求导.我会犯错

使用mySQL的SQlalchemy过滤重叠时间段

即使在可见的情况下也不相互作用

比较2 PD.数组的令人惊讶的结果

将tdqm与cx.Oracle查询集成

如何使用scipy的curve_fit与约束,其中拟合的曲线总是在观测值之下?

启动带有参数的Python NTFS会导致文件路径混乱

使用Python从rotowire中抓取MLB每日阵容

Maya Python脚本将纹理应用于所有对象,而不是选定对象

LocaleError:模块keras._' tf_keras. keras没有属性__internal_'''

Python—转换日期:价目表到新行

如何将相同组的值添加到嵌套的Pandas Maprame的倒数第二个索引级别

按条件添加小计列

在我融化极点数据帧之后,我如何在不添加索引的情况下将其旋转回其原始形式?

将数字数组添加到Pandas DataFrame的单元格依赖于初始化

如何获取给定列中包含特定值的行号?

极点:在固定点扩展窗口

更新包含整数范围的列表中的第一个元素

对列中的数字进行迭代,得到n次重复开始的第一个行号