我有一个脚本可以从远程服务器上的git存储库中复制一些文件。 对于每个复制的文件,如果它受版本控制,我想生成一行,如:
Filename: <filename>, commit: <last-commit-hash>, date: <date of last commit>
我们的想法是将这些行存储在一个文件中,并将其复制到远程服务器上。这样我总是可以知道服务器上的哪个文件属于我的git存储库中的哪个提交。 有快速的方法吗?
答案 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