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