SORU
17 NİSAN 2010, CUMARTESİ


Kirli bir dizin kontrol veya izlenmeyen dosyaları Gıt ile

Nasıl olursa git benim depo olarak kaydedilmemiş değişiklikler var mı kontrol edebilir miyim:

  1. Değişiklik dizine eklendi ama kararlı değil
  2. İzlenmeyen dosyaları

bir script?

git-status Her zaman git sürüm 1.6.4.2 ile sıfır dönüş gibi görünüyor.

CEVAP
17 NİSAN 2010, CUMARTESİ


Güvenilir anahtarı “” Gıt kullanmaktır ‘tesisat’ emrediyor. betik

Geliştiriciler tesisat değişen çok kararlı arabirimleri sağlar emin olmak için komutları ne zaman bakım (depo devletin belirli bir kombinasyon, stdin, komut satırı seçenekleri, argümanları, vb. al komut/seçenek var Gıt) tüm sürümlerinde aynı çıktıyı üretecektir. Yeni çıktı varyasyonlar tesisat komutları olabilir tanıtılan üzerinden yeni bir seçenek, ama bu olamaz takdim herhangi bir sorun için programlar var zaten yazılı karşı eski sürümleri (onlar olmaz kullanarak yeni seçenekler, beri yaptıkları bir şey yok (ya da en azından değildi eskiden) senaryo yazılmış).

Ne yazık ki ‘günlük’ Gıt komutları ‘porselen’ komutları, yani en Gıt kullanıcılar tesisat komutları ile aşina olmayabilir. < Porselen ve sıhhi tesisat komut arasındaki farkı 42* *(bkz: alt bölümler High-level commands (porcelain) Low-level commands (plumbing) başlıklı. ana yapılır


Öğrenmek için uncomıtted değişiklikleri, sen-ecek büyük olasılıkla lüzum git diff-index (karşılaştırmak dizin (ve belki paletli bit çalışan ağaç) karşı başka treeish (örneğin HEAD)), belki de git diff-files (karşılaştırmak çalışma ağaca endeksi) ve muhtemelen git ls-files (liste dosyaları; örneğin, liste izlenmeyen, unignored dosyaları).

Bir depoyu değişiklikleri (henüz kararlı) aşamalı olup olmadığını kontrol etmek için bu seçeneği kullanın:

git diff-index --quiet --cached HEAD
  • 0 ile çıkar o zaman farkları (1 farklılıklar olduğu anlamına gelir) vardı.

Çalışan bir ağaç olup olmadığını kontrol etmek için sahnelenen olabilecek değişiklikler var:

git diff-files --quiet
  • Çıkış kodu git diff-index (0 == fark; *19 = * = farkları) aynıdır.

Dizinin kombinasyonu olup olmadığını kontrol etmek ve çalışma ağacında takip dosyaları HEAD: göre değişir

git diff-index --quiet HEAD
  • Bu önceki ikisinin bir karışımı gibi. Bir başbakan bunu fark edecek hala rapor “fark” varsa, aşamalı değişim “geri” işçi ağaç (geri içeriği vardır HEAD). Bu aynı durum, iki ayrı komutların ikisini de raporlar dönecekti “farklılıklar mevcut”.

Ayrıca izlenmeyen dosyaları bahsetti. Yani belki “izlenmeyen ve unignored” ya, yani belki sadece “” (ugnored dosyaları da dahil olmak üzere). izlenmeyen Her iki şekilde de, git ls-files Bu iş için bir araçtır:

“” (Göz ardı edecek dosyaları) varsa vardır: . izlenmeyen için

git ls-files --others

“İzlenmeyen ve unignored”:

git ls-files --exclude-standard --others

Benim ilk olsa Bu komutları çıkış olup olmadığını sadece kontrol etmek için:

test -z "$(git ls-files --others)"
  • 0 ile çıkar, sonra da izlenmeyen dosyaları vardır. 1 ile çıkar eğer var izlenmeyen dosyaları.

Bu “izlenmeyen dosyaları” raporlar (her ikisi de yukarıdaki komutu) sıfır çıkar sonucu. içine git ls-files anormal çıkışları tercüme edecek küçük bir şans var hayır Biraz daha sağlam bir versiyonu şöyle olabilir:

u="$(git ls-files --others)" && test -z "$u"
  • Fikri önceki komutu aynıdır, ama git ls-files beklenmedik hatalar yaymak için izin verir. Sıfır olmayan bir çıkış anlamına gelebilir bu durumda “izlenmeyen dosya yok” ya bir hata oluştuğu anlamına gelebilir. Eğer istediğiniz “hata” sonuçları ile birlikte “hayır izlenmeyen dosyaları” sonuç yerine, kullanın test -n "$u" (çıkış 0 demek “bazı izlenmeyen dosyaları”, ve sıfır hata anlamına gelir ya da “hayır izlenmeyen dosyaları”).

Başka bir fikir --error-unmatch izlenmeyen dosya yok hiçbir zaman sıfır olmayan bir çıkış neden olur. Bu da birleştirilerek riski artacak “hiç izlenmeyen dosyaları çıkmak için 1) “bir hata oluştu” (sıfır olmayan, ama muhtemelen 128) çıkın. Ama* vs 0 vs *38 kontrol çıkış kodları muhtemelen oldukça sağlamdır sıfır:

git ls-files --other --error-unmatch . >/dev/null 2>&1; ec=$?
if test "$ec" = 0; then
    echo some untracked files
elif test "$ec" = 1; then
    echo no untracked files
else
    echo error from ls-files
fi

git ls-files yukarıda örneklerden birini sadece izlenmeyen ve unignored dosyaları düşünün isterseniz --exclude-standard alabilir.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Doug Bernards

    Doug Bernard

    7 Kasım 2007
  • My Name Is Jeff

    My Name Is J

    26 ŞUBAT 2008
  • xCraash

    xCraash

    6 Temmuz 2012