Как распечатать последнюю информацию о фиксации для каждого файла в репозитории git
У меня есть script, который копирует некоторые файлы из репозитория git на удаленном сервере.
Для каждого файла, который скопирован, если он находится под управлением версией, я хочу сгенерировать строку, например:
Filename: <filename>, commit: <last-commit-hash>, date: <date of last commit>
Идея состоит в том, чтобы хранить эти строки в файле и копировать его также на удаленном сервере. Таким образом, я всегда могу узнать, какой файл на сервере принадлежит коммиту в моем репозитории git.
Есть ли быстрый способ сделать это?
Ответы
Ответ 1
Я сомневаюсь в том, насколько это полезно, поскольку вы всегда можете получить информацию из локального репозитория или через 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).
Ответ 2
Я поговорил об этом на #git
с несколькими парнями, и один из них (спасибо Микачу) нашел этот Perl-скрипт, у которого был правильный алгоритм, но были серьезные недостатки реализации.
Поэтому я исправил проблемы с этим сценарием, много прибрал, и вот результат (скачать с здесь). Обратите внимание, что в настоящее время для запуска требуется Term::ANSIColor
. здесь вы можете увидеть скриншот в действии:
(источник: adamspiers.org)
Надеюсь, это поможет!
Ответ 3
Это быстрее и может быть отсортировано по возрасту:
find <dir> -exec git log -n 1 --pretty="%ai {}" "{}" \; | sort -r
Ответ 4
На основе ответа @Cascabel:
git ls-files | while read file; do git log -n 1 --pretty="$file %h %ar %s" -- $file; done | column -t -s ' '
Пример вывода:
so_cv_moment.py f6988e4 11 months ago Miscellaneous changes
so_cyclic_sequence_reset.py 0f2ddc6 10 months ago Added more SO answers
so_distinct_sequence.py fc7365d 6 months ago Speed up attempt (fail)
so_fft_gaussian.py 0fb7605 7 months ago Stack Overflow answer: FFT gaussian
so_flat_dict.py 6b25e5d 12 months ago Moved into py directory
so_flatten_list_perftools.py 7e4bfc8 5 months ago Performance tests for list flatten
so_iterator_cycle.py 3530018 5 months ago asyncio; stackoverflow iterator