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

jan*_*nce 15 git bash

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

Filename: <filename>, commit: <last-commit-hash>, date: <date of last commit>
Run Code Online (Sandbox Code Playgroud)

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

Cas*_*bel 17

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

git ls-files | while read file; do git log -n 1 --pretty="Filename: $file, commit: %h, date: %ad" -- $file; done
Run Code Online (Sandbox Code Playgroud)

%h给你一个简短的哈希值; 如果你想要完整的,请使用%H.您还可以使用日期格式--date=local|iso|rfc|short(参见git-log联机帮助页).


Ada*_*ers 7

#git与几个人聊了聊这个,其中一个(感谢Mikachu)发现这个Perl脚本有正确的算法,但有一些严重的实现缺陷.

所以我修复了该脚本的问题,整理了很多,这是结果(从这里下载).请注意,它目前需要Term::ANSIColor运行.在这里你可以看到它的截图:

git-ls-dir的屏幕截图运行http://adamspiers.org/computing/git-ls-dir.png

希望有所帮助!