查找文件首次添加到Git存储库的日期/时间

Set*_*son 41 git

是否有一个简单的Git命令来确定存储库中文件的"创建日期",即它首次添加的日期?

如果它甚至可以通过文件重命名/移动来确定它,那将是最好的.我希望它是一个计算机可读的单行输出; 可能是我没有找到正确的git log <fname>选项来做到这一点.

shi*_*ara 53

git log --format=%aD <FILE> | tail -1

使用此命令,您可以关闭此文件的所有日期并提取最后一个

  • 你还需要`--follow`来跟踪日志重命名,如OP所要求的那样.也是在文件名之前添加`--`的好习惯,以防它与选项或引用名称冲突. (9认同)
  • 在这个解决方案中最好使用**reverse**,即`git log --follow --format =%aD --reverse - <fname> | head -1`(所以,你不需要读取Python中的所有行,只需要读取第一行) (5认同)

ruv*_*vim 30

原生解决方案:

git log --diff-filter=A --follow --format=%aD -1 -- <fname> 
Run Code Online (Sandbox Code Playgroud)

它给出了存储库中文件的最后 "创建日期",无论文件重命名/移动如何都可以.

-1是同义词--max-count=1,它限制了输出的提交数量(在我们的例子中不超过一个).

由于可以多次添加文件,因此需要此限制.例如,可以添加,然后删除,然后再添加.在这种情况下,--diff-filter=A将为此文件生成多行.

要在第一行中获得第一个创建日期,我们应该使用--reverse选项而不受限制(因为在订购之前应用了限制).

git log --diff-filter=A --follow --format=%aI --reverse -- <fname> | head -1
Run Code Online (Sandbox Code Playgroud)

%aI以严格的ISO 8601格式(例如2009-06-03T07:08:51-07:00)给出日期.

但由于Git中已知的错误,此命令无法正常工作(请参阅" - 在git maillist中使用--reverse "对话时忽略--follow).因此,我们被迫使用一些工作一段时间来获得第一个创建日期.

git log --diff-filter=A --follow --format=%aI -- <fname> | tail -1
Run Code Online (Sandbox Code Playgroud)