Быстро перечислить даты последней фиксации для большого количества файлов

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


Вопрос. Я что-то упустил? Есть быстрый и удобный подход? Желательно то, что работает не только сейчас, но и в будущем, когда у нас будет гораздо большее количество коммитов?

17
задан Community 23 May 2017 в 10:33
поделиться