Как распечатать информацию о последнем коммите для каждого файла в репозитории git - PullRequest
15 голосов
/ 03 марта 2011

У меня есть скрипт, который копирует некоторые файлы из моего git-репозитория на удаленном сервере. Для каждого копируемого файла, если он находится под контролем версий, я хочу сгенерировать строку, например:

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

Идея состоит в том, чтобы сохранить эти строки в файле и скопировать их также на удаленный сервер. Таким образом, я всегда могу знать, какой файл на сервере принадлежит тому или иному коммиту в моем git-репозитории. Есть ли быстрый способ сделать это?

Ответы [ 3 ]

17 голосов
/ 03 марта 2011

Я сомневаюсь, насколько это будет полезно, поскольку вы всегда можете получить информацию из локального репозитория или через 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 ).

8 голосов
/ 08 января 2012

Я поговорил об этом на #git с несколькими парнями, и один из них (спасибо Микачу) нашел этот скрипт на Perl , у которого был правильный алгоритм, но были серьезные недостатки реализации.

Итак, я исправил проблемы с этим скриптом, много прибрал, и вот результат (скачать с здесь ). Обратите внимание, что в настоящее время для запуска требуется Term::ANSIColor. здесь вы можете увидеть скриншот в действии:

снимок экрана с прогами git-ls-dir http://adamspiers.org/computing/git-ls-dir.png

Надеюсь, это поможет!

0 голосов
/ 17 февраля 2016

Это быстрее и может быть отсортировано по возрасту:

find <dir> -exec git log -n 1 --pretty="%ai {}" "{}" \; | sort -r
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...