Git Hooks

Source Control sisteminizi otomatize edin.

Aykut Asil
Nov 8 · 2 min read

Hepimizin amacı temiz, anlaşılır, kaliteli kod yazmak. En azından amaç bu olmalı diye düşünüyorum :). Bu amaca yönelik atılması gereken ilk adım ise kodlarımızı bir source control sistemine kaydetmek olacaktır. Günümüzde kullanılan en yaygın source control sistemi Git’dir. Git harici Svn gibi sistemlerde bulunmaktadır.

Kısa bir Git tanımı sonrası gelelim asıl mevzumuza. Git Hooks!

Git Hooks

Eğer source control olarak git kurmuş isek, bize sağlayacağı birçok önemli özelliklerden biri de hooks yapısıdır. Hooks mekanizması ile belli başlı git komutları öncesi veya sonrası istediğimiz herhangi bir şeyi çalıştırabiliriz. Herhangi bir şey diyorum çünkü bash script kodu yazıyoruz ve yapabileceklerimiz hayallerimiz ile sınırlı olmuş oluyor :)

Bir örnek üzerinden gidelim.

Bir Android uygulamanız var ve kodda bazı değişiklikler sonrası git commit -am “fix #123” diyerek yapılan değişikleri git’e kaydettiniz. Ama sonra farkettiniz ki projenizde kullandığınız ktLint gibi bir static analyze tool’u hata verdi. Şimdi ./gradlew ktlintFormat diyerek kodunuzu standardize ettiniz ve tekrar commit command’i ile source control’unuzu güncellediniz. Gereksiz yere iki commit olmuş oldu. Ama elimizde şöyle bir kontrol sistemi olsaydı mesela: git commit komutu verdiğimizde ilk önce ./gradlew ktlintFormat komutu çalışsın. Eğer bu komut başarılı şekilde sonuçlanır ise commit komutuna devam edilsin. Başarısız olursa herhangi bir işlem yapılmasın ve geriye hata mesajı dönsün. İşte tam olarak bunu yapmamızı sağlayacak olan araç Git Hooks.

Gelelim nasıl yapacağımıza?

Git ile source control’u sağlanan projelerin kök dizininde .git adlı bir klasör bulunur. Bu klasörü görmek için öncelikle gizli dosyaların görünümünü açmanız gerekmektedir (Mac kullanıcıları için kısayol: Cmd + Shift + . tuşlarına basın).

Sonrasında .git klasörü altında hooks adlı bir klasör göreceksiniz. Eğer göremezseniz kendiniz oluşturabilirsiniz. Hooks klasörünün içerisine girin ve pre-commit isimli bir dosya oluşturun. Uzantısını boş bırakın. Ve aşağıdaki şekilde giriş yapın.

Eğer hooks klasörünü ve pre-commit dosyasını siz oluşturduysanız pre-commit dosyasının olduğu klasörde aşağıdaki komutu çalıştırmanız gerekmektedir.

Evet bu kadar.

Artık git commit komutunu yazıp enter’a bastığınızda ilk olarak ./gradlew/ktlintFormat komutu çalışacak ve eğer başarılı şekilde çalışır ise “ktlintFormat found no problems” mesajı ile birlikte exit 0 kodu geriye dönecek. Ve exit 0 kodu ile birlikte git commit komutumuz çalışacak. Eğer bir problem ile karşılaşılır ise exit 1 geri döneceği için git commit komutumuz çalışmayacaktır. Yani geriye exit 0 veya exit 1 dönecek şekilde istediğimiz logic’i oluşturmakta özgürüz.

Diğer komutlar

Her commit komutumuz öncesinde çalışacak olan pre-commit dosyası gibi başka dosyalar da oluşturabilir ve source control sistemimizi kısmende olsa otomatize edebiliriz. Aşağıdaki isimler ile kaydedilen dosyaların çalışma zamanları kendi isimleri ile eşdeğerdir.

  • pre-commit
  • prepare-commit-msg
  • commit-msg
  • post-commit
  • post-checkout
  • pre-rebase

Kaynaklar:

Aykut Asil

Written by

www.aykutasil.com

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade