git update-index --assume-unchanged, "dosya işaretlenemiyor ölümcül" döndürür


133

Bu gönderideki OP ile aynı sorunu yaşıyorum , ancak doğru olarak işaretlenen yanıtı anlamıyorum (durumu nasıl düzelteceğimi açıkladığını görmüyorum)

Bunu yapıyorum ve şu hatayı alıyorum:

$ git update-index --assume-unchanged web.config
fatal: Unable to mark file web.config
  1. Dosya arşive eklenir

  2. İçinde DEĞİL .git/info/exclude

  3. İçinde DEĞİL .gitignore(öyleydi, ancak çıkardım, sonra web.config'i kullanarak eklenmeye git add -f web.config, işlenmeye ve bu değişiklikleri depoya itmeye zorladım )

  4. Git ls-files -o yaptığımda orada DEĞİL

Peki düzeltmek için ne yapabilirim?


1
Referans verilen soruda kabul edilen cevabı tekrar okuyun: çıkışında YER ALMAYACAKTIR git ls-files -o. Eğer öyleyse, depoda yok.
32'de eckes

yazım hatası, listede DEĞİL ve kesinlikle depoda
Karen

Yanıtlar:


108

Ben de sizinle aynı sorunu yaşıyordum ve yukarıda belirttiğiniz aynı dört adımı izlemiştim ve aynı sonuçları almıştım. Buna dosyamın çalıştırılırken listelenmiş olması da dahildi git ls-files -o. Ancak benim durumumda, yürütülürken git update-index --assume-unchangedlistelenmeyen bir dosyaya karşı da yürütmeyi denedim ls-files -ove yine de aynı hatayı alıyorum "fatal: Unable to mark file ".

Bunun bir hata olduğunu düşündüm ve git'in son sürümünü indirdim, ancak bu yardımcı olmadı.

Sonunda anladığım şey, bu komutun büyük / küçük harfe duyarlı olduğu! Bu, tam yolu ve dosya adını içerir. Tam yolun uygun büyük / küçük harflerle belirtilmesi için dizine giden yolu güncelledikten sonra, komut düzgün şekilde yürütüldü.

Bunun Windows için Git ile yapıldığını, dolayısıyla sonuçlarınızın diğer platformlarda değişiklik gösterebileceğini unutmayın.


4
SOOOO çok teşekkür ederim! Bu işe yaradı! Sanırım daha önce tüm küçük harfleri kullanıyordum veya klasöre cd yazdım ve sonra bu komutu kullanmaya çalıştım.
Karen

Dosya değişecekse bu yanlıştır. Komut, kullanıcı tarafından Git'e, dosyanın değişip değişmediğini tespit etmek için döngüleri boşa harcamak zorunda olmadığına dair bir sözdür (yavaş dosya sistemleri için ;-). Sonunda Git komutlarından biri fark edecek ve şaşıracaksınız. Bunu açıklığa kavuşturmak için belgeler güncelleniyor.
Philip Oakley

1
Teşekkürler, bu dolaylı olarak bir projede bazı kötü kabuk komut dosyası keşfetmeme yardımcı oldu. Bir yol yoksa, bu başarısız olur! :)
uchuugaka

Ayrıca, bu komutun sürümsüz dosyalar için çalışmayacağını unutmayın. Depoda olmayan bir dosyanız varsa, .gitignore içinde göz ardı edilebilir ve oğlum bunu yazarken kendimi aptal gibi hissediyorum ama benim kadar aptal birine yardımcı olabileceğini düşündüm. :)
Jesse Ivy

Sadece bazı yorumların neye işaret ettiğini açıklığa kavuşturmak için, cd'lerinizdeki durum uyuşmazlığından kurtulmanıza izin veren bir Windows kabuğu kullanıyorsanız, bu hatayı alacaksınız. Git'e dosyanın tam yolunu verin (doğru büyük / küçük harfle) ya da cd yedekleyin ve sonra tekrar aşağıya çekin (yine, her aşamada doğru durumla).
dlf

54

Mac'te de aynı sorunu yaşıyordum. Büyük / küçük harfe duyarlılık benim için bir sorun değildi - sorun önce git'imi sıfırlamam gerekti:

Sorun:

 git update-index --assume-unchanged index.php
 fatal: Unable to mark file index.php

Çözüm:

git reset HEAD
Unstaged changes after reset:
M   index.php
git update-index --assume-unchanged index.php

2
Mac'te de aynı sorunu yaşıyorum ve önerilen geçici çözümlerden hiçbiri benim için işe yaramadı. Herhangi bir fikir? Yalnızca makinemde bir dizini geçici olarak izlemeyi durdurmaya çalışıyorum, dizinin adı intellij_idea_project_files /. Görünüşe göre bu dizindeki tüm dosyalar biri dışında düzgün bir şekilde işaretlenmiş ve bu benim_proje_adım.iml.
Javad Sadeqzadeh

1
aynı sorunu yaşadı ve benim için işe
yarayan çözüm buydu, büyük /

Ben de Mac kullanıyorum ve benim için "çözüm" dosyayı silmekti. (Bunu bir cevap olarak gönderirdim ama ne olduğundan emin değilim, belki daha sonra.) Tuhaf bir şey oldu. Git dosyanın değiştirildiğini söylüyordu (ben istedim --skip-worktree). Çalıştırarak yerel değişikliklerden kurtuldum git restore .ama yine de atla hata verdi. Sonunda dosyayı silmeyi denedim. Şaşırtıcı bir şekilde, git bir değişiklik olduğunu söylemedi. Açıkçası git kesinlikle onu takip ettiğinden beri garip bir şey oldu ve kesinlikle sildim ve kesinlikle bunun bir değişiklik olduğunu söylemedi.
Kaptan Adam

25

Benim durumumda, işaretlediğim ağaç bir dizindi, sizin durumunuzdaki gibi bir dosya değil ve adından sonra eğik çizgi eksikti.

Yanlış -

git update-index --assume-unchanged directory-name

Doğru -

git update-index --assume-unchanged directory-name/

Not sonunda eğik çizgi (/).


1
Teşekkürler, ama bunu yaptığımda "yol dizini-adı / yoksayılıyor" mesajı alıyorum
damian

@damian Ana dizin yerine tam dosya yolunu belirtin.
Nahid

6

ölümcül: Dosya Yerelleştirme / el-GR.js işaretlenemiyor

Yapabilecekleriniz:

  1. Dosyanın yerelde bulunduğu doğru yola gidin (GITBASH'da)
  2. Dizini güncelleyin $git update-index --assume-unchanged <file name>

Bu bana yardımcı oldu! :)


2
$ git update-index --assume-unchanged ./.idea/vcs.xml fatal: Unable to mark file .idea/vcs.xml $ cd .idea git update-index --assume-unchanged .Çalıştı, teşekkürler!
AVProgrammer

4

Yolunuzda boşluklar varsa, büyük / küçük harfe sahip olsanız bile bu hatayı alabilirsiniz.

Bu, "önemli" hataya neden olur:

git update-index --assume-unchanged code/Solution Files/WebEssentials-Settings-json

Düzeltmek için yolun etrafına tırnak işareti eklemeniz yeterlidir.

git update-index --assume-unchanged "code/Solution Files/WebEssentials-Settings-json"

Benim durumumda / geri aldım.
Erik Bergstedt

4

Benim Sorunum, komutu özyinelemeli olacağını varsayarak * joker karakterle denedim, ama öyle değildi.

Yani yaptığım şey

$ git reset HEAD
Unstaged changes after reset: 
M   .gradle/1.9/taskArtifacts/cache.properties.lock
M   .gradle/1.9/taskArtifacts/fileHashes.bin
M   .gradle/1.9/taskArtifacts/fileSnapshots.bin
M   .gradle/1.9/taskArtifacts/outputFileStates.bin
M   .gradle/1.9/taskArtifacts/taskArtifacts.bin

yürütme

$ git update-index --assume-unchanged .gradle/1.9/taskArtifacts/*

o zaman benim için çalıştı ve OP'lere ve sorunuma neden olmadı.


4

* .Orig dosyalarını izlemeye çalışırken bu sorunu yaşadım.

Bu onların izini sürmek için yaptığım şey:

$git reset -- *.orig

bu işe yaramazsa:

$git clean -fd

5
İnsanlardan, bu komutun dosyaları sileceğini söylemeden komut çalıştırmalarını istemek tehlikelidir. $ git clean -fd
HS Rathore

4

Dosyanın git repo'ya eklendiğinden emin olun, eğer dosyayı git repo'ya eklemezseniz çalışacaktır.


3

--assume-unchangedyavaş dosya sistemleri hakkındadır ve bir kullanıcı Git'in bu dosyayı kontrol etmesine gerek olmadığına söz verir, çünkü Git'in değişmediğini varsayabilir. Ancak bazı komutlar hala kontrol ediyor ve 'sürpriz' üretiyor!

Değişen dosyalarda kullanmayın.

Bu haberi getirdiğim için özür dilerim (bu dokümantasyonu değiştirmek için bir yamam var).


1
Öyleyse, bir dosyayı 'beni izleme' olarak işaretlemek için nasıl güncellenebilir?
javadba

@javadba bkz stackoverflow.com/a/6964492/717355 'git rm --cached filename'
Philip Oakley

thx - buna olumlu oy verildi: Aslında buraya gönderdikten hemen sonra onu kullandım. İşler.
javadba

git rm --cached filenamediğerleri çektiğinde dosyanın silineceğini unutmayın
Ryan Taylor

@RyanTaylor evet, kullanıcıların komutlarının ne dediğini anlamaları önemlidir, bu 'bunu izlemeyi bırak, düzeltmelerimden kaldır'. Bakımcının
Philip Oakley

3

Benim durumumda yukarıdaki yöntemlerden herhangi birini kullanmaya çalıştım ama şansım olmadı.

Birçok denemeden sonra, dosyamı dizine eklemeyi düşündüm.

git add myfile.php

Git bu eylemi reddetti ama bana bunu zorla yapmamı tavsiye etti.

git add myfile.php -f

Ve bu benim için çalıştı.


2

"Web.config" i işaretlediğinizden emin olun.

Değilse, bu hata mesajını alırsınız.


1

Belki birisi için yararlıdır. Aynı sorunu yaşadım ve sözdizimi sorunu yoktu, boşluklu isim yok, yol sorunu yok ve git reset komutu işe yaramadı. Apache www içindeki bir klasörden işlem yapıyordum ve apache hizmeti durduruldu. Apache hizmeti yeniden başlatıldı ve hata gitti


1

Bu komutu kullanırken sık karşılaşılan bir hata, dosyanın izlenmediğini veya git tarafından zaten yok sayıldığını varsaymaya çalışmaktır.

Önce dosyanın şu şekilde izlendiğinden emin olun:

git ls-files | grep relative_path/to/file

Dosyanızı göstermiyorsa, önce eklemeniz gerekir:

git add relative_path/to/file

Bu, dosyanızı gösteriyorsa veya bu dosyayı daha önce git'e eklediyseniz, git assume komutlarını normal şekilde çalıştırabilmelisiniz:

git update-index --skip-worktree relative_path/to/file

veya klasörler için

git update-index --skip-worktree relative_path/to/folder/

çalıştırarak dosyanızın yok sayılacağını kontrol edebilirsiniz.

git ls-files -v | grep ^S

S karakteri atlanan dosyaları temsil eder.


0

Gelecekteki tüm ziyaretçiler için. Yukarıdakilerin hiçbiri sorunumu çözmedi. Farkına vardığım şey, .gitignoredosyanın doğru dizine yerleştirilmesi gerektiğidir. Benim durumumda, .gitignoreuygulamanın kök dizinine taşındıktan sonra sorun çözüldü.


0

İşaretlenecek dosyanın var olup olmadığını ve özellikle dosya yolu ve dosya ayırıcıyı doğru yazıp yazmadığını kontrol edin. Windows sistemi ve linux sisteminin dosya ayırıcıları farklı yönlerdedir.


1
Yanlış olmasa da, bu cevap soruya hiçbir şey katmıyor. Tüm önerileriniz zaten mevcut cevaplarda gündeme getirildi.
Matt

0

Dosyayı zaten .gitignore dosyanıza kaydettiğiniz ve itme veya çekme yaptığınız için bazen bunun işe yaramadığını fark ettim. Dosyayı yerel olarak değiştirseniz bile, yalnızca itme yapmanız gerekir ve dosyanızın sonraki işlemlerde yok sayılması gerekir.


0

Cygwin ile aynı sorunu pencerelerde yaşadım. Tam dosya yolunu vermek

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.