Как распечатать информацию о последнем коммите для каждого файла в репозитории git
У меня есть скрипт, который копирует некоторые файлы из моего git-репозитория на удаленном сервере. Для каждого копируемого файла, если он находится под контролем версий, я хочу сгенерировать строку, например:
Filename: <filename>, commit: <last-commit-hash>, date: <date of last commit>
Идея состоит в том, чтобы сохранить эти строки в файле и скопировать их также на удаленный сервер. Таким образом, я всегда могу узнать, какой файл на сервере принадлежит тому или иному коммиту в моем git-репозитории. Есть ли быстрый способ сделать это?
3 ответа
Я сомневаюсь, насколько это будет полезно, так как вы всегда можете получить информацию из локального репозитория или через 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).
Я поболтал об этом на #git
с несколькими парнями, и один из них (спасибо Микачу) нашел этот скрипт на Perl, у которого был правильный алгоритм, но есть некоторые серьезные недостатки реализации.
Так что я исправил проблемы с этим скриптом, много прибрал, и вот результат (скачать отсюда). Обратите внимание, что в настоящее время требуется Term::ANSIColor
бежать. здесь вы можете увидеть скриншот в действии:
http://adamspiers.org/computing/git-ls-dir.png
Надеюсь, это поможет!
Это быстрее и может быть отсортировано по возрасту:
find <dir> -exec git log -n 1 --pretty="%ai {}" "{}" \; | sort -r