SORU
28 ŞUBAT 2011, PAZARTESİ


Nasıl olursa'şey geçerli dalında kararlı olmak için kontrol etmek?

tüm. nasıl kabuk durumu sonuç alabilir miyiz? Ama her zaman 0 döndürür, hatta taahhüt var git status çalıştım.

git status
echo $?  #this is always 0

Kötü bir fikir değil sanırım ama bir fikrim var.

if [ git status | grep -i -c "[a-z]"> 2 ];
then
 code for change...
else
  code for nothing change...
fi

başka yol yok mu?


güncelleme,ve bu İşareti çözmek Longair şimdi 's post

Bunu denedim , ama bir sorun neden.

if [ -z $(git status --porcelain) ];
then
    echo "IT IS CLEAN"
else
    echo "PLEASE COMMIT YOUR CHANGE FIRST!!!"
    echo git status
fi

o zaman

bazı hata olacaktır [: ??: ikili işleç bekleniyor

şimdi , adam bakıyor ve git diff deneyin ediyorum.

===================kod için umuyorum, ve umarım daha iyi cevap======================

#if [ `git status | grep -i -c "$"` -lt 3 ];
# change to below code,although the above code is simple, but I think it is not strict logical
if [ `git diff --cached --exit-code HEAD^ > /dev/null && (git ls-files --other --exclude-standard --directory | grep -c -v '/$')` ];
then
        echo "PLEASE COMMIT YOUR CHANGE FIRST!!!"
    exit 1

else
    exit 0
fi

CEVAP
28 ŞUBAT 2011, PAZARTESİ


git status --porcelain çıkış boş olup olmadığını test etmek için bir alternatif için ayrı bir bakım her koşul test etmektir. Her zaman git status çıktı izlenmeyen dosya varsa, örneğin bakım, bir olmayabilir.

Örneğin, eğer herhangi bir yerel unstaged değişiklik olup olmadığını görmek için, dönüş kodu bakabilirsiniz:

git diff --exit-code

Eğer sahnelenen değişiklikleri ama kararlı olup olmadığını kontrol etmek için, dönüş kodu kullanabilirsiniz:

git diff --cached --exit-code

Eğer göz ardı olmayan çalışma ağacında herhangi izlenmeyen dosya var olup olmadığını bilmek istiyorsanız son olarak, aşağıdaki komutu çıktısı boş olup olmadığını test edebilirsiniz:

git ls-files --other --exclude-standard --directory

Güncelleme:Bu komut çıktısını dizinleri dışlamak için değiştirebilirsiniz aşağıda mı diye soracak. --no-empty-directory ama çıkış filtresi gerekecek sanırım o çıktı gibi: tüm dizinleri dışlamak için ekleyerek boş dizinleri hariç tutabilirsiniz

git ls-files --other --exclude-standard --directory | egrep -v '/$'

egrep 20 *desen uymayan tek çıkış hatları için anlamına gelir, ve desen / ile biten herhangi bir satır eşleşir.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Day9TV

    Day9TV

    22 NİSAN 2010
  • Jeb Corliss

    Jeb Corliss

    17 Kasım 2006
  • theavettbrothers

    theavettbrot

    9 ŞUBAT 2007