Как распечатать информацию о последнем коммите для каждого файла в репозитории 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
Другие вопросы по тегам