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:
- Değişiklik dizine eklendi ama kararlı değil
- İ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
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ıntest -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.
Eğer yolu dosya veya dizin olup olmadı...
Nasıl bir dosya veya dizin yolu ile be...
Bir dizin ise kabuk kontrol dosyaları ...
Nasıl geçerli Gıt benim şubesinden (iz...
Bir dizin olmadığını kontrol kabuk var...