git update-index --assume-unchanged renvoie "fatal impossible de marquer le fichier"


133

J'ai le même problème que l'OP sur ce post, mais je ne comprends pas la réponse marquée comme correcte (je ne vois pas qu'elle explique comment résoudre la situation)

Je fais cela et j'obtiens cette erreur:

$ git update-index --assume-unchanged web.config
fatal: Unable to mark file web.config
  1. Le fichier EST ajouté au référentiel

  2. Ce n'est PAS dans .git/info/exclude

  3. Ce n'est PAS dans .gitignore(c'était, mais je l'ai retiré, puis j'ai forcé l'ajout de web.config en utilisant git add -f web.config, validé et poussé ces modifications dans le dépôt)

  4. Quand je fais Git ls-files -o ce n'est PAS là

Alors, que puis-je faire pour réparer?


1
relisez la réponse acceptée dans la question référencée: elle ne doit PAS apparaître dans la sortie de git ls-files -o. Si tel est le cas, ce n'est pas dans le repo.
eckes

ma faute de frappe, ce n'est PAS dans la liste, et c'est très certainement dans le repo
Karen

Réponses:


108

J'avais le même problème que vous et j'avais suivi les quatre mêmes étapes que vous avez indiquées ci-dessus, et j'ai eu les mêmes résultats. Cela incluait le fait que mon fichier était répertorié lors de l'exécution git ls-files -o. Cependant, dans mon cas, j'ai également essayé d'exécuter git update-index --assume-unchangedsur un fichier qui n'était pas répertorié lors de l'exécution ls-files -o, et j'ai toujours reçu la même erreur " fatal: Unable to mark file".

J'ai pensé que c'était peut-être un bogue et j'ai téléchargé la dernière version de git, mais cela n'a pas aidé.

Ce que j'ai finalement réalisé, c'est que cette commande est sensible à la casse! Cela inclut le chemin complet et le nom du fichier. Après avoir mis à jour le chemin d'accès au répertoire afin que le chemin complet soit spécifié avec une casse appropriée, la commande s'est exécutée correctement.

Notez que c'était avec Git pour Windows, donc vos résultats peuvent varier avec d'autres plates-formes.


4
Merci beaucoup! Cela a fonctionné! Je pense que j'utilisais toutes les minuscules avant, ou un cd dans le dossier, puis j'ai essayé d'utiliser cette commande.
Karen

Si le fichier change, c'est faux. La commande est une promesse, par l'utilisateur, à Git, qu'il n'a pas à gaspiller des cycles en indiquant le fichier pour détecter s'il a changé (pour les systèmes de fichiers lents ;-). Finalement, l'une des commandes Git le remarquera et vous serez surpris. La documentation est mise à jour pour clarifier cela.
Philip Oakley

1
Merci, cela m'a indirectement aidé à découvrir un mauvais script shell dans un projet. Si un chemin n'existe pas, cela échouera! :)
uchuugaka

Notez également que cette commande ne fonctionnera pas pour les fichiers non versionnés. Si vous avez un fichier qui n'existe pas dans le référentiel, il peut être ignoré dans .gitignore, et je me sens idiot de taper ceci mais je pense que cela pourrait aider quelqu'un d'aussi stupide que moi. :)
Jesse Ivy

Juste pour clarifier ce que certains des commentaires ont laissé entendre, si vous utilisez un shell Windows qui vous a permis de vous en sortir avec des incompatibilités de casse dans vos CD, vous obtiendrez cette erreur. Soit donner à git le chemin complet du fichier (avec la casse correcte), soit reculer puis redescendre (encore une fois, avec la casse correcte à chaque étape).
dlf

54

J'avais le même problème sur un Mac. La sensibilité à la casse n'était pas un problème pour moi - le problème était que je devais d'abord réinitialiser mon git:

Problème:

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

Solution:

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

2
J'ai le même problème sur Mac et aucune des solutions de contournement suggérées n'a fonctionné pour moi. Une idée? J'essaie d'arrêter de suivre temporairement un répertoire sur ma machine uniquement, le nom du répertoire est intellij_idea_project_files /. Apparemment, tous les fichiers de ce répertoire ont été correctement marqués sauf un, et c'est my_project_name.iml.
Javad Sadeqzadeh

1
eu le même problème et c'est la solution qui a fonctionné pour moi, pas celle sur la sensibilité à la casse
CesarPim

Je suis également sur Mac et pour moi la "solution" était de supprimer le fichier. (Je publierais ceci comme réponse mais je ne suis pas sûr de ce qui s'est passé, peut-être plus tard.) Quelque chose de bizarre s'est produit. Git disait que le fichier avait été modifié (je le voulais --skip-worktree). Je me suis débarrassé des changements locaux en exécutant git restore .mais skip a toujours donné l'erreur. Enfin, j'ai essayé de supprimer le fichier. Étonnamment, git n'a pas dit qu'il y avait un changement. Il est donc clair que quelque chose de funky s'est produit depuis que git le suivait définitivement et je l'ai définitivement supprimé et cela n'a certainement pas dit que c'était un changement.
Captain Man

25

Dans mon cas, l'arborescence que je marquais était un répertoire, et non un fichier comme dans votre cas, et il me manquait la barre oblique après son nom.

Incorrect -

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

Correct -

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

Notez la barre oblique (/) à la fin.


1
Merci, mais quand je fais cela, j'obtiens "Ignoring path directory-name /"
damian

@damian Spécifiez le chemin d'accès complet au fichier au lieu du répertoire parent.
Nahid

6

fatal: impossible de marquer la localisation du fichier / el-GR.js

Ce que vous pouvez faire est:

  1. Déplacez-vous vers le chemin correct où le fichier est présent dans votre local (dans GITBASH)
  2. Mettre à jour l'index $git update-index --assume-unchanged <file name>

Cela m'a aidé! :)


2
$ git update-index --assume-unchanged ./.idea/vcs.xml fatal: Unable to mark file .idea/vcs.xml $ cd .idea git update-index --assume-unchanged .A travaillé, merci!
AVProgrammer

4

Si votre chemin contient des espaces, vous pouvez obtenir cette erreur même si vous avez la bonne casse.

Cela entraîne l'erreur "fatale":

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

Pour résoudre ce problème, ajoutez simplement des guillemets autour du chemin.

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

Dans mon cas, j'avais le / à l'envers.
Erik Bergstedt

4

Mon problème était que j'ai essayé la commande avec un caractère générique * en supposant qu'elle serait récursive, mais ce n'était pas le cas.

Alors ce que j'ai fait était

$ 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

exécution

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

a travaillé pour moi à l'époque et n'a pas abouti à des OP et à mon problème.


4

J'ai eu ce problème lorsque j'essayais de décompresser les fichiers * .orig.

Voici ce que j'ai fait pour les supprimer:

$git reset -- *.orig

si cela ne fonctionne pas:

$git clean -fd

5
Il est dangereux de demander aux gens d'exécuter la commande sans leur dire que cette commande supprimera les fichiers. $ git clean -fd
HS Rathore

4

Assurez-vous que le fichier est ajouté à git repo, sinon ajoutez le fichier dans git repo, puis essayez que cela fonctionnera.


3

--assume-unchangedconcerne les systèmes de fichiers lents, et les utilisateurs promettent que Git n'a pas besoin de vérifier ce fichier, car Git peut supposer qu'il est inchangé. Mais certaines commandes vérifient toujours et produisent une «surprise»!

Ne pas utiliser sur des fichiers qui changent.

Désolé d'être le porteur de cette nouvelle (j'ai un correctif en cours pour changer cette documentation).


1
Alors, comment est-on censé mettre à jour un fichier pour le marquer comme «ne pas me suivre»?
javadba

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

thx - voté à ce sujet: je l'avais utilisé juste après avoir posté ici. travaux.
javadba

notez que git rm --cached filenamesupprimera le fichier lorsque d'autres tireront
Ryan Taylor

@RyanTaylor oui, il est important que les utilisateurs réalisent ce que leur commande dit, c'est-à-dire «arrêtez de suivre cela, supprimez-la de mes révisions». Lisez la dernière vue du mainteneur et mon nouveau correctif .. public-inbox.org/git/20161101210448.4692-1-philipoakley@iee.org/…
Philip Oakley

3

Dans mon cas, j'ai essayé d'utiliser l'une des méthodes ci-dessus, mais pas de chance.

Après de nombreuses tentatives, j'ai juste pensé à ajouter mon fichier à indexer.

git add myfile.php

Git a refusé cette action mais il m'a conseillé de la faire de force.

git add myfile.php -f

Et cela a fonctionné pour moi.


2

Assurez-vous que "web.config" est enregistré.

Si ce n'est pas le cas, vous obtiendrez ce message d'erreur.


1

Peut-être utile pour quelqu'un. J'ai eu le même problème et je n'avais pas de problème de syntaxe, pas de nom avec des espaces, pas de problème de chemin et la commande git reset ne fonctionnait pas. J'étais en train de commettre à partir d'un dossier dans apache www et le service apache a été arrêté. Le service Apache a redémarré et l'erreur a disparu


1

Une erreur courante lors de l'utilisation de cette commande est d'essayer de supposer un fichier non suivi ou un fichier ignoré par git déjà.

Assurez-vous d'abord que le fichier est suivi en exécutant

git ls-files | grep relative_path/to/file

Si votre fichier ne s'affiche pas, vous devez d'abord l'ajouter:

git add relative_path/to/file

Si cela montre votre fichier, ou si vous avez déjà ajouté ce fichier à git, vous devriez pouvoir exécuter les commandes git assume normalement:

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

ou pour les dossiers

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

vous pouvez vérifier si votre fichier est supposé ignoré en exécutant

git ls-files -v | grep ^S

Le caractère S représente les fichiers ignorés.


0

Pour tous les futurs visiteurs. Aucune des solutions ci-dessus n'a résolu mon problème. Ce que j'ai réalisé, c'est que le .gitignorefichier doit être placé dans le bon répertoire. Dans mon cas, une fois que je suis passé .gitignoreau répertoire racine de l'application, le problème a été résolu.


0

Vérifiez si le fichier à marquer existe et s’épelle correctement, en particulier le chemin du fichier et le séparateur de fichier. Les séparateurs de fichiers du système Windows et du système Linux sont dans des directions différentes.


1
Bien que ce ne soit pas faux, cette réponse n'ajoute vraiment rien à la question. Toutes vos suggestions ont déjà été évoquées dans les réponses existantes.
Matt

0

J'ai trouvé que parfois cela ne fonctionne pas parce que vous avez déjà validé le fichier sur votre .gitignore et effectué un push ou un pull. Il vous suffit de faire le push et votre fichier doit être ignoré lors des validations suivantes, même lorsque vous modifiez le fichier localement.


0

J'ai eu le même problème avec cygwin dans Windows. Donner le chemin complet du fichier

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.