Ana içeriğe geç

Git Hooks

Türkçe karşılığı
git kancaları
Okunuşu
git huks

Günlük kullanımda çoğunlukla İngilizcesi tercih edilir.

Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/git-hooks

Kısaca

Git hook'ları, commit ya da push öncesi gibi anlarda Git'in otomatik çalıştırdığı; kodu denetleyen, kural uygulayan ve işleri otomatikleştiren betiklerdir.

Git hook'ları nelerdir?

Git hook'ları, bir depoda belirli olaylar gerçekleştiğinde Git'in otomatik olarak çalıştırdığı betiklerdir. Örneğin bir pre-commit hook'u commit oluşturulmadan hemen önce, bir pre-push hook'u ise değişiklikler uzak depoya gönderilmeden önce çalışır. Sorunların başkalarına ulaşmadan yakalanması için genellikle linter'ları, biçimlendiricileri ya da hızlı testleri çalıştırmak amacıyla kullanılırlar.

Hook'lar her deponun .git/hooks klasöründe bulunur ve bir hook, pre-commit veya commit-msg gibi olayın adını taşıyan çalıştırılabilir bir dosyadır. pre-commit gibi bir hook sıfırdan farklı bir durum koduyla çıkarsa Git işlemi durdurur; böylece başarısız bir denetim kötü bir commit'i engelleyebilir. .git klasörü izlenen proje dosyalarının parçası olmadığı için hook'lar biri depoyu klonladığında paylaşılmaz; ekipler bunları normal bir klasöre commit eder ve Git'i core.hooksPath ile oraya yönlendirir ya da bir hook yöneticisi aracı kullanır.

Hook'ları, bir pilotun kalkıştan önce yürüttüğü kontrol listesi gibi düşünün: uçuş ancak her madde geçildikten sonra devam eder. İstemci tarafı hook'lar geliştiricinin makinesinde çalışır; pre-receive gibi sunucu tarafı hook'lar ise Git sunucusunda çalışır ve bir bilet numarası içermeyen commit mesajları gibi ekip kurallarını çiğneyen push'ları reddedebilir.

Git hook'ları bazen CI/CD hatlarıyla karıştırılır. Yerel hook'lar hızlı geri bildirim verir, ancak her geliştirici bunları git commit --no-verify ile atlayabilir; bu yüzden kaliteyi tek başlarına garanti edemezler ve ekipler hız için hook'ları, son kapı olarak da CI'ı kullanır. Git hook'ları ayrıca, bir barındırma platformunun bir depoda bir şey olduğunda başka hizmetlere gönderdiği HTTP istekleri olan webhook'lardan da farklıdır.

Önemli noktalar

  • Hook'lar, commit, merge veya push gibi olaylarda Git'in otomatik çalıştırdığı betiklerdir.
  • pre-commit gibi bir hook'un sıfırdan farklı çıkış kodu, işlemi iptal eder.
  • .git/hooks içindeki hook'lar klonlamayla paylaşılmaz; bu yüzden ekipler core.hooksPath ya da bir hook yöneticisi kullanır.
  • İstemci tarafı hook'lar --no-verify ile atlanabilir; bu yüzden son denetim CI'da kalır.
  • pre-receive gibi sunucu tarafı hook'lar herkes için kuralları uygulayabilir.

Örnek

Linter ve testleri çalıştıran bir pre-commit hook'ubash
#!/bin/sh
# .githooks/pre-commit: runs automatically before every commit

echo "Running linter and tests..."
npm run lint || exit 1   # a non-zero exit code blocks the commit
npm test     || exit 1

# Enable this hooks folder for the repository (run once):
#   chmod +x .githooks/pre-commit
#   git config core.hooksPath .githooks

Sık sorulan sorular

Bir Git hook'u nasıl atlanır?

Komuta --no-verify ekleyin; örneğin git commit --no-verify veya git push --no-verify. Ekibinizin güvendiği denetimleri devre dışı bıraktığı için az kullanın.

Git hook'larını ekibimle nasıl paylaşırım?

Hook betiklerini depoda .githooks gibi bir klasöre commit edin ve her geliştiriciden git config core.hooksPath .githooks çalıştırmasını isteyin. Birçok ekip bunu, hook'ları projenin bağımlılıklarıyla birlikte kuran bir hook yöneticisiyle otomatikleştirir.

En yaygın Git hook'u hangisidir?

En yaygın kullanılan pre-commit hook'udur; genellikle commit edilen dosyalar üzerinde biçimlendiricileri, linter'ları ve hızlı testleri çalıştırmak için kullanılır.

İlgili sayfalar

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar