Koyarak git deposu, kanca
Kötü bir uygulamaya koymayı kabul edilir .git/projeler deposuna (sembolik, örneğin kullanarak) kanca. Evet, farklı gıt kullanıcılar için aynı kanca sunmak için en iyi yolu nedir?
CEVAP
Ben genellikle Scytale, birkaç Ek öneri ile, ayrı bir cevaba değer yetecek kadar katılıyorum.
İlk olarak, özellikle bu kancalar politikasını yürütmek veya yararlı bildirimleri oluşturma hakkında ise uygun sembolik yaratan bir komut dosyası yazmak gerekir. İnsanlar çok fazla sadece kendileri yapmak zorunda kalırlarsa daha bin/create-hook-symlinks
yazın eğer kanca kullanmak Olası olacak.
İkinci olarak, doğrudan symlinking kancaları kendi kişisel kanca ekleyerek engeller. Örneğin, hoşuma örnek pre-commit herhangi bir boşluk hataları yok emin kılan kanca. Bu büyük bir şekilde, repo kanca sarıcı komut dosyası açılır ve semboliktümbunun için kancaları. Sarıcı daha sonra incelemek $0
(varsayarak bir bash komut; bir eşdeğer gibi argv[0]
aksi halde) - acaba hangi kanca olduğunu çağrılan, sonra da çağırmak uygun kanca içinde repo olarak uygun kullanıcı kanca, hangi-ecek var olmak yeniden, geçen tüm değişkenler için her. Bellek hızlı bir örnek:
#!/bin/bash
if [ -x $0.local ]; then
$0.local "$@" || exit $?
fi
if [ -x tracked_hooks/$(basename $0) ]; then
tracked_hooks/$(basename $0) "$@" || exit $?
fi
Yükleme komut dosyası tarafa önceden varolan tüm kancaları (adlarını .local
ekleme), hareket ve yukarıdaki senaryo için bilinen tüm kanca adları sembolik link:
#!/bin/bash
HOOK_NAMES="applypatch-msg pre-applypatch post-applypatch pre-commit prepare-commit-msg commit-msg post-commit pre-rebase post-checkout post-merge pre-receive update post-receive post-update pre-auto-gc"
# assuming the script is in a bin directory, one level into the repo
HOOK_DIR=../.git/hooks
for hook in $HOOK_NAMES; do
# If the hook already exists, is executable, and is not a symlink
if [ ! -h $HOOK_DIR/$hook -a -x $HOOK_DIR/$hook ]; then
mv $HOOK_DIR/$hook $HOOK_DIR/$hook.local
fi
# create the symlink, overwriting the file if it exists
# probably the only way this would happen is if you're using an old version of git
# -- back when the sample hooks were not executable, instead of being named ____.sample
ln -s -f ../../bin/hooks-wrapper $HOOK_DIR/$hook
done
alma "ölümcül: git deposu değil: ...
Geçerli dizin ve Git deposu olup olmad...
Git ile yeni bir şube Ustası, kaydedil...
Nasıl git-elinize sağlık; gıt elinize ...
Git deposu'tarihi çöken...