Мне интересно, есть ли способ просмотреть дату push, связанную с каждой фиксацией, в журнале git. Если это невозможно, есть ли способ увидеть все коммиты под определенным толчком.
Я пишу программу, которая должна отслеживать коммиты по мере их отправки. Поскольку журнал git упорядочен по дате фиксации, а не по дате отправки, я не могу увидеть самые последние отправленные коммиты. Например, если пользователь фиксирует фиксацию в своем локальном репозитории за 2 дня до того, как он отправит сообщение в мастер, эта фиксация будет помещена в журнал главного репозитория после 2 дней других фиксаций.
git reflog --date=local origin/master
(примечаниеorigin/
), чтобы увидеть список нажатий. В противном случае в списке были только фиксации, проверки и извлечения (что тоже полезно). Собственно, на это мне указал ответ @JonathanDay .Git - это распределенная система контроля версий, поэтому вы должны четко определить, что вы подразумеваете под «датой отправки». Например, предположим, что пользователь A отправляет некоторые коммиты в репозиторий пользователя B. Некоторое время спустя пользователь B отправляет те же коммиты в третий репозиторий. Какая дата вас интересует?
Я предполагаю, что у вас есть общий репозиторий и вы хотите, чтобы пользователи этого общего репозитория могли определять, когда что-то было опубликовано в репозитории. Если это правда, вам придется собирать эту информацию в общем репозитории.
Плохие новости
К сожалению, нет возможности добавить дату в сообщения фиксации. Это изменит идентификатор фиксации (который является хешем содержимого SHA1), что вызовет всевозможные проблемы.
Хорошие новости
К счастью, в Git есть (относительно новая) функция под названием заметки . Эта функция позволяет прикреплять к коммитам произвольный текст, который
git log
может отображаться. Заметки можно редактировать и делиться ими с другими.Вы можете использовать функцию примечаний, чтобы прикрепить сообщение «эта фиксация была получена [дата]» к каждой фиксации по мере ее получения в общий репозиторий.
Подробнее
git help notes
см.Как записать дату
Вот подход, который я рекомендую:
post-receive
ловушку в вашем общем репозитории, чтобы просматривать каждую новую доступную фиксацию для каждой обновленной ссылки.Для каждой фиксации добавьте что-то вроде «[пользователь] из [repository_url] добавил эту фиксацию в [ref] on [date]» в примечании к фиксации.
Вы можете использовать примечания ref, посвященные этой цели (например
refs/notes/received-on
), вместо значения по умолчаниюrefs/notes/commits
. Это предотвратит конфликты с заметками, созданными для других целей.receive
ловушку, чтобы запретить обновление ссылки на заметки (чтобы пользователи не случайно или намеренно не повредили заметки).Скажите всем пользователям, чтобы они запускали следующие команды из своего рабочего дерева:
Этот шаг необходим, поскольку Git по умолчанию игнорирует ссылки без веток и тегов в вышестоящих репозиториях.
Вышеупомянутое предполагает, что ссылки только расширяются, никогда не удаляются и не обновляются принудительно. Вы, вероятно, захотите, чтобы
post-receive
ловушка также добавляла примечания «удалено [дата]» для обработки этих случаев.источник
Мне кажется, это очень хорошо работает. Дата коммиттера (% cd) вводит в заблуждение, потому что она не обязательно совпадает с датой отправки. Однако опция --date = iso выводит дату push / fetch .
Обратите внимание: если вы получили его из origin / master, он напечатает дату, которую вы его получили; НЕ дата, когда кто-то еще нажал на коммит.
Бонус: вы, конечно, можете сделать более красивое форматирование. Пока мне нравится эта цветовая кодировка. Хотя печатать это немного. Это выведет SHA на красный цвет, селектор reflog - на голубой, а reflog - на зеленый.
источник
Взгляните на
git reflog show master
. Возможно, это не тот формат, который вам нужен, но он должен указать вам правильное направление.Другая идея - запустить сценарий внутри push-хука.
источник
git reflog show master
? Я хочу иметь возможность просматривать дату отправки отдельных коммитов каждого пользователя..git/logs/refs/heads/master
нем отображается временная метка.git reflog
в этом отношении.Этот ответ относительно проверки журнала ссылок на пульте дистанционного управления может помочь ( https://stackoverflow.com/a/8791295/336905 ), предоставив вам информацию о том, какая ветка была отправлена, даже если она не показывает, какие коммиты были отправлены, но вы может взаимно коррелировать, найдя следующий толчок после локальной даты фиксации. Не надежно, но удобно, если вы еще не реализовали отличные заметки от @RichardHansen, опубликованные ранее.
источник
origin/branch
будет отображать только изменения, сделанные на текущей машине, это чрезвычайно полезно! Для повседневного использования я не хочу реализовывать какие-либо хуки, поэтому на простой вопрос «Хммм, когда я подтолкнул эту фиксацию на прошлой неделе?» - отлично работает.Вы также можете посмотреть время изменения файла объектного файла фиксации в каталоге «objects» в репозитории git на самом сервере.
источник
Почему git AuthorDate отличается от CommitDate?
AuthorDate
когда коммит был впервые создан.CommitDate
- это время последнего изменения фиксации (например, перебазирования).Вы можете получить их с параметрами
--pretty
форматирования:Итак, если вы и другие разработчики делаете это
git rebase
раньшеgit push
, у вас будет дата фиксации позже, чем дата автора .Эта команда показывает дату фиксации:
git log --pretty=fuller
источник
Думаю, вы можете использовать следующую нотацию для получения даты отправки: git log -g --date = local
источник