Ders 06 / 15
İşleme Mesajı Yazımı
Konu satırı, boş ayırıcı ve gövdeden oluşan mesaj yapısı; gerekçenin kaydedilmesi ve mesaj biçiminin araçlar tarafından nasıl kullanıldığı.
İçindekiler
Üç işleme yazıldı ve üçünün de mesajı tek satırdı. Küçük değişikliklerde bu yeterlidir; ancak bir düzeltmenin nedeni, denenip vazgeçilen seçenekler ya da bir tasarım kararının gerekçesi tek satıra sığmaz. Bu ders mesajın yapısını tanımlar.
İşleme mesajı (commit message) biçimsel bir zorunluluk değil, tarihçenin okunabilirliğini belirleyen tek serbest metin alanıdır. Bir satırın ne yaptığı koddan okunur; neden öyle yazıldığı yalnızca mesajdan okunur.
Mesajın Yapısı
Mesaj üç bölümden oluşur:
Konu satırı: değişikliğin özeti Gövde: değişikliğin gerekçesi. Sorunun ne olduğu, neden bu çözümün seçildiği, hangi seçeneklerin elendiği burada yazılır. İkinci paragraf gerekirse eklenir.
Bölümleri ayıran şey ilk boş satırdır ve bu ayırıcı biçimsel bir kuraldır: araçlar ilk satırı konu, boş satırdan sonrasını gövde olarak okur. Boş satır konmazsa metnin tamamı konu sayılır ve özet listelerinde tek satıra sıkıştırılır.
Ayrımın araçlar tarafından nasıl kullanıldığı doğrudan görülebilir. %s konu satırını,
%b gövdeyi verir:
git log -1 --format='%s' 43370ca
Üç veri yapısı terimi ekle
git log -1 --format='%b' 43370ca
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ı.
Konu Satırı
Konu satırı için dört kural yerleşmiştir:
- Emir kipinde yazılır. “Terim listesini sırala”, “Sıralandı” ya da “Terim listesini
sıraladım” değil. Gerekçesi biçimseldir: araçların ürettiği mesajlar da emir kipindedir
(
Revert "…",Merge …), böylece tarihçe tek bir dilbilgisi kipiyle okunur. Zihinsel testi şudur: konu satırı, “Uygulandığında bu işleme şunu yapar: …” cümlesini tamamlamalıdır. - Elli karakter civarında tutulur. Kesin bir sınır yoktur; ancak özet listelerinde ve dar arayüzlerde satır kırpılır. Elli karaktere sığmayan bir konu satırı çoğu zaman işlemenin birden çok iş içerdiğinin göstergesidir.
- Nokta ile bitirilmez. Başlık işlevi görür, cümle değildir.
- Neyin değiştiğini söyler, nasılını değil. Ayrıntı gövdenin işidir.
Gövde
Gövdede yanıtlanan soru “ne yapıldı” değil, **“neden yapıldı”**dır. Değişikliğin kendisi zaten farkta görünür; farkta görünmeyen şey, o değişikliği gerektiren durumdur.
Yararlı bir gövde şunları içerir:
- Sorunun tanımı. Hangi davranış yanlıştı ya da hangi ihtiyaç karşılanmıyordu?
- Çözümün gerekçesi. Neden bu yol seçildi?
- Elenen seçenekler. Denenip vazgeçilen bir yaklaşım varsa, aynı yolun yeniden denenmesini önler.
- Bilinen sınırlar. Çözümün kapsamadığı durumlar.
Satırlar yetmiş iki karakter civarında elle kırılır. Nedeni, git log çıktısının mesaj
gövdesini dört boşluk girintiyle yazmasıdır: seksen sütunluk bir alanda taşmayı önlemek için
gövdenin kendisi daha dar olmalıdır.
Örnek
Terim listesine üç terim eklenir ve mesaj bir düzenleyicide yazılır. git commit seçenek
verilmeden çalıştırıldığında yapılandırılmış metin düzenleyicisi açılır; kaydedilip
kapatıldığında içerik mesaj olur. Boş bırakılırsa işleme yazılmaz.
Üç 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ı.
Konu satırı ne yapıldığını söylüyor; gövde, terimlerin neden eksik sayıldığını ve karşılıkların kaynağını kaydediyor. İkisi de koddan çıkarılamayacak bilgilerdir.
İkinci bir örnek, arama betiğindeki bir düzeltmeye aittir:
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.
Bu mesajın kaydettiği bilgi, tek satırlık farkın kendisinden daha değerlidir: -i seçeneğinin
neden eklendiği ve neden bir başka çözümün (örneğin listeyi büyük harfe çevirmenin)
seçilmediği yazılıdır.
Ne Yazılmaz
Bazı mesaj kalıpları tarihçeye bilgi eklemez:
- İçeriği yineleyen konu satırları. “terimler.txt güncellendi” — farkta zaten görünen bilgidir. Dosya adı değil, yapılan iş yazılır.
- Durum bildiren kalıplar. “yarım”, “geçici”, “düzeltme”. Bunlar işlemenin ne yaptığını söylemez ve tarihçede aranabilir bir iz bırakmaz.
- Bağlamsız dış numara. Yalnızca bir kayıt numarası içeren mesaj, o kayıt sistemine erişimi olmayan okur için boştur. Numara yazılacaksa gövdeye, sorunun bir cümlelik özetiyle birlikte konur.
- Birden çok işi sayan konu satırları. “X eklendi ve Y düzeltildi” cümlesindeki “ve”, işlemenin bölünmesi gerektiğinin işaretidir.
Son madde, işleme mesajının atomik işleme alışkanlığıyla nasıl bağlandığını gösterir: iyi bir konu satırı yazılamıyorsa sorun çoğu zaman mesajda değil, işlemenin kapsamındadır.
Mesajın Verilme Yolları
| Yol | Kullanım |
|---|---|
git commit |
Düzenleyici açılır; çok satırlı mesaj için olağan yol |
git commit -m "konu" |
Tek satırlık mesaj |
git commit -m "konu" -m "gövde" |
Her -m bir paragraf olur, aralarına boş satır konur |
git commit -F dosya |
Mesaj bir dosyadan okunur |
Düzenleyicide açılan şablonda # ile başlayan satırlar bulunur; bunlar mesaja dâhil edilmez
ve o anki durumu özetler. Yazmadan önce bu özeti okumak, yanlış dosyaların hazırlık alanına
alındığını fark etmenin en ucuz yoludur.
Sonuç
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
Beş satır, projenin beş adımını okunur biçimde anlatıyor. Bu okunabilirlik doğrudan iki alışkanlığın sonucudur: her işlemenin tek bir iş içermesi ve her konu satırının o işi emir kipinde özetlemesi. İkisinden biri bozulduğunda liste değerini yitirir.
Mesaj Bir Arama Alanıdır
Mesajlar yalnızca okunmaz, aranır da. Konu ve gövde metni üzerinde süzme yapılabilir:
git log --oneline --grep="arama"
60e13bd Aramayı büyük/küçük harften bağımsız yap 43370ca Üç veri yapısı terimi ekle 546c174 Terim arama betiği ekle
Arama harfi harfine yapılır; sözcük kökü tanınmaz. Türkçede bu ayrıntı belirginleşir:
git log --oneline --grep="betik"
Komut hiçbir satır döndürmez, oysa tarihçede “Terim arama betiği ekle” işlemesi bulunur. Neden, ünsüz yumuşamasıdır: “betiği” sözcüğü “betik” dizisini içermez. Kısaltılmış bir örüntü sonucu verir:
git log --oneline --grep="beti"
43370ca Üç veri yapısı terimi ekle 546c174 Terim arama betiği ekle
Bu davranış, konu satırlarında değişken ek almayan sözcüklerin tercih edilmesini pratik bir gereklilik hâline getirir.
Özet
- Mesaj, konu satırı ve gövdeden oluşur; ikisini ilk boş satır ayırır ve bu ayrım araçlar tarafından kullanılır.
- Konu satırı emir kipinde, elli karakter civarında ve noktasız yazılır.
- Gövde “ne” değil “neden” sorusunu yanıtlar: sorunun tanımı, çözümün gerekçesi, elenen seçenekler ve bilinen sınırlar.
- Gövde satırları yetmiş iki karakter civarında kırılır;
git logçıktısı gövdeyi girintili yazar. - Mesajlar
--grepile aranabilir; bu, konu satırlarının tutarlı yazılmasını pratik bir gereklilik hâline getirir.
Sonraki Adım
Tarihçe beş işlemeye ulaştı ve git log --oneline ile listelendi. Ancak listeleme,
tarihçeyi okumanın yalnızca en basit biçimidir: belirli bir dosyaya dokunan işlemeler, belirli
bir metni ekleyen ya da silen işlemeler ve belirli bir zaman aralığı ayrı ayrı sorgulanabilir.
Sonraki ders tarihçe okuma araçlarını ele alacak.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.