Я знаю, как получить дату последнего изменения одного файла в репозитории git:
git log -1 --format="%ad" -- path/to/file
Есть ли простой и эффективный способ сделать то же самое для всех файлов, присутствующих в настоящее время в хранилище?
Простой ответ - перебирать каждый файл и отображать время его модификации, а именно:
git ls-tree -r --name-only HEAD | while read filename; do
echo "$(git log -1 --format="%ad" -- $filename) $filename"
done
Это даст результат примерно так:
Fri Dec 23 19:01:01 2011 +0000 Config
Fri Dec 23 19:01:01 2011 +0000 Makefile
Очевидно, что вы можете контролировать это, так как это всего лишь сценарий bash на данный момент - так что не стесняйтесь настраивать по своему вкусу!
git ls-tree -r --name-only HEAD | while read filename; do echo "$(git log -1 --format="%ai" -- $filename) $filename"; done | sort
Этот подход также работает с именами файлов, которые содержат пробелы:
Пример вывода:
Вывод можно отсортировать по метке времени модификации, добавив
| sort
в конец:источник
Это небольшой трюк с ответом Эндрю М. (Я не смог прокомментировать его ответ.)
Оберните первое $ filename в двойные кавычки , чтобы поддерживать имена файлов со встроенными пробелами.
Образец вывода:
Я ценю, что решение Эндрю (основанное на ls-tree ) работает с голыми репозиториями! (Это не относится к решениям, использующим ls-файлы.)
источник
Вот версия ответа Эндрю М для раковин рыб для тех, кто использует рыбу.
Я храню это как функцию рыбы для легкого доступа.
источник
Для тех из нас, кто использует Windows и PowerShell, ответ Эндрю М, с машиночитаемой настройкой:
Пример вывода:
источник