如何打印git存储库中每个文件的最后提交信息

时间:2011-03-03 15:59:55

标签: git bash

我有一个脚本可以从远程服务器上的git存储库中复制一些文件。 对于每个复制的文件,如果它受版本控制,我想生成一行,如:

Filename: <filename>, commit: <last-commit-hash>, date: <date of last commit>

我们的想法是将这些行存储在一个文件中,并将其复制到远程服务器上。这样我总是可以知道服务器上的哪个文件属于我的git存储库中的哪个提交。 有快速的方法吗?

3 个答案:

答案 0 :(得分:17)

我怀疑这会有多大用处,因为你总是可以从本地存储库或gitweb获取信息,但是你在这里:

git ls-files | while read file; do git log -n 1 --pretty="Filename: $file, commit: %h, date: %ad" -- $file; done

%h为您提供缩写哈希值;如果你想要完整的,请使用%H。您还可以使用--date=local|iso|rfc|short来调整日期格式(请参阅git-log manpage)。

答案 1 :(得分:8)

我在#git和几个人聊了聊这个,其中一个(感谢Mikachu)发现this Perl script有正确的算法,但有一些严重的实施缺陷。

所以我修复了该脚本的问题,整理了很多,并here is the result(从here下载)。请注意,它目前需要Term::ANSIColor才能运行。在这里你可以看到它的截图:

screenshot of git-ls-dir runs http://adamspiers.org/computing/git-ls-dir.png

希望有所帮助!

答案 2 :(得分:0)

这个更快,可以按年龄排序:

find <dir> -exec git log -n 1 --pretty="%ai {}" "{}" \; | sort -r