Bir süre önce git tarafından izlenen bir dosyadaki değişiklikleri yoksaymak için bunu yaptım:
git update-index --skip-worktree <file>
Şimdi aslında bu dosyada kaynak değişiklik yapmak istiyorum. Etkilerini nasıl geri alabilirim skip-worktree
?
Bir süre önce git tarafından izlenen bir dosyadaki değişiklikleri yoksaymak için bunu yaptım:
git update-index --skip-worktree <file>
Şimdi aslında bu dosyada kaynak değişiklik yapmak istiyorum. Etkilerini nasıl geri alabilirim skip-worktree
?
Yanıtlar:
Aha! Sadece istiyorum:
git update-index --no-skip-worktree <file>
Http://www.kernel.org/pub/software/scm/git/docs/git-update-index.html adresine göre ,
git ls-files -v
özel bir harfle işaretlenmiş "değişmediğini varsay" ve "atlama-çalışma ağacı" dosyalarını görmek için. "Skip-worktree" dosyaları ile işaretlenir S
.
Düzenleme : @amacleod belirtildiği gibi, tüm gizli dosyaları listelemek için bir takma ad yapmak hatırlamak gerekmez böylece sahip olmak için güzel bir hile. Kullandığım alias hidden="git ls-files -v | grep '^S'"
benim .bash_profile dosyasına. Harika çalışıyor!
git ls-files -v | grep '^S'
Sadece skip-worktree ile "gizlediğim" dosyaları listelemek için kullanabilirsiniz . Bu komut için bir takma adı "gizli" hale getirmeyi umuyordu, ancak takma ada bir boru yönlendirmesi koymak işe yaramadı.
!
. Bunun gibi [alias] ignored = !git ls-files -v | grep "^S"
Test edildi, çalışıyor.
grep
bilmiyorum. Kabuğuna bağlı, sanırım. Git Bash geliyor grep
, sanırım.
'
işe yaramadı ama "
yaptım, yanigit ls-files -v | grep "^S"
Uygulanan tüm dosyaları geri almak için worktree atlayın, aşağıdaki komutu kullanabilirsiniz:
git ls-files -v | grep -i ^S | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-skip-worktree
git ls-files -v
tüm dosyaları durumlarıyla birlikte basargrep -i ^S
dosyaları filtreler ve yalnızca çalışma ağacını (S) atla veya çalışma ağacını atla'yı seçer ve değişmez (ler) değerini alır, -i büyük / küçük harfe duyarlı sayılırcut -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-skip-worktree
git update-index --no-skip-worktree
geri almak için sıfır karakterle ayrılmış tüm yolları geçirir@ GuidC0DE cevabına göre, Powershell için bir sürüm ( posh-git kullanıyorum )
git update-index --no-skip-worktree $(git ls-files -v | sls -pattern "^S"| %{$_.Line.Substring(2)})
Ve referans için ayrıca dosyaları gizlemek için ters komut:
git update-index --skip-worktree $(git ls-files --modified)
Tortoise Git kullananlar için:
TortoiseGit > Check for modifications
Show ignore local changes flagged files
. Yok saydığınız dosyayı (veya klasörü sağ tıkladıysanız yoksaydığınız tüm dosyaları) görmelisiniz.Unflag as skip-worktree and assume-unchanged
Bash takma adlarını seven herkes için, işte hepsini yönetme setim (C0DEF52'ye göre)
alias gitskip='git update-index --skip-worktree ' #path to file(s)
alias gitlistskiped='git ls-files -v | grep ^S'
alias gitunskip='git update-index --no-skip-worktree ' #path to file(s)
alias gitunskipall='git ls-files -v | grep -i ^S | cut -c 3- | tr ''\\012'' ''\\000'' | xargs -0 git update-index --no-skip-worktree'
Bu cevap Windows'u kullanan daha az teknik kişiye yöneliktir.
"Skip-worktree" yi tıkladığınız dosyaları hatırlamıyor / bilmiyorsanız, şunu kullanın:
git ls-files -v //This will list all files, you are looking for the ones with an S at the beginning of the line.
git ls-files -v | grep "S " //Use this to show only the lines of interest. Those are the files that have "skip-worktree".
Sorununuzu çözmek için:
Dosyalara gidebilirsiniz -> sağ tıklayın -> önceki bir sürüme geri yükleyin -> üstteki "git" sekmesine tıklayın -> "atlama-worktree" onay kutusunun işaretini kaldırın -> alttaki "Uygula" ya tıklayın.
Dosyalar elle düzeltmek için çok fazla ise, diğer cevaplara başvurmanız gerekir.