Saya ingin tahu apakah ada cara untuk melihat tanggal push yang terkait dengan setiap komit di log git. Jika itu tidak memungkinkan, apakah ada cara untuk melihat semua komit di bawah dorongan tertentu.
Saya menulis sebuah program yang perlu melacak komitmen saat mereka didorong. Karena git log diurutkan berdasarkan tanggal komit, bukan tanggal push, saya tidak dapat melihat komit terbaru yang didorong. Misalnya, jika pengguna melakukan komit ke repositori lokalnya 2 hari sebelum dia mendorong ke master, komit itu akan ditempatkan di belakang 2 hari dari komit lain di log repositori master.
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 .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:
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 defaultrefs/notes/commits
. Ini akan mencegah konflik dengan catatan yang dibuat untuk tujuan lain.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:
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.sumber
Ini tampaknya bekerja cukup baik untuk saya. Tanggal pelaku (% cd) menyesatkan karena belum tentu sama dengan tanggal push. Opsi --date = iso, bagaimanapun akan menampilkan tanggal push / fetch .
Catatan, jika Anda mengambil dari origin / master, itu akan mencetak tanggal Anda mengambilnya; BUKAN tanggal orang lain mendorong komit.
Bonus: Anda tentu saja dapat melakukan pemformatan yang lebih cantik. Sejauh ini, saya suka kode warna ini. Agak banyak untuk mengetik. Ini akan mengeluarkan SHA menjadi merah, reflog selector menjadi cyan, dan reflog menjadi hijau.
sumber
Coba lihat
git reflog show master
. Mungkin bukan format yang Anda inginkan, tetapi harus mengarahkan Anda ke arah yang benar.Ide lainnya adalah menjalankan skrip di dalam push hook.
sumber
git reflog show master
? Saya ingin dapat melihat tanggal push dari setiap komitmen individu pengguna..git/logs/refs/heads/master
dalamnya menunjukkan stempel waktu.git reflog
masalah itu.Jawaban mengenai pemeriksaan reflog di remote ini dapat membantu ( https://stackoverflow.com/a/8791295/336905 ) dengan memberi Anda informasi tentang cabang mana yang didorong meskipun tidak menunjukkan komitmen mana yang didorong, tetapi Anda bisa berkorelasi silang dengan mencari dorongan berikutnya setelah tanggal komit lokal. Bukan bukti yang bodoh, tetapi berguna jika Anda belum menerapkan saran catatan luar biasa dari @RichardHansen yang diposting sebelumnya
sumber
origin/branch
hanya akan menampilkan perubahan yang dibuat pada mesin saat ini, ini sangat berguna! Untuk penggunaan sehari-hari saya tidak ingin menerapkan pengait apa pun, jadi untuk pertanyaan sederhana "Hmmm, ketika saya mendorong commit itu minggu lalu?" - itu bekerja dengan baik.Anda juga dapat melihat waktu modifikasi file dari file objek komit di direktori "objek" di repositori git di server itu sendiri.
sumber
Mengapa git AuthorDate berbeda dengan CommitDate?
AuthorDate
adalah saat komit pertama kali dibuat.CommitDate
adalah saat komit terakhir diubah (mis. rebase).Anda bisa mendapatkannya dengan
--pretty
opsi pemformatan:Jadi, jika Anda dan pengembang lain melakukannya
git rebase
sebelumnyagit push
, Anda akan mendapatkan tanggal komit yang lebih lama dari tanggal pembuat .Perintah ini menunjukkan tanggal komit:
git log --pretty=fuller
sumber
Saya kira Anda dapat menggunakan notasi berikutnya untuk mendapatkan tanggal push: git log -g --date = local
sumber