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
ловушку, чтобы запретить обновление ссылки на заметки (чтобы пользователи не случайно или намеренно не повредили заметки).
Скажите всем пользователям, чтобы они запускали следующие команды из своего рабочего дерева:
# Fetch all notes from the shared repository.
# Assumes the shared repository remote is named 'origin'.
git config --add remote.origin.fetch '+refs/notes/*:refs/remote-notes/origin/*'
# Show all notes from the shared repository when running 'git log'
git config --add notes.displayRef 'refs/remote-notes/origin/*'
Этот шаг необходим, поскольку Git по умолчанию игнорирует ссылки без веток и тегов в вышестоящих репозиториях.
Вышеупомянутое предполагает, что ссылки только расширяются, никогда не удаляются и не обновляются принудительно. Вы, вероятно, захотите, чтобы post-receive
ловушка также добавляла примечания «удалено [дата]» для обработки этих случаев.
git reflog --date=local origin/master
(примечаниеorigin/
), чтобы увидеть список нажатий. В противном случае в списке были только фиксации, проверки и извлечения (что тоже полезно). Собственно, на это мне указал ответ @JonathanDay .