Git, dağıtılmış bir sürüm kontrol sistemidir, bu nedenle "itme tarihi" ile ne demek istediğinizi dikkatlice tanımlamanız gerekir. Örneğin, A kullanıcısının bazı commit'leri B kullanıcısının havuzuna gönderdiğini varsayalım. Bir süre sonra, B kullanıcısı aynı işlemleri üçüncü bir depoya gönderir. Hangi tarihle ilgileniyorsun?
Paylaşılan bir deponuz olduğunu ve bu paylaşılan deponun kullanıcılarının depoda ne zaman bir şey yayınlandığını belirleyebilmelerini istediğinizi tahmin ediyorum. Bu doğruysa, bu bilgileri paylaşılan depoda toplamanız gerekir.
Kötü haber
Maalesef, commit mesajlarına tarih eklemenin bir yolu yok. Bu, kayıt kimliğini (içeriğin SHA1 karması olan) değiştirerek her türlü soruna neden olur.
Güzel haberler
Neyse ki Git, notlar adı verilen (nispeten yeni) bir özelliğe sahiptir . Bu özellik, görüntüleyebilen kayıtlara rastgele metin eklemenizi sağlar git log
. Notlar düzenlenebilir ve başkalarıyla paylaşılabilir.
Paylaşılan havuz tarafından alındığı için her işleme bir "bu işlem [tarih] tarihinde alındı" mesajı eklemek için notlar özelliğini kullanabilirsiniz.
Ayrıntılar git help notes
için bakın.
Tarih nasıl kaydedilir
İşte tavsiye ettiğim yaklaşım:
post-receive
Güncellenen her referans için her yeni erişilebilir kaydı yürütmek için paylaşılan deponuzdaki kancayı değiştirin .
Her kayıt için, kaydetme notuna "[repository_url] 'nin [kullanıcısı] bu kaydı [ref]' e [tarih] tarihinde ekledi" gibi bir şey ekleyin.
refs/notes/received-on
Varsayılan yerine bu amaca (gibi ) adanmış bir not ref kullanmak isteyebilirsiniz refs/notes/commits
. Bu, başka amaçlar için oluşturulan notlarla çakışmaları önleyecektir.
receive
Not referansınızdaki güncellemeleri reddetmek için kancanızı değiştirin (kullanıcıların yanlışlıkla veya kasıtlı olarak notlarla uğraşmasını önlemek için).
Tüm kullanıcılara aşağıdaki komutları çalışma ağaçlarının içinden çalıştırmalarını söyleyin:
# 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/*'
Bu adım gereklidir çünkü Git varsayılan olarak yukarı akış havuzlarındaki dallanmamış, etiket olmayan referansları yok sayar.
Yukarıdakiler referansların yalnızca gelişmiş olduğunu, asla silinmediğini veya zorunlu olarak güncellenmediğini varsayar. Muhtemelen post-receive
bu durumları ele almak için kancanın "[tarih] tarihinde kaldırıldı" notlarını da eklemesini isteyeceksiniz .
git reflog --date=local origin/master
(notorigin/
) yapmam gerektiğini eklemek isterim . Aksi takdirde, listede yalnızca taahhütler, ödünç alma işlemleri ve çekmeler vardı (bu da yararlıdır). Aslında, @ JonathanDay'in cevabı bana işaret etti .