İçeriğe geç
academia.sh

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; --oneline bunları tek satıra indirir.
  • --pretty=format: ile alanlar tek tek seçilir; %H, %T, %P işleme, ağaç ve öncül kimliklerini verir.
  • --stat iş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 -S ile yapılır; -S bir dizginin geçiş sayısını değiştiren işlemeleri bulur.
  • A..B gö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.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat