git update-index --assume-invariato restituisce "fatale impossibile contrassegnare il file"


133

Sto riscontrando lo stesso problema dell'OP in questo post, ma non capisco la risposta contrassegnata come corretta (non vedo che spieghi come risolvere la situazione)

Faccio questo e ottengo questo errore:

$ git update-index --assume-unchanged web.config
fatal: Unable to mark file web.config
  1. Il file viene aggiunto al repository

  2. NON è in .git/info/exclude

  3. NON è presente .gitignore(lo era, ma l'ho rimosso, quindi ho forzato l'aggiunta di web.config utilizzando git add -f web.config, eseguito il commit e inviato tali modifiche al repository)

  4. Quando faccio Git ls-files -o NON c'è

Quindi cosa posso fare per risolvere?


1
rileggere la risposta accettata nella domanda di riferimento: NON deve comparire nell'output di git ls-files -o. In tal caso, non è nel repository.
Controlla l'

il mio errore di battitura, NON è nell'elenco, ed è sicuramente nel repository
Karen,

Risposte:


108

Stavo avendo lo stesso problema come te, e avevo seguito gli stessi quattro passaggi che hai indicato sopra e ho avuto gli stessi risultati. Ciò includeva il fatto che il mio file era elencato durante l'esecuzione git ls-files -o. Tuttavia, nel mio caso, ho anche provato a eseguire git update-index --assume-unchangedun file che non era elencato durante l'esecuzione ls-files -oe ho ancora ricevuto lo stesso errore " fatal: Unable to mark file".

Ho pensato che forse era un bug e ho scaricato l'ultima versione di Git, ma questo non ha aiutato.

Quello che ho finalmente capito è che questo comando fa distinzione tra maiuscole e minuscole! Ciò include il percorso completo e il nome del file. Dopo aver aggiornato il percorso della directory in modo che il percorso completo sia stato specificato con il case corretto, il comando è stato eseguito correttamente.

Nota che questo era con Git per Windows, quindi i tuoi risultati possono variare con altre piattaforme.


4
Grazie mille! Questo ha funzionato! Penso che prima stavo usando tutte le lettere minuscole, o cd nella cartella e poi ho provato a usare questo comando.
Karen,

Se il file cambierà, allora questo è errato. Il comando è una promessa, da parte dell'utente, a Git, che non deve sprecare cicli per dichiarare il file per rilevare se è cambiato (per i file system lenti ;-). Alla fine uno dei comandi di Git noterà e sarai sorpreso. La documentazione è in fase di aggiornamento per chiarire questo.
Philip Oakley,

1
Grazie, questo mi ha indirettamente aiutato a scoprire alcuni script di shell non validi in un progetto. Se non esiste un percorso, questo fallirà! :)
Uchuugaka,

Si noti inoltre che questo comando non funzionerà per i file senza versione. Se hai un file che non esiste nel repository, può essere ignorato in .gitignore, e ragazzo, mi sento sciocco digitarlo, ma immagino che potrebbe aiutare qualcuno stupido come me. :)
Jesse Ivy,

Solo per chiarire a cosa hanno accennato alcuni dei commenti, se stai usando una shell di Windows che ti ha permesso di cavartela con i disallineamenti del case nei tuoi cd, otterrai questo errore. O dai a git il percorso completo del file (con il caso corretto), oppure esegui il backup su e poi giù di nuovo (di nuovo, con il caso corretto in ogni fase).
dlf

54

Stavo riscontrando lo stesso problema su un Mac. La distinzione tra maiuscole e minuscole non era un problema per me - il problema era che dovevo ripristinare prima il mio git:

Problema:

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

Soluzione:

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

2
Sto riscontrando lo stesso problema su Mac e nessuna delle soluzioni suggerite ha funzionato per me. Qualche idea? Sto cercando di interrompere il tracciamento temporaneo di una directory solo sulla mia macchina, il nome della directory è intellij_idea_project_files /. Apparentemente tutti i file in questa directory sono stati correttamente contrassegnati tranne uno, ovvero my_project_name.iml.
Javad Sadeqzadeh,

1
ha avuto lo stesso problema e questa è la soluzione che ha funzionato per me, non quella della distinzione tra maiuscole e minuscole
CesarPim

Sono anche su Mac e per me la "soluzione" è stata quella di eliminare il file. (Pubblicherei questo come una risposta ma non sono sicuro di cosa sia successo, forse più tardi.) È successo qualcosa di strano. Git stava dicendo che il file era cambiato (volevo --skip-worktree). Mi sono sbarazzato delle modifiche locali eseguendo git restore .ma skip ha comunque dato l'errore. Alla fine ho provato a cancellare il file. Incredibilmente, Git non ha detto che c'è stato un cambiamento. Quindi è chiaramente accaduto qualcosa di strano da quando Git lo stava sicuramente rintracciando e l'ho sicuramente eliminato e sicuramente non ha detto che era un cambiamento.
Captain Man

25

Nel mio caso l'albero che stavo marcando era una directory e non un file come nel tuo caso, e mi mancava la barra in avanti dopo il suo nome.

Errato -

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

Corretta -

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

Nota la barra (/) alla fine.


1
Grazie, ma quando lo faccio ottengo "Ignora il percorso directory-name /"
damian

@damian Specifica il percorso completo del file anziché la directory principale.
Nahid,

6

fatale: impossibile contrassegnare la localizzazione dei file / el-GR.js

Quello che puoi fare è:

  1. Passa al percorso corretto in cui il file è presente nel tuo locale (in GITBASH)
  2. Aggiorna l'indice $git update-index --assume-unchanged <file name>

Questo mi ha aiutato! :)


2
$ git update-index --assume-unchanged ./.idea/vcs.xml fatal: Unable to mark file .idea/vcs.xml $ cd .idea git update-index --assume-unchanged .Ha funzionato, grazie!
AVProgrammer,

4

Se il tuo percorso ha spazi, potresti ricevere questo errore anche se hai il case giusto.

Ciò provoca l'errore "fatale":

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

Per risolvere il problema, aggiungi semplicemente virgolette attorno al percorso.

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

Nel mio caso avevo / indietro.
Erik Bergstedt,

4

Il mio problema era che ho provato il comando con un carattere jolly * supponendo che sarebbe ricorsivo, ma non lo era.

Quindi quello che ho fatto è stato

$ 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

esecuzione

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

ha funzionato per me e non ha comportato PO e il mio problema.


4

Ho avuto questo problema durante il tentativo di non tracciare i file * .orig.

Questo è quello che ho fatto per non tracciarli:

$git reset -- *.orig

se non funziona:

$git clean -fd

5
È pericoloso chiedere alle persone di eseguire il comando senza dire loro che questo comando eliminerà i file. $ git clean -fd
HS Rathore,

4

Assicurati che il file sia aggiunto a git repo, altrimenti aggiungi il file in git repo e poi prova che funzionerà.


3

--assume-unchangedriguarda i file system lenti e gli utenti promettono che Git non ha bisogno di controllare questo file, poiché Git può supporre che sia invariato. Ma alcuni comandi continuano a controllare e producono "sorpresa"!

Non utilizzare su file che cambiano.

Mi dispiace essere il portatore di quella notizia (ho una patch in corso per cambiare quella documentazione).


1
Quindi come si può aggiornare un file per contrassegnarlo come 'non tracciarmi'?
javadba,

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

grazie - ho votato a tale proposito: l'avevo effettivamente usato subito dopo aver pubblicato qui. lavori.
javadba,

nota che git rm --cached filenamecancellerà il file quando altri tireranno
Ryan Taylor

@RyanTaylor sì, è importante che gli utenti comprendano ciò che dice il loro comando, che è 'smetti di tracciare questo, rimuovilo dalle mie revisioni'. Leggi l'ultima vista del manutentore e la mia nuova patch. Public-inbox.org/git/20161101210448.4692-1-philipoakley@iee.org/…
Philip Oakley,

3

Nel mio caso, ho provato a utilizzare uno dei metodi sopra, ma senza fortuna.

Dopo molti tentativi, ho pensato di aggiungere il mio file per indicizzarlo.

git add myfile.php

Git ha rifiutato questa azione ma mi ha consigliato di farlo con la forza.

git add myfile.php -f

E quello ha funzionato per me.


2

Assicurati di avere "web.config" registrato.

In caso contrario, verrà visualizzato questo messaggio di errore.


1

Forse utile per qualcuno. Ho avuto lo stesso problema e nessun problema di sintassi, nessun nome con spazi, nessun problema di percorso e il comando git reset non ha funzionato. Stavo eseguendo il commit da una cartella all'interno di apache www e il servizio apache è stato interrotto. Riavviato il servizio apache e l'errore scompare


1

Un errore comune nell'uso di questo comando sta provando ad assumere un file non tracciato o ignorato da Git.

Assicurati innanzitutto che il file sia tracciato eseguendo

git ls-files | grep relative_path/to/file

Se non mostra il tuo file, devi prima aggiungerlo:

git add relative_path/to/file

Se questo mostra il tuo file, o hai già aggiunto quel file a git, allora dovresti essere in grado di eseguire i comandi di git assume normalmente:

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

o per cartelle

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

puoi verificare se il tuo file viene considerato ignorato eseguendo

git ls-files -v | grep ^S

Il carattere S rappresenta i file saltati.


0

Per tutti i futuri visitatori. Nessuna delle precedenti ha risolto il mio problema. Quello che ho capito è che il .gitignorefile deve essere collocato nella directory giusta. Nel mio caso, una volta passato .gitignorealla directory principale dell'applicazione, il problema è stato risolto.


0

Controlla se il file da contrassegnare esiste e si scrive correttamente, in particolare il percorso e il separatore dei file. I separatori di file di Windows e Linux sono in diverse direzioni.


1
Sebbene non sia sbagliata, questa risposta non aggiunge nulla alla domanda. Tutti i tuoi suggerimenti sono già stati inseriti nelle risposte esistenti.
Matt,

0

Ho scoperto che a volte questo non funziona perché hai già eseguito il commit del file sul tuo .gitignore e hai fatto un push o pull. Devi solo fare il push e il tuo file dovrebbe essere ignorato nei successivi commit anche quando modifichi localmente il file.


0

Ho avuto lo stesso problema con Cygwin in Windows. Dare il percorso completo del file

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.