15

我想查看指定目录上所有文件的 git 创建日期(添加它们的第一次提交的日期)。

4

2 回答 2

33

我将把我的解决方案分成几个步骤。

获取存储库中所有文件的列表

$ git ls-files

这将返回存储库中所有文件的相对路径列表。

获取给定文件的第一次提交的 SHA-1:

$ git rev-list HEAD <file> | tail -n 1

这将按时间倒序返回给定文件的所有无父提交的列表。最后一个是给定文件的第一次提交的 SHA-1 哈希。

您可以通过运行来验证这一点git log --raw <hash>。您应该会看到如下内容:

commit <commit_hash>
Author: Susy Q <suzy@example.com>
Date:   Wed Aug 24 12:36:34 2011 -0400

    Add new module 'example.py'

:000000 100644 0000000... <hash>... A  example.py

显示给定提交的日期

$ git show -s --format="%ci" <hash>

将它们放在一个 bash 脚本中:

#!/bin/bash
for file in $(git ls-files)
do
    HASH=$(git rev-list HEAD "$file" | tail -n 1)
    DATE=$(git show -s --format="%ci" $HASH --)
    printf "%-35s %s\n  %s\n" "$file" $HASH: "$DATE"
done
于 2012-06-11T07:14:13.523 回答
3

好吧,我设计了一个不优雅但可行的解决方案:

for file in dir/*; do echo -e "$file: \t\t `git log $file|grep Date|tail -1`"; done

它通过git log在每个文件上运行然后grep对其进行 ing 以仅获取有关该文件的每个提交的日期来工作。然后tail -1确保我只会得到第一次提交的日期。只是为了echo -e "..."以(不太)友好的方式打印信息!

于 2012-06-11T06:58:40.857 回答