SORU
11 AĞUSTOS 2010, ÇARŞAMBA


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
12 AĞUSTOS 2010, PERŞEMBE


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

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Breno Rises

    Breno Rises

    7 Ocak 2014
  • pucksz

    pucksz

    24 Mart 2006
  • ShayLoss

    ShayLoss

    5 Kasım 2009