Git'in belirli bir dizin / dosyayı izlemeyi / izlemeyi yoksayma biçimi. sadece bunu çalıştırın:
git update-index --assume-unchanged <file>
Şimdi nasıl izlenir, böylece tekrar izlenirler? (Varsaymayın diyelim.)
Git'in belirli bir dizin / dosyayı izlemeyi / izlemeyi yoksayma biçimi. sadece bunu çalıştırın:
git update-index --assume-unchanged <file>
Şimdi nasıl izlenir, böylece tekrar izlenirler? (Varsaymayın diyelim.)
Yanıtlar:
Değiştirilmeyecek şekilde ayarlanmış geri alma / show dir / dosyalarını almak için şunu çalıştırın :
git update-index --no-assume-unchanged <file>
Bunu assume-unchanged
çalıştıran dizinlerin / dosyaların bir listesini almak için :
git ls-files -v|grep '^h'
git ls-files -v|grep '^h'|cut -c3-
"h" öneki olmadan size sadece dosya adları verecek.
assume-unchanged
, sadece kullanın git update-index --really-refresh
. Bu komutla, önce dosyaları aramanıza gerek yoktur git ls-files
.
Bu sık kullandığınız bir komutsa - bunun için de bir takma ad kullanmayı düşünebilirsiniz. Globalinize ekleyin .gitconfig
:
[alias]
hide = update-index --assume-unchanged
unhide = update-index --no-assume-unchanged
Takma ad nasıl ayarlanır (henüz bilmiyorsanız):
git config --configLocation alias.aliasName 'command --options'
Misal:
git config --global alias.hide 'update-index --assume-unchanged'
git config... etc
Bunu kendinize kaydettikten sonra .gitconfig
daha temiz bir komut çalıştırabilirsiniz.
git hide myfile.ext
veya
git unhide myfile.ext
Bu git belgeleri çok yardımcı oldu.
Yorumlara göre, bu da şu anda hangi dosyaların gizlendiğini bulmak için yararlı bir takma addır:
[alias]
hidden = ! git ls-files -v | grep '^h' | cut -c3-
hidden = ! git ls-files -v | grep '^h' | cut -c3-
git update-index işlevi yazmayı aşağıdaki gibi bulabileceğiniz birkaç seçeneğe sahiptir:
git update-index --help
Burada çeşitli seçenekler bulacaksınız - güncelleme dizini ile nasıl başa çıkılacağı.
[dosya adını bilmiyorsanız]
git update-index --really-refresh
[dosya adını biliyorsanız]
git update-index --no-assume-unchanged <file>
yoksayma listesine eklenen tüm dosyaları geri alır.
git update-index --assume-unchanged <file>
git update-index --no-assume-unchanged <file>
hayatımı kurtardı .. tamam, sadece klasörü tekrar senkronize edebilirdim, ama bu sorun için "gerçek" bir çözüm istedim.
@Arafesign, @adswebwork ve @AnkitVishwakarma'dan gelen orijinal orijinal cevapları ve @Bdoserror, @Retsam, @seanf ve @torek'in yorumlarını ek dokümantasyon bağlantıları ve kısa takma adlarla sentezlemek için ...
Temel Komutlar
İçin bir dosya sıfırlama olduğunu varsayalım-değişmeden normale geri:
git update-index --no-assume-unchanged <file>
Varsayılmayan tüm dosyaları listelemek için :
git ls-files -v | grep '^[a-z]' | cut -c3-
İçin tüm sıfırlamak varsayalım-değişmeden dosyaları normale geri:
git ls-files -v | grep '^[a-z]' | cut -c3- | xargs git update-index --no-assume-unchanged --
Not: Başka bir yerde listelenen bu komut artık varsayım değiştirilmemiş tüm dosyaları sıfırlamak için görünmüyor (Ben eskiden ve daha önce bir çözüm olarak listelendiğine inanıyorum):
git update-index --really-refresh
Kısayollar
Git'te bu yaygın görevlerin yürütülmesini kolaylaştırmak için, aşağıdaki takma adı bölümünü .gitconfig
kullanıcınıza ekleyin / güncelleyin (örn ~/.gitconfig
. * Nix veya macOS sisteminde):
[alias]
hide = update-index --assume-unchanged
unhide = update-index --no-assume-unchanged
unhide-all = ! git ls-files -v | grep '^[a-z]' | cut -c3- | xargs git update-index --no-assume-unchanged --
hidden = ! git ls-files -v | grep '^[a-z]' | cut -c3-
git hidden
, kabuk takma adları veya komut dosyaları olmadan, şu şekilde kullanarak aynı etkiyi elde edebilirsiniz !
:hidden = ! git ls-files -v | grep '^h' | cut -c3-
--really-refresh
dizin dosyalarındaki varsayım değiştirmeyen bayrakları temizlemez (ya da artık yapmaz, belki de bir kez yapmıştır).
Uygulanan tüm dosyaları geri almak istiyorsanız, yalnızca önbelleğe alınmış değil, herhangi bir durumla değişmediğini varsayalım (git bunları küçük harfle karakter olarak işaretler), aşağıdaki komutu kullanabilirsiniz:
git ls-files -v | grep '^[a-z]' | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-assume-unchanged
git ls-files -v
tüm dosyaları durumlarıyla birlikte basargrep '^[a-z]'
dosyaları filtreleyecek ve yalnızca değişmediğini varsayalımcut -c 3-
durumu kaldıracak ve yalnızca yolları bırakacak, 3. karakterden sonuna kadar kesecektr '\012' '\000'
satır sonu karakterini (\ 012) sıfır karakterine (\ 000) değiştirirxargs -0 git update-index --no-assume-unchanged
git update-index --no-assume-unchanged
geri almak için sıfır karakterle ayrılmış tüm yolları geçirirEkleme @adardesign
Eğer eklenmiştir tüm dosyaları sıfırlamak istiyorsanız, yanıt 'ın assume-unchanged
listede no-assume-unchanged
tek seferde, aşağıdakileri yapabilirsiniz:
git ls-files -v | grep '^h' | sed 's/^..//' | sed 's/\ /\\ /g' | xargs -I FILE git update-index --no-assume-unchanged FILE || true
Bu sadece grep'ten çıkan iki karakteri çıkarır "h "
, daha sonra dosya adlarında mevcut olabilecek boşluklardan kaçar ve son || true
olarak döngüdeki bazı dosyalarda hata olması durumunda komutun erken sonlanmasını önler.
Git Uzantıları kullanıyorsanız , aşağıdaki adımları izleyin:
Bitirdiniz.
Burada kapsanan hiçbir şey yok. Ama 2 sent eklemek istiyorum. Bazen bir yapı çalıştırıyorum ve çok fazla dosya değiştiriyor ve sonra bir şey üzerinde çalışmak istiyorum, bu yüzden bu komut bana gerçekten çok yardımcı oluyor.
git update-index --assume-unchanged `git status | grep modified | sed 's|modified:||g'| xargs`
Umarım başka biri de faydalı bulmaktadır.
.gitignore
Yapı yapılarınızı görmezden gelmek için kullanmaktan fayda sağlayacağınızı düşünüyorum .
.gitignore
ama bu bazen, benim deneyimimde yeterli değil. Ama bunu söylediğiniz bağlamı anlıyorum.
Çözümlerin hiçbiri Windows'ta benim için işe yaramadı - dosya durumu H
yerine sermaye kullanıyor gibi görünüyor h
ve grep komutu ^
, satırın başlangıcını ve bir sonraki karakteri de reddetmek için ekstra bir düzeltme gerektiriyor .
Windows çözümü
git ls-files -v | grep '^^H'
önbelleğe alınmamış tüm dosyaları listelemek içingit ls-files -v | grep '^^H' | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-skip-worktree
üzerinden yapılan tüm dosyaları atlayarak dosyaları geri almak için update-index --skip-worktree
git ls-files -v | grep '^^H]' | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-assume-unchanged
üzerinden yapılan tüm dosyaları atlayarak dosyaları geri almak için update-index --assume-unchanged
git ls-files -v | grep '^^H'
önbelleğe alınmamış tüm dosyaları tekrar listelemek ve yukarıdaki komutların çalışıp çalışmadığını kontrol etmek için - bu artık hiçbir şey döndürmemelidir