Git Hooks
- Türkçe karşılığı
- git kancaları
- Okunuşu
- git huks
Günlük kullanımda çoğunlukla İngilizcesi tercih edilir.
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-commitgibi bir hook'un sıfırdan farklı çıkış kodu, işlemi iptal eder..git/hooksiçindeki hook'lar klonlamayla paylaşılmaz; bu yüzden ekiplercore.hooksPathya da bir hook yöneticisi kullanır.- İstemci tarafı hook'lar
--no-verifyile atlanabilir; bu yüzden son denetim CI'da kalır. pre-receivegibi sunucu tarafı hook'lar herkes için kuralları uygulayabilir.
Örnek
#!/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 .githooksSı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
- GitSürüm Kontrolü, s. 10Git, dosyalardaki değişiklikleri zamanla izleyen ücretsiz, açık kaynaklı dağıtık sürüm kontrol sistemidir; iş birliğini ve hataları geri almayı kolaylaştırır.
- CommitSürüm Kontrolü, s. 5Commit, Git'te projenin dosyalarının; benzersiz bir kimlik, yazar, zaman damgası ve değişikliği anlatan bir mesajla kaydedilmiş anlık görüntüsüdür.
- LintingTest ve Kalite, s. 15Linting, kaynak kodu çalıştırmadan otomatik olarak analiz edip olası hataları, stil sorunlarını ve şüpheli kalıpları kod yayına çıkmadan işaretleme işlemidir.
- CI/CDDevOps ve Bulut, s. 9CI/CD, kod değişikliklerini sık sık derleyen, test eden ve yayınlayan otomatik pratikler bütünüdür; yazılım kullanıcılara hızlı ve güvenli biçimde ulaşır.
- RepositorySürüm Kontrolü, s. 34Repository, bir projenin tüm dosyalarını ve sürüm kontrol sisteminin kaydettiği her değişikliğin eksiksiz geçmişini barındıran depolama alanıdır.
- WebhookBackend ve API'ler, s. 47Webhook, bir uygulamanın, tamamlanan bir ödeme gibi belirli bir olay gerçekleştiği anda sizin verdiğiniz bir URL'ye otomatik olarak gönderdiği HTTP isteğidir.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin