Mevcut ve gelecekteki tüm depolara git post-taahhüt kancası uygulama


275

Git post-taahhüt kancası yazdım ve düzgün çalışıyor. Ancak, üzerinde çalıştığım tüm mevcut (ve gelecekteki) git depolarına uygulamak için bu kanca eklemek istiyorum. Kancayı ~/.git/hooks/proje dizinindeki kancalar dizinine eklemek yerine denedim , ancak bu işe yaramadı.

Sistemimdeki tüm depolara uygulanacak global Git kancaları oluşturmanın herhangi bir yolu var mı (bunları her proje dizinine kopyalamak zorunda kalmadan)? Değilse, ileride en iyi çözüm ne olurdu - belki bir git-init şablonu?


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

Bu sorunuza cevap veriyor mu? değiştir varsayılan git hooks
Oliver Sieweke

Yanıtlar:


192

Üzerinde çalıştığım tüm mevcut (ve gelecekteki) git depolarına uygulamak için bu kanca eklemek istiyorum

Git 2.9+ (Haziran 2016) ile tek yapmanız gereken:

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

Bkz. " Varsayılan git kancalarını değiştirme ": Bu, merkezi kancaları yönetmek için yapılmıştır.


Var olan bir repo var ve değişiklikleri çeken diğer tüm dev's güncellenmiş bir ön-taahhüt kancaya sahip olmasını istiyorsanız, bunu nasıl yaparım? teşekkür ederim
Richlewis

@Richlewis Şunu mu demek istediniz: stackoverflow.com/a/40550555/6309 tamamen açık değil mi?
VonC

@Richlewis Kendi yerel yapılandırmalarında başvurabilmeleri için tüm geliştiricilerin erişebileceği paylaşılan bir klasör ayarlamanız gerekir.
VonC

ne yazık ki hala tam anlamıyorum. repo içinde buna /.git/hooks/pre_commitişaret edebilir miyim?
Richlewis

@Richlewis Orijinal sorunuza cevap verdim.
VonC

290

Git 1.7.1'den itibaren git'e şablonları nerede arayacağınızı söylemek için gitconfig dosyasında init.templatedir öğesini ayarlayabilirsiniz .

Şöyle ayarlayın:

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

Daha sonra, oluşturduğunuz veya klonladığınız yeni depolar bu dizini şablonlar için kullanır. İstediğiniz kancaları yerleştirin ~/.git_template/hooks. Mevcut depolar git initaynı dizinde çalışarak uygun şablonlarla yeniden başlatılabilir .git.

1.7.1'den eski git sürümlerinde, git init --template ~/.git_templatebenim gibi iseniz ve hala .git_templatenokta dosyalarınızın geri kalanıyla birlikte dir'nizi yönetmek istiyorsanız, çalışma çalışır . $GIT_TEMPLATE_DIROrtamı git init, şablon dizininizin nerede olduğunu söylemek için de kullanabilirsiniz .


51
Mükemmel cevap. Varsa başka biri git initmevcut bir repoda yeniden çalışıp çalışmadığını merak ederse - yapmaz , bkz: stackoverflow.com/questions/5149694/…
kontur

Benim için varolan depolarda git init kullanarak dosyaları kopyalamak için git şablon klasörüne göreceli yolla çalışmadı. Onun yerine tam yolu kullanmıştım.
user847988

1
Tırnaksız pencerelerde: `git config --global init.templatedir d: \ git \ .git_template \`
Vladimir Vukanac

1
İpucu: Şablon kancaları kopyalanır. Global kancaları bir arada güncelleyebilmek istiyorsanız, kancayı başka bir yere koyun ve şablon dizinine (Linux'ta) sembolik bir bağlantı ekleyin. Bağlantı yolunun mutlak olduğundan emin olun.
Tim Allclair

1
Koşu git initaslında kancaları benim için güncellemedi. Zaten var olan dosyaların üzerine yazılmayacak gibi görünüyor. stackoverflow.com/questions/10791486/ . Bunun yerine önce eski kanca dosyalarını kaldırmanız gerekir.
Phil R

69

Bunları sisteminizin her yerinde (sizden başka kullanıcılar da dahil olmak üzere) istiyorsanız, yüklü şablon dizininin içeriğini değiştirebilirsiniz - bunlar içinde $PREFIX/share/git-core/templates/hooks, $PREFIXmuhtemelen /usr/localveya nerede /usr.

Bunun sadece sizin için olmasını istiyorsanız, o zaman evet, en basit şey --templategit-init seçeneği olacaktır . Korumak istediğiniz varsayılanların yüklü sürümüne (münferit kancalar, bilgi dizini ...) ve ardından kendi içeriğinize hooks/post-commitve özelleştirmek istediğiniz başka bir şeye sembolik bağlantıları olan kişisel bir şablon dizinini kolayca tutabilirsiniz .


11
Teşekkürler, bu iyi çalıştı. Ve mevcut projelerime geriye dönük olarak uygulamak için, sadece git inittekrar koştum ve yeni kancamı ekledi.
swanson

Bu düzgün bir çözümdür, ancak tüm depolarınızı değiştirmenizi gerektirir. Bu uygulanabilir, ancak bir eklenti veya başka bir şeyle bir olasılık yok mu (Çarşıda böyle yapılır)?
Martin Ueding

2
SourceTree'nin OS X'teki gömülü git'i için/Applications/SourceTree.app/Contents/Resources/git_local/share/git-core/templates/hooks
CupawnTae

1
Windows için bu, git kurulum dizininde mingw64\share\templates\hooks(veya 32 bit için mingw32) bulunur
nerdherd

1
@nerdherd şuanda mingw64\share\git-core\templates\hooks(gfw 2.25)
RJFalconer

7

Minimalist bir yaklaşım, git_hooks/o proje için yazdığınız kancaları izlemek, a'da söz ederek gelecekteki kullanıcıların dikkatini çekmek READMEve klonlandıktan sonra doğru şeyi yapmak için onlara güvenmek için deponuzda bir dizin oluşturmaktır . Bir süredir bunun üzerine düşündüm ve artımlı bir yaklaşım seçtim. Yolun aşağısında git-hooks gibi bir alet kullanmayı düşünebilirim .


1
Bu gerçek bir çözüm olmaktan çok uzak, üzgünüm.
Victor Schröder
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.