给定一个 git 存储库,我需要为每个版本控制文件的最后修改日期生成一个字典,作为映射到其文件路径的 unix 时间戳。就 git 而言,我需要最后修改日期 - 而不是文件系统。
为了做到这一点,我想让 git 输出版本控制下所有文件的列表以及每个文件的作者日期。如果 git ls-files
或 git ls-tree -r master
的输出每行都包含时间戳,那么它们的输出将是完美的。
有没有办法从 git 获取这个输出?
更新更多上下文:我有一个当前的实现,它由一个 python 脚本组成,该脚本遍历源代码控制下的每个文件,并对每个文件执行 git log
,但我发现这不能很好地扩展。存储库中的文件越多,我必须进行的 git log
调用就越多。因此,这让我开始寻找一种方法,通过更少的调用(最好只有 1 次)从 git 收集这些信息。
最佳答案
a list of all files under version control along with each file's author date
缩放不是这个问题:
#!/bin/sh
temp="${TMPDIR:-/tmp}/@@@commit-at@@@$$"
trap "rm '$temp'" 0 1 2 3 15
git log --pretty=format:"%H%x09%at" --topo-order --reverse "$@" >"$temp"
cut -f1 "$temp" \
| git diff-tree -r --root --name-status --stdin \
| awk '
BEGIN {FS="\t"; OFS="\t"}
FNR==1{++f}
f==1 {at[$1]=$2; next}
NF==1 {commit=$1; next}
$1=="D"{$1=""; delete last[$0]; next} # comment to also show deleted files
{did=$1;$1=""; last[$0]=at[commit]"\t"did}
END {for (f in last) print last[f]f}
' "$temp" - \
| sort -t"`printf '\t'`" -k3
关于Git:如何列出版本控制下的所有文件及其作者日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19166483/