İçeriğe geç
academia.sh

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:

  1. 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.
  2. 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.
  3. Nokta ile bitirilmez. Başlık işlevi görür, cümle değildir.
  4. 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 --grep ile 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.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat