Как заставить git показывать коммиты в указанном диапазоне дат для даты автора?
видимо этой:
git log --all --after="<date> 00:00" --before="<date> 23:59" --author="<author>"
фильтры фиксируют на основе дата коммиттер. Как я могу показать коммиты для указанного диапазона дат автора ?
3 ответов
вы не можете-по крайней мере, не только в Git. (Напоминание другим, посещающим этот вопрос: это не о просмотр дата автора, речь идет о опции совершает автор дата, а-ля --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
. Но это в лучшем случае болезненно. См.Тим Ответ Beigeleisen с использованием awk дополнительные.
может быть, я что-то упускаю, но разве этого не достаточно?
git log --pretty=format:"%ad - %an: %s" --after="2016-01-31" --until="2017-03-10" --author="John Doe"
см. также здесь
вы можете.
но, как упоминал @torek, вы, возможно, не сможете сделать это с чистым Git. Одним из вариантов было бы передать некоторый довольно формат вывода из git log
на awk
, и проверьте дату автора там:
git log --date=iso --pretty=format:'%ad%x08%aN' | awk ' >= "2013-01-01" && <= "2013-12-01"'
здесь %ad
дает автору дату в формате ISO, и %aN
дает имя автора.