İdeal olarak, örnek dosyaları takip ederseniz kancalar bash ile yazılır. Ancak mevcut herhangi bir dilde yazabilir ve sadece yürütülebilir bayrağa sahip olduğundan emin olabilirsiniz.
Böylece, hedeflerinize ulaşmak için bir Python veya Go kodu yazabilir ve kancalar klasörünün altına yerleştirebilirsiniz. Çalışacak, ancak depo ile birlikte yönetilmeyecek.
İki seçenek
a) Çoklu Komut Dosyaları
Kancalarınızı yardımınızın içine kodlayabilir ve mükemmel komut dosyanızı çağırmak için kancalara küçük bir kod parçası ekleyebilirsiniz:
$ cat .git/hooks/pre-commit
#!/bin/bash
../../hooks/myprecommit.js
b) Tek Senaryo
Daha havalı bir seçenek, hepsini yönetmek için birkaç komut dosyası yerine yalnızca bir komut dosyası eklemektir. Yani, bir kanca / mysuperhook.go oluşturun ve ona istediğiniz her kancayı gösterin.
$ cat .git/hooks/pre-commit
#!/bin/bash
../../hooks/mysuperhook.go $(basename $0)
Parametre, betiğinizin hangi kancaya tetiklendiğini sağlar ve kodunuz içinde ayırt edebilirsiniz. Neden? Bazen, aynı taahhüt ve itme kontrolünü yapmak isteyebilirsiniz.
Ve sonra?
Ardından, aşağıdaki gibi daha fazla işleve sahip olmak isteyebilirsiniz:
- Taahhüt veya itmeden önce bile her şeyin yolunda olup olmadığını kontrol etmek için kancayı manuel olarak tetikleyin. Senaryonuzu çağırırsanız (seçenek a veya b) hile yapar.
- CI'deki kancaları tetikleyin, böylece CI için aynı kontrolleri yeniden yazmanıza gerek yoktur, örneğin sadece taahhüt ve itme tetikleyicilerini çağırmak olacaktır. Yukarıdaki ile aynı sorunu çözmelidir.
- Bir işaretleme doğrulayıcısı veya bir YAML doğrulayıcısı gibi harici araçları arayın. Sistem çağrıları yapabilir ve STDOUT ve STDERR ile başa çıkmanız gerekir.
- Tüm geliştiricilerin kancaları takmanın basit bir yolu olduğundan emin olun, bu nedenle varsayılan kancaları doğru olanlarla değiştirmek için depoya güzel bir komut dosyasının eklenmesi gerekir
- Şubeleri geliştirme ve yönetme taahhütlerini engellemek için bir kontrol gibi, her depoya eklemek zorunda kalmadan bazı küresel yardımcılara sahip olun. Global komut dosyalarına sahip başka bir depoya sahip olarak çözebilirsiniz.
Bu daha basit olabilir mi?
Evet, git-hooks'u yönetmenize yardımcı olacak birkaç araç var. Her biri sorunu farklı bir perspektiften ele alacak şekilde uyarlanmıştır ve sizin veya ekibiniz için en iyisini elde etmek için hepsini anlamanız gerekebilir. GitHooks.com , çengel hakkında çok fazla okuma ve bugün mevcut birçok araç sunar.
Bugün itibariyle git kancalarını yönetmek için farklı stratejilerle listelenen 21 proje var. Bazıları sadece tek bir kanca için, bazıları belirli bir dil için vb.
Benim tarafımdan yazılmış ve ücretsiz olarak bir açık kaynak projesi olarak sunulan bu araçlardan birine hooks4git denir . Python'da yazılmıştır (çünkü beğendim), ancak fikir, yukarıda listelenen tüm öğeleri, deponuzun içinde yaşayan ve aramak istediğiniz herhangi bir komut dosyasını çağırabilen .hooks4git.ini adlı tek bir yapılandırma dosyasında ele almaktır. .
Git kancalarını kullanmak kesinlikle harika, ama teklif edilme şekli genellikle insanları ondan uzaklaştırıyor.