Ders 07 / 15
Tarihçeyi Okuma
Günlük çıktısının biçimlendirilmesi; yol, içerik, yazar ve zamana göre süzme; aralık gösterimi ve işleme çizgesinin doğrudan okunması.
İçindekiler
Tarihçe beş işlemeye ulaştı. git log --oneline bu beş satırı listelemeye yetiyor; ancak
tarihçe büyüdükçe soru değişir. “Son beş işleme neydi” yerine “bu dosyaya kim dokundu”, “bu
satır ne zaman eklendi”, “iki sürüm arasında ne oldu” sorulur. Bu ders o soruları yanıtlayan
süzme ve biçimlendirme araçlarını ele alır.
Varsayılan Biçim
git log -1
commit 60e13bdaf4dd2f895e9b562c4a8ee9ea289d2af7 Author: Deniz Kaya <[email protected]> Date: Tue Mar 5 14:20:00 2024 +0300 Aramayı büyük/küçük harften bağımsız yap Terimler listede küçük harfle tutuluyor. Kullanıcı "Yığıt" yazdığında arama boş dönüyor, terim listede olduğu hâlde bulunamıyordu. grep çağrısına -i seçeneği eklendi; bu seçenek POSIX'te tanımlıdır ve ek bağımlılık getirmez.
Varsayılan biçim kimliği tam uzunlukta, yazarı ve tarihi ayrı satırlarda, mesajın tamamını
girintili verir. -1 seçeneği çıktıyı tek işlemeyle sınırlar; -n ile herhangi bir sayı
verilebilir.
Çıktıda görünen kimlik, tarih ve yazar alanları depoya özeldir. Aynı komutları kendi deponuzda çalıştırdığınızda kimlikler ve tarihler farklı olacaktır; sabit olan çıktının yapısıdır.
Özet Biçimler
git log --oneline
60e13bd Aramayı büyük/küçük harften bağımsız yap 43370ca Üç veri yapısı terimi ekle 3132c78 Biçim örneğindeki yazımı düzelt 546c174 Terim arama betiği ekle 13d31bf Terim listesini ve biçim belgesini ekle
Kısaltılmış kimlik, kimliğin benzersizliği korunacak kadar uzun tutulur; depo büyüdükçe uzunluk artabilir. Kısa kimlik, komutlarda tam kimliğin yerine kullanılabilir.
--graph seçeneği tarihçenin çizge yapısını sol kenarda çizer:
git log --oneline --graph
* 60e13bd Aramayı büyük/küçük harften bağımsız yap * 43370ca Üç veri yapısı terimi ekle * 3132c78 Biçim örneğindeki yazımı düzelt * 546c174 Terim arama betiği ekle * 13d31bf Terim listesini ve biçim belgesini ekle
Bu tarihçede dallanma bulunmadığından çizim tek sütundur. Dallanma varsa sütunlar çoğalır ve birleşme noktaları görünür hâle gelir; Dallanma ve İşbirliği kursunda bu çıktı okunacaktır.
Biçimlendirme Dizgileri
Çıktının alanları tek tek seçilebilir:
git log --pretty=format:'%h %ad %s' --date=short
60e13bd 2024-03-05 Aramayı büyük/küçük harften bağımsız yap 43370ca 2024-03-05 Üç veri yapısı terimi ekle 3132c78 2024-03-04 Biçim örneğindeki yazımı düzelt 546c174 2024-03-04 Terim arama betiği ekle 13d31bf 2024-03-04 Terim listesini ve biçim belgesini ekle
Sık kullanılan alanlar:
| Dizge | Karşılığı |
|---|---|
%H / %h |
İşleme kimliği / kısaltılmışı |
%T |
Ağaç nesnesinin kimliği |
%P |
Öncül işlemelerin kimlikleri |
%an / %ae |
Yazarın adı / e-postası |
%ad / %cd |
Yazar tarihi / işleyen tarihi |
%s / %b |
Konu satırı / gövde |
--date seçeneği tarih biçimini belirler: short yalnızca günü, iso tam zaman damgasını
ve saat dilimini verir.
Değişiklik İstatistiği
git log --oneline --stat
60e13bd Aramayı büyük/küçük harften bağımsız yap ara.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 43370ca Üç veri yapısı terimi ekle terimler.txt | 3 +++ 1 file changed, 3 insertions(+) 3132c78 Biçim örneğindeki yazımı düzelt README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 546c174 Terim arama betiği ekle ara.sh | 9 +++++++++ 1 file changed, 9 insertions(+) 13d31bf Terim listesini ve biçim belgesini ekle README.md | 9 +++++++++ terimler.txt | 3 +++ 2 files changed, 12 insertions(+)
Her işlemenin altında dokunduğu dosyalar ve eklenen/silinen satır sayıları listelenir. Bir
işlemenin --stat çıktısı uzunsa, o işleme büyük olasılıkla birden çok işi birleştirmiştir:
istatistik, atomik işleme alışkanlığının denetim aracıdır.
Yol Süzmesi
Belirli bir dosyaya dokunan işlemeler:
git log --oneline -- ara.sh
60e13bd Aramayı büyük/küçük harften bağımsız yap 546c174 Terim arama betiği ekle
İki tireden oluşan ayırıcı, kendisinden sonrasının yol olduğunu bildirir. Ayırıcı olmazsa
ara.sh bir başvuru adı olarak yorumlanmaya çalışılır; aynı adı taşıyan bir dal ve bir dosya
bulunduğunda komut belirsizleşir. Ayırıcıyı her zaman yazmak bu belirsizliği ortadan kaldırır.
İçerik Süzmesi
Bir metnin tarihçeye ne zaman girdiğini ya da ne zaman çıktığını bulmak için:
git log --oneline -S 'grep -i'
60e13bd Aramayı büyük/küçük harften bağımsız yap
-S seçeneği, verilen dizginin geçiş sayısını değiştiren işlemeleri bulur. Yani dizgiyi
içeren işlemeleri değil, dizgiyi ekleyen ya da silen işlemeleri döndürür. Bir davranışın
kaynağını ararken en dolaysız araçtır: aranan şey satırın kendisi değil, satırın doğduğu andır.
Yazar ve Zaman Süzmesi
git log --oneline --since="2024-03-05 00:00"
60e13bd Aramayı büyük/küçük harften bağımsız yap 43370ca Üç veri yapısı terimi ekle
--since verilen andan sonrasını, --until öncesini seçer. Tarihe saat de eklendiğinde sınır
kesinleşir; yalnızca gün verilen kısa yazımlar farklı yorumlanabilir.
Katkı dağılımı için ayrı bir komut vardır:
git shortlog -sn HEAD
5 Deniz Kaya
-s yalnızca sayıyı, -n sayıya göre azalan sıralamayı ister. Komut bir başvuru verilmediğinde
girdisini standart girdiden okur; bu nedenle betiklerde HEAD açıkça yazılmalıdır.
Aralık Gösterimi
İki nokta, bir işleme kümesini tanımlar. A..B, “B’den erişilebilen ama A’dan erişilemeyen
işlemeler” anlamına gelir:
git log --oneline HEAD~2..HEAD
60e13bd Aramayı büyük/küçük harften bağımsız yap 43370ca Üç veri yapısı terimi ekle
HEAD~2 gösterimi “iki öncül geriye” demektir. Tanım çizge üzerinden verilmiştir: erişilebilirlik,
öncül kenarları izleyerek gidilebilen düğümler kümesidir. Bu nedenle aralık gösterimi
dallanmış tarihçelerde de anlamlıdır; iki dalın ayrıştığı noktadan sonrasını sormak aynı
gösterimle yapılır.
Tek Bir İşlemeyi Görmek
git show --stat 43370ca
commit 43370ca23c4b30992ea9857c6282416de8e0a816 Author: Deniz Kaya <[email protected]> Date: Tue Mar 5 09:05:00 2024 +0300 Üç veri yapısı terimi ekle Ağaç, karma tablosu ve bağlı liste terimleri listede yoktu; bu terimler sorulduğunda arama betiği boş çıktı veriyordu. Karşılıklar Veri Yapıları kursunun sözlüğüyle aynı biçimde yazıldı. terimler.txt | 3 +++ 1 file changed, 3 insertions(+)
git show bir nesneyi türüne uygun biçimde gösterir: işleme için üstveri ve fark, ağaç için
girdi listesi, blob için ham içerik.
Çizgeyi Doğrudan Okumak
Biçimlendirme dizgileri, tarihçenin çizge yapısını çıplak hâlde vermeye de yarar:
git log --format='%h %T %P'
60e13bd d23f16ee3533d05e3afd189a11551b6ec89f0898 43370ca23c4b30992ea9857c6282416de8e0a816 43370ca 8074917cfe2b0200648feaeeaf612170157dcc95 3132c7841e3e63c5eb968e37b301aa64dd1e8fb0 3132c78 01426328c4d751777bad684a17c7bc7941589603 546c174a007fdea08f907bd4d428cc87ce7e6148 546c174 21f7408f587a9837da6ae2ba960c74b756c79858 13d31bf17fdc8a5292b7fff288de94088d5c1440 13d31bf 378e434005c6c42021d4398a15e89149b0fd8671
Her satır bir düğümü, üçüncü sütun o düğümün kenarını verir. Son satırda üçüncü sütun boştur: kök işlemenin öncülü yoktur. Birinci sütundaki değerler ikinci satırdan itibaren üçüncü sütunda yeniden görünür; liste, çizgenin kenar listesi gösterimidir. Veri Yapıları kursunda tanımlanan üç çizge gösteriminden biri burada doğrudan karşımıza çıkmaktadır.
Özet
- Varsayılan günlük biçimi kimliği, yazarı, tarihi ve mesajın tamamını verir;
--onelinebunları tek satıra indirir. --pretty=format:ile alanlar tek tek seçilir;%H,%T,%Pişleme, ağaç ve öncül kimliklerini verir.--statişleme başına dokunulan dosyaları ve satır sayılarını gösterir.- Yol süzmesi iki tireli ayırıcıyla, içerik süzmesi
-Sile yapılır;-Sbir dizginin geçiş sayısını değiştiren işlemeleri bulur. A..Bgösterimi, B’den erişilebilen ama A’dan erişilemeyen işlemeleri tanımlar.
Sonraki Adım
Günlük, hangi işlemenin hangi dosyaya dokunduğunu söylüyor ama değişikliğin içeriğini göstermiyor. Üstelik henüz işlenmemiş değişiklikler günlükte hiç görünmez. Sonraki ders üç bölge arasındaki farkları — çalışma dizini ile hazırlık alanı, hazırlık alanı ile son işleme, iki işleme arası — ayrı ayrı almayı ve fark çıktısının biçimini okumayı ele alacak.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.