Git adalah sistem kontrol versi terdistribusi, jadi Anda harus menentukan dengan cermat apa yang Anda maksud dengan "tanggal dorong". Misalnya, pengguna A mendorong beberapa komitmen ke repositori pengguna B. Beberapa poin kemudian, pengguna B mendorong komit yang sama ke repositori ketiga. Tanggal berapa Anda tertarik?
Saya berspekulasi bahwa Anda memiliki repositori bersama dan ingin pengguna dari repositori bersama itu dapat menentukan kapan sesuatu diterbitkan ke repositori. Jika itu benar, Anda harus mengumpulkan informasi itu di repositori bersama.
Kabar buruknya
Sayangnya, tidak ada cara untuk menambahkan tanggal ke pesan komit. Itu akan mengubah ID komit (yang merupakan hash SHA1 dari konten), menyebabkan segala macam masalah.
Berita bagus
Untungnya, Git memiliki fitur (yang relatif baru) yang disebut catatan . Fitur ini memungkinkan Anda melampirkan teks arbitrer ke komit, yang git log
dapat ditampilkan. Catatan dapat diedit dan dibagikan dengan orang lain.
Anda bisa menggunakan fitur catatan untuk melampirkan pesan "komit ini diterima pada [tanggal]" ke setiap komit saat diterima oleh repositori bersama.
Lihat git help notes
untuk detailnya.
Bagaimana cara merekam tanggal
Inilah pendekatan yang saya rekomendasikan:
- Ubah
post-receive
hook pada repositori bersama Anda untuk menjalankan setiap komit yang baru dijangkau untuk setiap referensi yang diperbarui.
Untuk setiap komit, tambahkan sesuatu seperti "[pengguna] dari [repository_url] menambahkan komit ini ke [ref] pada [tanggal]" ke catatan komit.
Anda mungkin ingin menggunakan catatan ref yang didedikasikan untuk tujuan ini (seperti refs/notes/received-on
) daripada default refs/notes/commits
. Ini akan mencegah konflik dengan catatan yang dibuat untuk tujuan lain.
- Ubah
receive
hook Anda untuk menolak pembaruan pada referensi catatan Anda (untuk mencegah pengguna secara tidak sengaja atau sengaja mengotak-atik catatan).
Beri tahu semua pengguna untuk menjalankan perintah berikut dari dalam pohon kerja mereka:
# 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/*'
Langkah ini diperlukan karena Git mengabaikan referensi non-cabang, non-tag di repositori upstream secara default.
Di atas mengasumsikan bahwa referensi hanya tingkat lanjut, tidak pernah dihapus atau diperbarui secara paksa. Anda mungkin ingin agar post-receive
hook juga menambahkan catatan "dihapus pada [tanggal]" untuk menangani kasus ini.
git reflog --date=local origin/master
(catatanorigin/
) untuk melihat daftar dorongan. Jika tidak, hanya komit, pembayaran, dan penarikan yang ada dalam daftar (yang juga berguna). Sebenarnya, saya diarahkan oleh jawaban @ JonathanDay .