Я хотел бы указать последнюю дату фиксации для большого количества файлов в репозитории git.
Ради конкретности предположим, что я хочу получить последние даты фиксации всех файлов *.txt
внутри определенного подкаталога. Всего в репозитории насчитывается десятки тысяч файлов, а количество соответствующих файлов *.txt
находится на стадионе в нескольких сотнях. В репозитории уже есть тысячи коммитов.
Я пробовал три разных подхода.
Решение 1. Этот вопрос дает один ответ на основе git log
. Однако, если я попытаюсь сделать что-то подобное, это очень медленно:
find . -name '*.txt' |
xargs -n1 git log --format=format:%ai -n1 --all -- '{}'
В моем тестовом примере потребовалось несколько минут - слишком медленно для моих целей.
Решение 2. Что-то вроде этого было бы намного быстрее, менее одной секунды:
git log --format=format:%ai --name-only .
Однако тогда мне пришлось бы написать script, который будет обрабатывать выходные данные после обработки. Кроме того, вышеприведенная команда выводит много информации, которая никогда не нужна: нерелевантные файлы и старые коммиты.
Решение 3. Я также пробовал что-то вроде этого, чтобы избавиться от ненужных файлов:
git log --format=format:%ai --name-only `find . -name '*.txt'`
Однако это оказалось более медленным, чем решение 2. (В течение времени работы было различие фактора 3.) Кроме того, он по-прежнему печатает старые коммиты, которые больше не нужны.
Вопрос. Я что-то упустил? Есть ли быстрый и удобный подход? Предпочтительно, что-то, что работает не только сейчас, но и в будущем, когда мы имеем гораздо большее количество коммитов?