2010-02-19 32 views
211

Git post-commit hook yazdım ve düzgün çalışıyor. Ancak, üzerinde çalıştığım tüm güncel (ve gelecekteki) veri havuzlarına uygulamak için bu kancayı eklemek istiyorum. Kanca, proje dizinindeki kanca dizini yerine ~/.git/hooks/ eklemeye çalıştım, ancak bu işe yaramadı.Git bağlantı kancaları - genel ayarlar

Sistemimdeki tüm depolar için geçerli olan (her bir proje dizinine kopyalamak zorunda kalmadan) global Git kancaları oluşturmanın bir yolu var mı? Değilse, ileriye giden en iyi çözüm ne olurdu - belki de git-init şablonu? Eğer (senden başka kullanıcılar dahil) sisteminizde her yerde onları isterseniz

+3

Git 2.9'dan itibaren bu en iyi yaklaşım değişti: VonC'nin cevabı daha iyi bir bahis. http://stackoverflow.com/a/37293198/2741954 –

cevap

81

ben

Git ile

2.9+ (2016 Haziran) üzerinde çalışıyorum tüm güncel (ve gelecekteki) git depoları için uygulamak için bu kancayı eklemek istediğiniz, sen yapardın hepsi:

git config --global core.hooksPath /path/to/my/centralized/hooks 

"change default git hooks" konusuna bakın: Bu merkezi kancaların yönetimi için yapılmıştır.

+0

Eğer bir exisiting repo'm varsa ve güncellenmiş bir pre-commit hook'a sahip olmak için değişiklikleri yapan tüm diğer devleri istiyorum, örneğin bunu nasıl yaparım? Teşekkürler – Richlewis

+0

@Richlewis http://stackoverflow.com/a/40550555/6309 tamamen açık olmadığı anlamına mı geliyor? – VonC

+0

@Richlewis Kendi yerel yapılandırmalarında referans vermeleri için tüm devreler tarafından erişilebilen bir paylaşımlı klasör kurmanız gerekir. – VonC

67

, yüklü şablon dizinin içeriğini değiştirebilir - olanlar $PREFIX muhtemelen /usr/local veya /usr olduğu $PREFIX/share/git-core/templates/hooks, içindedir.

Bunun sizin için olmasını istiyorsanız, evet, en basit şey, git-init'in --template seçeneği olabilir. Saklamak istediğiniz varsayılan varsayılan sürümlere (bireysel kancalar, bilgi dizini ...) ve daha sonra kendi içeriğinize hooks/post-commit ve özelleştirmek istediğiniz başka herhangi bir şeye sahip olan kişisel bir şablon dizini kolayca tutabilirsiniz.

+11

Teşekkürler, bu iyi çalıştı. Ve mevcut projelere geriye dönük olarak uygulamak için, tekrar 'git init' komutunu çalıştırdım ve yeni kancımı ekledim. – swanson

+1

Harika bir ipucu Jefromi, teşekkürler büyük zaman! –

+0

Bu temiz bir çözümdür, ancak tüm reposlarınızı değiştirmenizi gerektirir. Bu mümkün, ama bir eklenti veya bir şey (Çarşıda böyle yapılır) ile bir olasılık yok mu? –

268

Git 1.7.1'den itibaren, git şablonlarının nereye bakılacağını söylemek için gitconfig öğesinde init.templatedir öğesini ayarlayabilirsiniz. Böyle

Seti it:

git config --global init.templatedir '~/.git_template' 

Daha sonra yeni havuzlarını oluşturmak veya klon şablonları için bu dizini kullanır. ~/.git_template/hooks'da istediğiniz kancaları yerleştirin. Mevcut havuzlarını benim gibi iseniz çalışacak git init --template ~/.git_template çalışan, 1.7.1 daha eski git sürümleri için

. .git olduğu aynı dizinde git init çalıştırarak uygun şablonlar ile yeniden ve hala .git_template yönetmek istediğiniz edilebilir dot dosyalarınızın geri kalanı ile dir. git init nolu dizininizin bulunduğu dizini belirtmek için $GIT_TEMPLATE_DIR ortamını da kullanabilirsiniz.

+1

harika bir fikir. Teşekkürler. –

+47

Harika cevap. Eğer var olan repo üzerinde 'git init' tekrar çalıştırıyorsa, başka kimse merak ediyorsa - ** değil **, bkz: http://stackoverflow.com/questions/5149694/does-running-git-init-twice -initialize-a-repository-or-reinitialize-an-mevcut – kontur

+0

Benim için o var olan depolarda git init kullanarak dosyaları kopyalamak için git template klasörüne göreceli yolu ile işe yaramadı. Bunun yerine tam yolu kullandım. – user847988

3

minimalist bir yaklaşım, bu proje için yazma kanca izlemek için depoda bir git_hooks/ dizin oluşturmak README bahsetmesi gelecek kullanıcıların dikkatine getirmek ve doğru yapmak için güvenmek etmektir klonlandıktan sonra bir şey. Bir süredir bu konu üzerinde yoğunlaştım ve artan bir yaklaşım seçtim. Yolda git-hooks gibi bir araç kullanmayı düşünebilirim.