Я хотел бы указать дату последней фиксации для большого количества файлов в репозиторий 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 .
Однако тогда мне пришлось бы написать сценарий, который пост-обрабатывает вывод. Более того, приведенная выше команда выводит много информации, которая никогда не нужна: нерелевантные файлы и старые коммиты.
Решение 3. Я также пробовал что-то вроде этого, чтобы избавиться от ненужных файлов:
git log --format=format:%ai --name-only `find . -name '*.txt'`
Однако это оказалось медленнее , чем решение 2. (Там было разница в 3 раза во времени выполнения.) Более того, он по-прежнему печатает старые коммиты, которые больше не нужны.
Вопрос. Я что-то упустил? Есть быстрый и удобный подход? Желательно то, что работает не только сейчас, но и в будущем, когда у нас будет гораздо большее количество коммитов?