Как получить git, чтобы показывать фиксации в указанном диапазоне дат для даты автора?

По-видимому this:

git log --all --after="<date> 00:00" --before="<date> 23:59" --author="<author>"
Фильтры

фиксируются на основе даты коммиттера. Как я могу заставить его показывать фиксации для заданного диапазона дат автора?

Ответы

Ответ 1

Вы не можете, по крайней мере, не в Git. (Напоминание другим, кто посещает этот вопрос: это не просмотр даты автора, он о выборе фиксации по дате автора, a la --since/--after и --until/--before. Эти селекторы используют дату коммиттера, а не дату автора. Рассмотрим в качестве крайнего примера фиксацию, сделанную "сейчас", так что дата ее коммиттера находится в 2000-х годах, но в предыдущее время в поле даты-автора дана некоторая дата в 1999 году. Если ваш диапазон выбора "любой" время в начале века "вы отмените эту фиксацию, так как дата ее коммиттера" сейчас ", более десятилетия после 1999 года.)

Я считаю небольшую ошибку в Git: вы должны иметь возможность запросить, чтобы она использовала поле даты автора, где бы вы ни запрашивали, чтобы оно использовало поле даты коммиттера. Это легко с форматированием журнала, так как мы имеем %ad и %cd и т.п., Но невозможны с выбором фиксации. Самое близкое к тому, что git rev-list может сортировать по дате авторизации (в общей топо-сортировке).

Глобальный переключатель в git rev-list, например --use-author-date, будет работать как простой патч и не будет слишком сложно добавить к Git, но я думаю, что было бы лучше иметь --min-author-age и --max-author-age или аналогичный, и флаг "сортировать по дате автора" (независимо от общего флага --topo-order, так что установка обоих флагов имеет тот же эффект, что и --author-date-order).

В качестве обходного пути вы можете перечислить все потенциально интересные коммиты (с помощью git rev-list или эквивалента, например git log: использовать любой способ, который делает коммандер потенциально интересным, за исключением фильтров даты: в этом случае только --all) и извлеките все свои поля даты автора (с помощью git log --format=%at или что-то еще), затем выполните свою собственную обрезку списка идентификаторов фиксации, затем повторно отправьте оставшиеся идентификаторы фиксации на git log --no-walk. Но в лучшем случае это больно. См. Тим Бейгелейсен, используя awk для более подробной информации.

Ответ 2

Может, мне что-то не хватает, но этого было бы недостаточно?

git log --pretty=format:"%ad - %an: %s" --after="2016-01-31" --until="2017-03-10" --author="John Doe"

См. также здесь

Ответ 3

Вы можете.

Но, как сказал @torek, вы не сможете сделать это с помощью чистого Git. Один из вариантов заключается в том, чтобы вывести какой-то симпатичный формат с git log в awk и проверить там дату автора:

git log --date=iso --pretty=format:'%ad%x08%aN' | awk '$0 >= "2013-01-01" && $0 <= "2013-12-01"'

Здесь %ad дает дату автора в формате ISO, а %aN - имя автора.