Git:如何列出版本控制下的所有文件及其作者日期?

标签 git

给定一个 git 存储库,我需要为每个版本控制文件的最后修改日期生成一个字典,作为映射到其文件路径的 unix 时间戳。就 git 而言,我需要最后修改日期 - 而不是文件系统。

为了做到这一点,我想让 git 输出版本控制下所有文件的列表以及每个文件的作者日期。如果 git ls-filesgit 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/

相关文章:

git - 在提交之前保存修改的日志

git - 使用 "git checkout"时修改后的文件会发生什么?

git - 本地 Git 存储库中的 Zeppelin Notebook 存储

node.js - heroku git 存储库的 URL 是什么?

git merge 相当于 git rebase --onto

git - merge 两个分支而不实际 merge

git - 使用过滤器分支删除 Git LFS? (无法将未更改的文件重新添加到索引。)

git - 如何在交互式 git rebase 中选择提交消息

git - 重命名 Bitbucket git 存储库如何影响 fork 的存储库?

GitHub推送失败,RPC失败; curl 55 SSL_write()返回SYSCALL,errno = 32