GÜNCELLEME : OP Daniel Stutzbach işaret yorumlarda bu basit bir komut olduğunu git diff-indexonun için çalıştı:
git update-index --refresh
git diff-index --quiet HEAD --
( Nornagon bahseder yorumlarda içerikleri endeksinde aynıdır dokundu edilmiş dosyalar, ancak varsa, çalıştırmak gerekir git update-index --refreshönce git diff-index, aksi takdirde diff-indexyanlış ağaç kirli olduğunu bildirir)
Daha sonra bash komut dosyasında kullanıyorsanız " Bir komutun başarılı olup olmadığını nasıl kontrol edersiniz ? "
git diff-index --quiet HEAD -- || echo "untracked"; // do something about it
Not: Anthony Sottile tarafından yorumlandığı gibi
git diff-index HEAD ...taahhütleri olmayan bir dalda başarısız olur (yeni başlatılan bir depo gibi).
Bulduğum bir geçici çözümgit diff-index $(git write-tree) ...
Ve haridsvPuan yorumlarda olduğu git diff-filesbir üzerine yeni dosyanın bir fark olarak algılamaz.
Daha güvenli yaklaşım git add, önce dosya spec üzerinde çalışıyor ve daha sonra git diff-indexçalıştırmadan önce dizine bir şey eklenip eklenmediğini görmek için kullanılıyor git commit.
git add ${file_args} && \
git diff-index --cached --quiet HEAD || git commit -m '${commit_msg}'
Ve 6502 yorumlarda raporlar:
Ben çarptım bir sorun git diff-index, gerçekten zaman damgaları dışında hiçbiri olmadığında farklılıklar olduğunu söyleyecektir. Bir kez
koşmak git diffsorunu çözer (şaşırtıcı bir şekilde git diff, sanal alanın içeriğini değiştirir, yani burada .git/index)
Bu zaman damgası sorunları, git docker'da çalışıyorsa da oluşabilir .
Orijinal cevap:
"Programlı" hiçbir zaman porselen komutlarına güvenmemek anlamına gelir .
Daima tesisat komutlarına güvenin .
Alternatifler için " Git ile kirli bir dizini veya izlenmemiş dosyaları kontrol etme " konusuna da bakın (örneğin git status --porcelain)
Konuştuğumuz gibi yazılan yeni " require_clean_work_treeişlev " den ilham alabilirsiniz ;) (Ekim 2010 başı)
require_clean_work_tree () {
# Update the index
git update-index -q --ignore-submodules --refresh
err=0
# Disallow unstaged changes in the working tree
if ! git diff-files --quiet --ignore-submodules --
then
echo >&2 "cannot $1: you have unstaged changes."
git diff-files --name-status -r --ignore-submodules -- >&2
err=1
fi
# Disallow uncommitted changes in the index
if ! git diff-index --cached --quiet HEAD --ignore-submodules --
then
echo >&2 "cannot $1: your index contains uncommitted changes."
git diff-index --cached --name-status -r --ignore-submodules HEAD -- >&2
err=1
fi
if [ $err = 1 ]
then
echo >&2 "Please commit or stash them."
exit 1
fi
}