Git Hook ile Commit Mesaj Kontrolü
Merhaba, ben Serkan USLU.
Bu benim ilk Medium yazım ve heyecanlıyım çünkü sizinle paylaşacak çok şeyim var. Frontend developer olarak çalışıyorum ve kod yazmak benim için sadece bir iş değil, aynı zamanda bir tutku.
Her zaman öğrenmeye açığım. Bu platformda sizinle bilgi ve deneyimlerimi paylaşırken, sizden de öğrenmeyi umuyorum. Karşılıklı olarak deneyimlerin paylaşıldığı bir süreç olur umarım.
Şimdiden iyi okumalar…
Git Hook ile Commit Mesaj Kontrolü
Git Hook Nedir?
Git Hook, Git’in belirli olaylar ve işlemler sırasında otomatik olarak tetiklediği komut dosyaları veya betiklerdir. Bu betikler, bir Git deposunda belirli işlemler yapılırken (örneğin, bir commit yapılırken, bir branch oluşturulurken veya kod push edilirken) otomatik olarak çalıştırılır. Git Hook’lar, kod kalitesini kontrol etmek, otomatik testler yapmak, commit mesajlarını doğrulamak gibi birçok farklı amaç için kullanılabilir.
Git Hook’lar genellikle .git/hooks
dizininde bulunur ve bu dizinde birçok örnek betik mevcuttur. Bu betikler, birçok programlama diliyle (örneğin, Bash, Python, Ruby vb.) yazılabilir.
Örnek Çalışma
Şimdi tanımda bahsettiğimiz örnek üzerinden gidelim. Bir commit mesajı yazılırken, mesajın belli ifadeleri içermemesini sağlayalım. Aşağıdaki örnek commit mesajlarında sadece “fixed, fix, commit” ifadelerin girildiği görülüyor. Amacımız bu metinlerin tek başlarına girilmesini engellemek ve uyarı mesajı vermek.
git commit -m "fixed"
// veya
git commit -m "commit"
// veya
git commit -m "fix"
Hadi Başlayalım…
İhtiyacımıza uygun bir `commit-msg` hook’u oluşturmak için aşağıdaki adımları takip edebiliriz:
- Git deposunun ana dizininde yer alan `.git/hooks` klasörüne gidelim. (Proje ana dizininde açılan bir terminal ile “cd .git/hooks/” şeklinde bu dizine erişebilirsiniz.)
2. Bu dizin içerisinde yer alan `commit-msg.sample` dosyasını `commit-msg` olarak yeniden adlandıralım veya yeni bir `commit-msg` dosyası oluşturalım.
3. Dosyayı bir metin düzenleyici ile açalım ve aşağıdaki script’i ekleyelim.
(Aşağıdaki gibi bir script oluşturmak için yapay zeka araçlarından yardım almak faydalı olacaktır. )
#!/bin/sh
# "$1" argümanı ile gelen commit mesajını commit_message değişkenine atar.
commit_message=$(cat "$1")
# Engellenmesi gereken kelimeleri bir dizi içinde saklar.
forbidden_words=("fix" "fixed" "commit")
# forbidden_words dizisindeki her bir kelime için döngü başlatır.
for word in "${forbidden_words[@]}"; do
# commit_message'ı küçük harfe çevirir ve forbidden_words ile karşılaştırır.
if [[ $(echo "$commit_message" | tr '[:upper:]' '[:lower:]') == "$word" ]]; then
# Eğer commit_message, forbidden_words dizisindeki bir kelimeye eşitse, uyarı mesajı gösterir.
echo "Daha anlamlı bir commit mesajı giriniz."
# Conventional Commits spesifikasyonuna göz atabilecekleri bir link verir.
echo "Doğru bir commit atmak için [Conventional Commits spesifikasyonuna](https://www.conventionalcommits.org/en/v1.0.0/#specification) bakabilirsiniz."
# exit 1 ile betik sonlandırılır ve commit işlemi iptal edilir.
exit 1
fi
done
4. Dosyayı kaydedin ve çıkın.
Çalışmamız Hazır!
Bu script, commit mesajını alır ve engellemek istediğimiz ifadeleri (`fix`, `fixed`, `commit`) karşılaştırır. Eğer commit mesajı bu kelimelerden biriyle tam olarak eşleşirse, script uyarı verir ve commit işlemi iptal edilir.
Artık her commit işlemi sırasında bu script çalışacak ve belirttiğiniz kelimeleri içeren commit mesajlarını engelleyecektir ve sizin girdiğiniz uyarı metni ya da bilgilendirme mesajını görünecektir.
Git Hook’lar, özellikle ekip çalışmalarında ve büyük projelerde, kod kalitesini yüksek tutmak ve süreçleri otomatize etmek için oldukça yararlıdır. Sizlerde daha kapsamlı kuralları çalışmalarınız için oluşturabilirsiniz.
Başka örnekler ve başlıklarda görüşmek üzere.
Vakit ayırdığınız için teşekkür ederim.
Faydalı olması dileğiyle…