Git Bu harika bir araç. Yalnızca bir dosyadaki değişiklikleri kancalar aracılığıyla izlemenize değil, aynı zamanda diğer kişilerle sorunsuz bir şekilde işbirliği yapmanıza olanak tanır. Bu bağlamda Git, FOSS'un gelişimini ileriye götüren araçlardan biridir. Ancak Git ile ilgili en büyük sorunlardan biri, depolarınızı yönetmenin zaman ve çaba gerektirmesidir. Örneğin, bu depoları çalıştırmak ve senkronize etmek iki ila üç git komutu alabilir. Bu, onları yönetmeyi yalnızca sıkıcı değil, aynı zamanda kullanıcı hatasına da açık hale getirir. Burada, depolarınızı daha iyi yönetmeniz için bazı basit ama güçlü Git kancalarını gösteriyoruz.

Git Kancaları nedir?
Git-hook özünde, Git depoda bir eylem gerçekleştirdiğinde çalışacak özel betikler oluşturmak için kullanabileceğiniz esnek bir alt komuttur. Örneğin, deponuzu işlemeden önce stil hataları için otomatik olarak kontrol etmek için kancayı kullanmak mümkündür.

Hook alt komutu, deponun “.git” dizini altındaki “hooks” klasörünü okuyarak çalışır. Bu klasör, otomatik olarak çalıştırabileceğiniz her Git eylemi için örnek bir komut dosyası sağlayan bir dizi hazır dosya içerir.

Çoğunlukla, git hook'u istediğiniz herhangi bir betik dilinde yazabilirsiniz. Bu, onu inanılmaz derecede esnek ve herhangi bir yazılım geliştiricisi için ulaşılabilir kılar.
1. Ustalaşmak için zorlamayı önleyin
Bir kullanıcının Git'te yaptığı en yaygın hatalardan biri, geliştirme dalından bir taahhüdü doğrudan master'a göndermektir. Projelerinizi izlemek ve sürdürmek için Github kullanıyorsanız, bu inanılmaz derecede sinir bozucu olabilir.

Ana daldan bir havuz göndermeye çalıştığınızda kontrol edecek ve onaylayacak bir ön gönderme oluşturarak bu sorunu önleyebilirsiniz.
- Adresine git Git deposu korumak istediğin
- Oluşturmak Git kanca dosyası komut dosyası düzelticinizi kullanarak. Bu kancanın daha önce çalıştırılması gerektiğinden "Ödemek" , o zaman bir kanca oluşturmanız gerekir "ön ödemeli":
.git/hooks/pre-push'a dokunun
- aç kanca dosyası yeni Metin düzeltici.
nano .git/hooks/ön-itme
- İçinde, yaz "ödemeden önce" kancası. Örneğin, master dalından bastığınızda sizden onay isteyecek bir komut dosyası aşağıdadır:
#!/bin/shprotect='master' current=$(git symbol-ref HEAD | sed -e 's,.*/\(.*\),\1,') if [ $protect = $current ] sonra -p "Push to master'ı onayla? E/n." -n 1 -r < /dev/tty yankı eğer yankı $YANIT | grep -E '^[Yy]$' > /dev/null sonra 0 fi'den çık 1'den çık yoksa 0 fi'den çık
- Kayıt etmek yeni kanca. içinde nano basarak yapın Ctrl + O Sonra Ctrl + X.
- Git'in yeni kancayı çalıştırabilmesi için aşağıdaki komutu çalıştırın.
chmod +x .git/hooks/pre-Push
2. Ana Şubeye Yapılan İtmeleri Reddet
Master'a itilmenizi önlemenin yanı sıra, sunucu tarafında master şubesine yapılan tüm push'ları reddedecek bir kanca da oluşturabilirsiniz. Bir depoyu birden çok geliştiriciyle paylaşıyorsanız, bu inanılmaz derecede yararlıdır.

Herhangi bir kısıtlanmış kullanıcının ana şubeye gönderilmesini otomatik olarak önleyecek bir 'ön alım' kancası oluşturarak bunu düzeltin.
- Oluşturmak "Ön satın alma" için Git kanca dosyası uzak deponuzda.
.git/hooks/pre-receive'a dokunun
- Bunu aç dosya.
nano .git/hooks/ön alım
- ret metni ekle kanca "avans makbuzu". Örneğin, aşağıdaki kod satırları kutunun dışında çalışmalıdır:
#!/bin/sh şube=$(git symbol-ref HEAD | sed -e 's,.*/\(.*\),\1,') kara liste=(alice bob) if [[ ${karaliste[ *]} =~ $KULLANICI ]]; sonra if [ "$branch" == "master" ]; sonra yankı "Bu dalda değişiklik yapmanıza izin verilmiyor" çıkış 1 fi fi - Yeni kanca dosyanızı kaydedin. Benim durumumda, dosyayı kaydetmek için Ctrl+O'ya, ardından Ctrl+X'e basmam gerekiyor.
- Kayıt etmek kanca metni ve eyleme geçirilebilir hale getirin.
chmod +x .git/hooks/ön alım
İpucu: Git'i daha verimli kullanmak için Git takma adını da kullanabilirsiniz.
3. Depoyu Yeniden Temellendirmeye Karşı Kilitleyin
Bir kullanıcının Git'te yaptığı bir diğer yaygın hata, o anda etkin olan dalı sıfırlamaktır. Yeniden düzenleme, diğer kullanıcılar tarafından yapılan taahhütleri kaldıracağından, çok sayıda katkıda bulunan bir havuz üzerinde çalışıyorsanız bu sinir bozucu bir sorun olabilir.

Mevcut şubenin kapalı olup olmadığını kontrol edecek bir 'pre-re-install' kancası oluşturarak bu sorunu önleyebilirsiniz.
- kurulmuş "yeniden yapılandırma öncesi" dosyası bir dizinde “.git/hooks”:
.git/hooks/pre-rebase'e dokunun
- Bunu aç düzenleme için dosya.
nano .git/hooks/rebase öncesi
- Komut dosyasını ekle yeniden baz almak içeride yeni kanca dosyası.
#!/bin/sh dal="$2" [ -n "$dal" ] || şube=$(git rev-parse --abbrev-ref HEAD) lock="branch.${branch}.rebaselock" if [ "$(git config --bool "$lock")" = true ]; sonra yankı "yeniden temellendirme öncesi kanca: \"$lock\" doğru olarak ayarlanır. Yeniden temel atmayı reddetme." çıkış 1 fi - Kayıt etmek kanca dosyası yeni ve yürütülebilir hale getirin.
chmod +x .git/hooks/rebase öncesi
4. Kodunuzda Stil ve Sözdizimi Kontrolü Zorlayın
Git kancasının en yararlı kullanımlarından biri, onu linter koduna bağlamaktır. Bu, kodunuzun projenin stiline ve formatına uyup uymadığını kontrol eden basit bir programdır.

- ilişkilendirmek linter Git deponuza, önce bir kanca dosyası oluşturun "Önceden taahhütlü olma".
.git/hooks/pre-commit'e dokunun
- kurmak linter projenizin diline uygun. bu durumda kullanıyorum “kabuk kontrolü” Bash kodumu ayrıştırmak için:
sudo apt shellcheck'i kurun
- aç kanca dosyası yeni ve aşağıdaki betiği ekleyin.
$(git diff --cached --name-only --diff-filter=AM | grep -E '\.sh$') dosyası için #!/bin/bash do shellcheck "$file" # için linter'ı çalıştırın her yeni dosya. eğer [ $? -ne 0 ]; sonra exit 1 # linter başarısız olursa taahhüdü sonlandırın. fi bitti
- Kayıt etmek kanca dosyası yeni ve yürütülebilir hale getirin:
Chmod +X .git/Hooks/Pre-Commit
5. Depo Değişikliklerini Kullanıcılara Otomatik Olarak Bildirin
Son olarak, deponuz yeni bir taahhüt aldığında otomatik olarak bir e-posta gönderecek bir Git kancası da oluşturabilirsiniz. Deponuz için basit bir bildirim sistemi oluşturmak istiyorsanız bu kullanışlıdır.
- Oluşturmak kanca dosyası "alıcı sonrası" bir dizinde .git / kancalar deponuzda:
.git/hooks/post-receive'e dokunun
- aç Git kanca dosyası yeni ve aşağıdaki betiği girin:
#!/bin/sh commit_message=$(git log -1 --pretty=%B) users=("[e-posta korumalı]""[e-posta korumalı]""[e-posta korumalı]”) "${users[@]}" içindeki kullanıcı için; do mail -s "New Commit: $commit_message" $user < /dev/null done - Kayıt etmek kanca dosyası yeni ve yürütülebilir hale getirin.
chmod +x .git/hooks/alma sonrası
Sık sorulan sorular
S1.C gibi derlenmiş bir dilde Git kancaları yazabilir miyim?
Cevap. Git Hooks'un en büyük sınırlamalarından biri, doğrudan terminalden çalıştırabileceğiniz bir dil kullanmanızı gerektirmesidir. Bu, Git kancalarının betikleri için herhangi bir yerelleştirilmiş dili desteklemediği anlamına gelir. Örneğin, C veya C++ yerine Python veya Shell kullanarak yeni Git kancaları oluşturabilirsiniz.
S2.Aynı Git deposunda birden fazla kanca çalıştırmak mümkün müdür?
Cevap. Evet. Yukarıdaki örnekler kancaları ayrı ayrı özellikler olarak gösterse de, kendi benzersiz iş akışınızı oluşturmak için bunları kolayca karıştırabilirsiniz, bu da Git kancalarını inanılmaz derecede esnek ve her türlü kodlama durumuna uyarlanabilir hale getirir. Örneğin, deponuzda hem “Press to Master” kancasını hem de “Syntax Check” ön taahhüd kancasını kullanabilirsiniz.
S3.Git kancaları neden kullanıcılara e-posta göndermiyor?
Cevap. Bu sorun büyük olasılıkla uzak sunucunuzun giden e-postaları düzgün şekilde gönderememesinden kaynaklanmaktadır. Bunu düzeltmek için uzak sunucunuzun güvenli olduğundan ve bir SMTP etki alanıyla birlikte çalışan bir posta dağıtım aracısına sahip olduğundan emin olun.


