Git update-index'i geri al --ozum-değişmemiş <file>


464

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.)


5
Git-performans sorunu sizin probleminiz olmadıkça, atlama-çalışma ağacının, varsayım-değişmeden kullanmaktansa daha iyi olacağına benzediğini söyleyen bir not. stackoverflow.com/questions/13630849/…
GreenAsJade

Yanıtlar:


588

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'


7
İlk harf etiketi 'H' / 'h' dışındaki harfler olabileceğinden, grep ifadenizde küçük bir iyileştirme yapıldığı için, yok sayılan tüm dosyaları yakalamak için '^ [az]' kullanılabilir. Gönderen git-scm.com/docs/git-ls-files : Bu seçenek tanımlar her satırın başında, aşağıdaki etiketlerle (ardından bir boşluk) ile dosya durumu: H :: önbelleğe S :: atlama-worktree M: : unmerged R :: kaldırıldı / silindi C :: değiştirildi / değiştirildi K :: öldürülecek mi? :: diğer
Bdoserror

8
Bir başka yararlı numara, git ls-files -v|grep '^h'|cut -c3-"h" öneki olmadan size sadece dosya adları verecek.
14:59, Retsam

9
Eğer dosyaları artık bilmiyorsanız assume-unchanged, sadece kullanın git update-index --really-refresh. Bu komutla, önce dosyaları aramanıza gerek yoktur git ls-files.
theDmi

104

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 .gitconfigdaha 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-

2
Bu takma ad da kullanışlıdır:hidden = ! git ls-files -v | grep '^h' | cut -c3-
seanf

42

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 --really-refresh, yaptığım varsayımları değiştirmeden geri al, bahşiş için teşekkürler
Sérgio

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.
Çağatay Ulubay

38

Öyle demek istediğimi --assume-unchangedsanıyorum çünkü herhangi bir --assume-changedseçenek göremiyorum . Ters --assume-unchangedDİR --no-assume-unchanged.


32

@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ü .gitconfigkullanı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-

1
Bunun için 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-
seanf

1
--really-refreshdizin dosyalarındaki varsayım değiştirmeyen bayrakları temizlemez (ya da artık yapmaz, belki de bir kez yapmıştır).
torek

Teşekkürler @torek! Açıkladığınız davranışı onayladım ve yanıtı "Tümünü sıfırla" durumuna farklı bir çözümle güncelledim.
Cain

20

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
  1. git ls-files -v tüm dosyaları durumlarıyla birlikte basar
  2. grep '^[a-z]' dosyaları filtreleyecek ve yalnızca değişmediğini varsayalım
  3. cut -c 3- durumu kaldıracak ve yalnızca yolları bırakacak, 3. karakterden sonuna kadar kesecek
  4. tr '\012' '\000' satır sonu karakterini (\ 012) sıfır karakterine (\ 000) değiştirir
  5. xargs -0 git update-index --no-assume-unchangedgit update-index --no-assume-unchangedgeri almak için sıfır karakterle ayrılmış tüm yolları geçirir

Bu çok faydalı. Ayrıntılı bilgi için teşekkürler!
Chamithra Thenuwara

11

Ekleme @adardesignEğer eklenmiştir tüm dosyaları sıfırlamak istiyorsanız, yanıt 'ın assume-unchangedlistede no-assume-unchangedtek 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 || trueolarak döngüdeki bazı dosyalarda hata olması durumunda komutun erken sonlanmasını önler.


4

Git Uzantıları kullanıyorsanız , aşağıdaki adımları izleyin:

  1. İşlem penceresine gidin.
  2. Çalışma dizini değişiklikleri adlı açılır menüyü tıklayın .
  3. Seç göster assummed-değişmeden dosyaları seçeneği.
  4. Açmak istediğiniz dosyayı sağ tıklayın.
  5. Değişmeyen varsayım yap'ı seçin .

Bitirdiniz.


0

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.


.gitignoreYapı yapılarınızı görmezden gelmek için kullanmaktan fayda sağlayacağınızı düşünüyorum .
Nick

1
Ben var .gitignoreama bu bazen, benim deneyimimde yeterli değil. Ama bunu söylediğiniz bağlamı anlıyorum.
Tyagi Akhilesh

0

Çözümlerin hiçbiri Windows'ta benim için işe yaramadı - dosya durumu Hyerine sermaye kullanıyor gibi görünüyor hve 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ü

  1. Git Bash'i açın ve ilgili üst düzey dizine geçin.
  2. git ls-files -v | grep '^^H' önbelleğe alınmamış tüm dosyaları listelemek için
  3. git 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
  4. 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
  5. 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

-1

Tutulma kullanıyorsanız aşağıdakileri yararlı bulabilirsiniz:

tutulma ile değişmeden varsayım yok


1
neden inişler lütfen?
Antonio
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.