Git - это распределенная система контроля версий, поэтому вы должны тщательно определить, что вы подразумеваете под «датой отправки». Например, предположим, что пользователь A отправляет некоторые коммиты в репозиторий пользователя B. Через некоторое время пользователь B отправляет те же самые коммиты в третий репозиторий. Какая дата вас интересует?
Я предполагаю, что у вас есть общий репозиторий и вы хотите, чтобы пользователи этого общего репозитория могли определять, когда что-то было опубликовано в репозитории. Если это правда, вам придется собирать эту информацию в общем хранилище.
Плохие новости
К сожалению, нет способа добавить дату в сообщения коммита. Это изменит идентификатор фиксации (который является хешем содержимого SHA1), что вызовет всевозможные проблемы.
Хорошие новости
К счастью, в Git есть (относительно новая) функция, называемая notes . Эта функция позволяет вам прикрепить произвольный текст к коммитам, который может отображать git log
. Заметки могут быть отредактированы и предоставлены другим пользователям.
Вы можете использовать функцию заметок, чтобы прикрепить сообщение «этот коммит был получен [дата]» к каждому коммиту, когда он получен общим репозиторием.
Подробнее см. git help notes
.
Как записать дату
Вот подход, который я рекомендую:
- Измените хук
post-receive
в вашем общем репозитории, чтобы обходить каждый вновь доступный коммит для каждой обновленной ссылки.
Для каждого коммита добавьте что-то вроде "[пользователь] из [repository_url] добавил этот коммит в [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
также добавлял примечания «удалено на [дату]» для обработки этих случаев.