Ah ah, bu soru çatlaklardan kaymış gibi görünüyor. Umarım hala oradasın Esben!
Güncellenmiş her ref kez çalıştırılan bir
update hook, aradığınız
. Argümanlar, ref'in adı, eski nesne adı (SHA1 işlemi) ve yeni nesne adıdır.
Yapmanız gereken tek şey, eski ile yeni arasındaki farkı kontrol etmek ve standartlarınıza uygun olduğundan emin olmak. Elbette bu tamamen basit değil, ama tamamen yönetilebilir. İşte öyle yapardım:
.git/hooks/update
aşağıdaki komut dosyasını kaydedin. İstenen tüm olanlar için eski ve yeni, greps arasında farklılık tüm dosyaları listeler
old=$2
new=$3
# that's a literal tab, because (ba)sh turns \t into t, not a tab
# make sure your editor doesn't expand it to spaces
git diff --name-only $old $new | egrep '(\.(cpp|h)$)|^CMakeLists.txt$' | xargs -d'\n' git diff -U0 $old $new -- | grep -q '^+.* ' && exit 1
, (umurumuzda değil çünkü bağlam sıfır hatları ile) onlar için diff alır ve greps için bir sekme içeren eklenmiş bir satır (+
ile başlayan). Biri bulursa grep başarılı olursa, &&
'un exit 1
çalışmasına izin verir, bu da kopyanın hatadan çıkmasına ve güncellemenin iptal edilmesine neden olur!
Bunun gereksinimlerinizden biraz farklı olduğunu unutmayın - farkın herhangi bir sekme karakteri ekleyip eklemediğini kontrol eder. Bu uzun vadede muhtemelen daha iyidir; Mevcut kodunuzun tamamlandığından emin olduktan sonra, tüm içeriği aramak zorunda olmadığından çok daha hızlı bir şekilde aynı şeydir.
Çengelin yazılmasıyla ilgili yardım mı istiyorsunuz, yoksa bir güncelleme çengelinin bu amaç için çalışıp çalışmayacağını mı merak ediyorsunuz? – Cascabel
Her ikisi de aslında :) Bunun kolay bir şekilde yüklenemez ve indirilebilir olmadığından çok şaşırdım, bu yüzden önemsiz olduğunu hissetmiyorum. Böyle bir kancanın nasıl görüneceğine dair bir örnek çok yardımcı olacaktır. –