首页 > 解决方案 > 检索包含每个文件的简短提交消息的列表

问题描述

我尝试使用提交短消息(上次更改时的提交)、日期和作者姓名来检索我的存储库中每个文件的列表。它应该看起来像在 github 上:

githublist的快照

我已经试过了

for file in */*; do    
    echo $f $(git log --pretty=format:"%an %s" -- $f)
done

我的存储库的运行时间约为 20 秒。那是减速的方式。该存储库仅包含大约 500 个文件。它也必须适用于 16k 文件的存储库。因此,我只是尝试:

git log --pretty=format:"%an %s" -- */*

这将打印 repo 中的每个提交,经过时间约为 0.5 秒。性能很好,但我找不到在提交中打印更改文件的方法。

我已经阅读了有关格式的信息,但找不到有用的东西。

想法?

我在我的系统上使用 git 2.14。

标签: bashgitshell

解决方案


添加原始标志还将显示与每个提交关联的文件。然后,您可以将输出通过管道传输到 awk 以仅列出文件名而不是文件名以及文件模式等

git log --raw --pretty=format:"%an %s" | awk '!/^:/ {print $0 } /^:/ { print $6 }'

要获取与每个文件关联的提交消息,请使用:

git log --raw --pretty=format:"%an %s %f" | awk '!/^:/ {mess=$0 } /^:/ { fils[$6]=mess } END { for ( i in fils ) { print i" - "fils[i]} }'

在这里,我们使用 awk 将提交消息放入由文件名索引的数组中。


推荐阅读