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