git update-index --assume-tidak berubah mengembalikan "fatal tidak dapat menandai file"

133

Saya mengalami masalah yang sama dengan OP pada posting ini , tetapi saya tidak mengerti jawaban yang ditandai sebagai benar (saya tidak melihat bahwa itu menjelaskan bagaimana cara memperbaiki situasi)

Saya melakukan ini dan mendapatkan kesalahan ini:

$ git update-index --assume-unchanged web.config
fatal: Unable to mark file web.config
  1. File IS ditambahkan ke repositori

  2. TIDAK di .git/info/exclude

  3. Ini BUKAN di .gitignore(itu, tapi saya mengambilnya, lalu memaksa web.config untuk ditambahkan menggunakan git add -f web.config, berkomitmen, dan mendorong perubahan itu ke repo)

  4. Ketika saya melakukan Git ls-file -o itu TIDAK ada di sana

Jadi apa yang bisa saya lakukan untuk memperbaikinya?

Karen
sumber
1
baca kembali jawaban yang diterima dalam pertanyaan yang dirujuk: itu TIDAK akan muncul di output dari git ls-files -o. Jika demikian, itu tidak ada dalam repo.
eckes
kesalahan ketik saya, itu TIDAK ada dalam daftar, dan itu pasti di repo
Karen

Jawaban:

108

Saya mengalami masalah yang sama dengan Anda, dan telah mengikuti empat langkah yang sama seperti yang Anda sebutkan di atas, dan memiliki hasil yang sama. Ini termasuk fakta bahwa file saya terdaftar saat menjalankan git ls-files -o. Namun dalam kasus saya, saya juga mencoba mengeksekusi git update-index --assume-unchangedterhadap file yang tidak terdaftar ketika mengeksekusi ls-files -o, dan saya masih menerima kesalahan yang sama " fatal: Unable to mark file".

Saya pikir mungkin itu adalah bug, dan mengunduh versi terbaru git, tetapi ini tidak membantu.

Yang akhirnya saya sadari adalah bahwa perintah ini peka terhadap huruf besar-kecil! Ini termasuk path lengkap dan nama file. Setelah memperbarui jalur ke direktori sehingga path lengkap ditentukan dengan casing yang tepat, perintah dijalankan dengan benar.

Perhatikan bahwa ini dengan Git untuk Windows, jadi hasil Anda mungkin berbeda dengan platform lain.

David Marchelya
sumber
4
SOOOO terima kasih banyak! Ini berhasil! Saya pikir saya menggunakan semua huruf kecil sebelumnya, atau cd ke folder dan kemudian mencoba menggunakan perintah ini.
Karen
Jika file akan berubah maka ini salah. Perintah itu adalah janji, oleh pengguna, untuk Git, bahwa ia tidak harus membuang siklus menyatakan file untuk mendeteksi jika telah berubah (untuk sistem file lambat ;-). Akhirnya salah satu perintah Git akan memperhatikan dan Anda akan terkejut. Dokumentasi sedang diperbarui untuk memperjelas ini.
Philip Oakley
1
Terima kasih, ini secara tidak langsung membantu saya menemukan beberapa skrip shell yang buruk dalam sebuah proyek. Jika jalan tidak ada, ini akan gagal! :)
uchuugaka
Perhatikan juga bahwa perintah ini tidak akan berfungsi untuk file yang tidak berversi. Jika Anda memiliki file yang tidak ada di repositori, file itu dapat diabaikan di .gitignore, dan bocah saya merasa konyol mengetik ini, tetapi saya pikir itu mungkin membantu seseorang sebodoh saya. :)
Jesse Ivy
Hanya untuk mengklarifikasi apa yang telah diindikasikan oleh beberapa komentar, jika Anda menggunakan shell Windows yang memungkinkan Anda untuk lolos dengan ketidaksesuaian kasus dalam cd Anda, Anda akan mendapatkan kesalahan ini. Entah berikan path lengkap ke file (dengan case yang benar), atau cd kembali ke atas dan ke bawah lagi (lagi, dengan case yang benar di setiap tahap).
dlf
54

Saya mengalami masalah yang sama pada Mac. Sensitivitas case bukan masalah bagi saya - masalahnya adalah saya harus mereset git saya terlebih dahulu:

Masalah:

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

Larutan:

git reset HEAD
Unstaged changes after reset:
M   index.php
git update-index --assume-unchanged index.php
Toby Beresford
sumber
2
Saya mengalami masalah yang sama pada Mac, dan tidak ada solusi yang disarankan yang berfungsi untuk saya. Ada ide? Saya mencoba untuk berhenti melacak direktori sementara di komputer saya saja, nama dir adalah intellij_idea_project_files /. Rupanya semua file dalam direktori ini telah ditandai dengan benar kecuali satu, dan itu adalah my_project_name.iml.
Javad Sadeqzadeh
1
punya masalah yang sama dan ini adalah solusi yang bekerja untuk saya, bukan yang sensitif terhadap kasus
CesarPim
Saya juga menggunakan Mac dan bagi saya "solusi" adalah menghapus file. (Saya akan memposting ini sebagai jawaban tetapi saya tidak yakin apa yang terjadi, mungkin nanti.) Sesuatu yang aneh terjadi. Git mengatakan file itu diubah (saya ingin --skip-worktree). Saya menyingkirkan perubahan lokal dengan menjalankan git restore .tetapi melewatkan masih memberi kesalahan. Akhirnya saya mencoba menghapus file tersebut. Yang mengejutkan, git tidak mengatakan ada perubahan. Jadi jelas sesuatu yang funky telah terjadi sejak git benar-benar melacaknya dan saya pasti menghapusnya dan jelas tidak mengatakan bahwa itu adalah perubahan.
Kapten Man
25

Dalam kasus saya, pohon yang saya tandai adalah direktori, dan bukan file seperti dalam kasus Anda, dan saya kehilangan garis miring di depan namanya.

Salah -

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

Benar -

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

Perhatikan garis miring (/) pada akhirnya.

Sahil Singh
sumber
1
Terima kasih, tetapi ketika saya melakukan ini saya mendapatkan "Mengabaikan direktori-nama jalan /"
damian
@damian Tentukan path file lengkap alih-alih direktori induk.
Nahid
6

fatal: Tidak dapat menandai Pelokalan file / el-GR.js

Yang dapat Anda lakukan adalah:

  1. Pindah ke jalur yang benar di mana file hadir di lokal Anda (di GITBASH)
  2. Perbarui indeks $git update-index --assume-unchanged <file name>

Ini membantu saya! :)

Grace Aloysius
sumber
2
$ git update-index --assume-unchanged ./.idea/vcs.xml fatal: Unable to mark file .idea/vcs.xml $ cd .idea git update-index --assume-unchanged .Bekerja, terima kasih!
AVProgrammer
4

Jika jalur Anda memiliki spasi, Anda mungkin mendapatkan kesalahan ini meskipun casingnya benar.

Ini menghasilkan kesalahan "fatal":

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

Untuk memperbaikinya, cukup tambahkan kutipan di sekitar jalan.

git update-index --assume-unchanged "code/Solution Files/WebEssentials-Settings-json"
Jon Crowell
sumber
Dalam kasus saya, saya memiliki / mundur.
Erik Bergstedt
4

Masalah saya adalah, bahwa saya mencoba perintah dengan * wildcard dengan asumsi itu akan bersifat rekursif, tetapi ternyata tidak.

Jadi yang saya lakukan adalah

$ 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

mengeksekusi

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

bekerja untuk saya saat itu dan tidak menghasilkan OP dan masalah saya.

metis
sumber
4

Saya mengalami masalah ini ketika saya mencoba untuk membuka file * .orig.

Inilah yang saya lakukan untuk melepaskan mereka:

$git reset -- *.orig

jika itu tidak berhasil:

$git clean -fd
EdC
sumber
5
Berbahaya meminta orang untuk mengeksekusi perintah tanpa memberi tahu mereka bahwa perintah ini akan menghapus file. $ git clean -fd
HS Rathore
4

Pastikan file ditambahkan ke git repo, jika tidak tambahkan file dalam git repo dan kemudian coba itu akan berhasil.

Bish
sumber
3

--assume-unchangedadalah tentang sistem file yang lambat, dan pengguna berjanji bahwa Git tidak perlu memeriksa file ini, karena Git dapat menganggapnya tidak berubah. Tetapi beberapa perintah masih melakukan pengecekan dan menghasilkan 'kejutan'!

Jangan gunakan pada file yang berubah.

Maaf menjadi pembawa berita itu (saya memiliki patch dalam proses untuk mengubah dokumentasi itu).

Philip Oakley
sumber
1
Lalu bagaimana cara memperbarui file untuk menandainya sebagai 'jangan lacak saya'?
javadba
@javadba lihat stackoverflow.com/a/6964492/717355 'git rm --cached filename'
Philip Oakley
Terima kasih pada itu: saya benar-benar menggunakannya tepat setelah posting di sini. bekerja.
javadba
perhatikan bahwa git rm --cached filenameakan menghapus file ketika orang lain menarik
Ryan Taylor
@RyanTaylor ya, penting bagi pengguna untuk menyadari apa yang dikatakan perintah mereka, yaitu 'hentikan pelacakan ini, hapus dari revisi saya'. Baca pandangan terbaru pengelola, dan tambalan baru saya .. public-inbox.org/git/[email protected]/…
Philip Oakley
3

Dalam kasus saya, saya mencoba menggunakan salah satu metode di atas, tetapi tidak berhasil.

Setelah banyak upaya, saya hanya berpikir untuk menambahkan file saya ke indeks melalui.

git add myfile.php

Git menolak tindakan ini tetapi dia menyarankan saya untuk melakukannya dengan paksa.

git add myfile.php -f

Dan itu berhasil bagi saya.

Stepanov Max
sumber
2

Pastikan Anda memiliki "web.config" yang masuk.

Jika tidak, Anda akan mendapatkan pesan kesalahan ini.

OneSolitaryNoob
sumber
1

Mungkin bermanfaat bagi seseorang. Saya memiliki masalah yang sama dan tidak ada masalah sintaksis, tidak ada nama dengan spasi, tidak ada masalah jalur, dan perintah git reset tidak bekerja. Saya melakukan dari folder di dalam apache www dan layanan apache dihentikan. Mulai lagi layanan apache dan kesalahannya hilang

hernancortes
sumber
1

Salah satu kesalahan umum dalam menggunakan perintah ini adalah mencoba mengasumsikan file yang tidak terlacak atau sudah diabaikan oleh git.

Pastikan terlebih dahulu bahwa file dilacak dengan menjalankan

git ls-files | grep relative_path/to/file

Jika tidak menunjukkan file Anda, maka Anda perlu menambahkannya terlebih dahulu:

git add relative_path/to/file

Jika ini menunjukkan file Anda, atau Anda telah menambahkan file itu ke git, maka Anda seharusnya dapat menjalankan perintah git dengan asumsi:

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

atau untuk folder

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

Anda dapat memeriksa apakah file Anda dianggap diabaikan dengan menjalankan

git ls-files -v | grep ^S

Karakter S mewakili file yang dilewati.

Ahmed Amr
sumber
0

Untuk semua pengunjung di masa depan. Tidak satu pun di atas yang menyelesaikan masalah saya. Apa yang saya sadari adalah .gitignorefile tersebut harus diletakkan di direktori yang benar. Dalam kasus saya, setelah saya pindah .gitignoreke direktori root aplikasi, masalahnya teratasi.

Amir
sumber
0

Periksa apakah file yang akan ditandai ada dan ejaan dengan benar, terutama path file dan pemisah file. Pemisah file sistem windows dan sistem linux berada di arah yang berbeda.

chengwengao
sumber
1
Meskipun tidak salah, jawaban ini tidak benar-benar menambah apa pun pada pertanyaan. Semua saran Anda telah dimunculkan dalam jawaban yang ada.
Matt
0

Saya menemukan bahwa kadang-kadang ini tidak berhasil karena Anda sudah mengkomit file ke .gitignore Anda dan mendorong atau menarik. Anda hanya perlu melakukan push dan file Anda harus diabaikan pada komit berikutnya bahkan ketika Anda memodifikasi file secara lokal.

larrytech
sumber
0

Saya memiliki masalah yang sama dengan cygwin di windows. Memberikan path file lengkap

Sudeep
sumber