git update-index --asumir-sin cambios devuelve "fatal incapaz de marcar el archivo"

133

Tengo el mismo problema que el OP en esta publicación, pero no entiendo la respuesta marcada como correcta (no veo que explique cómo solucionar la situación)

Hago esto y obtengo este error:

$ git update-index --assume-unchanged web.config
fatal: Unable to mark file web.config
  1. El archivo se agrega al repositorio

  2. NO está en .git/info/exclude

  3. NO está en .gitignore(estaba, pero lo saqué, luego forcé a agregar web.config usando git add -f web.config, comprometió y empujé esos cambios al repositorio)

  4. Cuando hago Git ls-files -o NO está allí

Entonces, ¿qué puedo hacer para arreglar?

Karen
fuente
1
vuelva a leer la respuesta aceptada en la pregunta a la que se hace referencia: NO aparecerá en la salida de git ls-files -o. Si es así, no está en el repositorio.
eckes el
mi error tipográfico, NO está en la lista, y definitivamente está en el repositorio
Karen

Respuestas:

108

Estaba teniendo el mismo problema que usted, seguí los mismos cuatro pasos que indicó anteriormente y obtuve los mismos resultados. Esto incluyó el hecho de que mi archivo estaba en la lista al ejecutar git ls-files -o. Sin embargo, en mi caso, también intenté ejecutar git update-index --assume-unchangedcontra un archivo que no estaba en la lista al ejecutar ls-files -o, y aún recibí el mismo error " fatal: Unable to mark file".

Pensé que tal vez era un error, y descargué la última versión de git, pero esto no ayudó.

¡Finalmente me di cuenta de que este comando distingue entre mayúsculas y minúsculas! Esto incluye la ruta completa y el nombre del archivo. Después de actualizar la ruta al directorio para que se especifique la ruta completa con la carcasa adecuada, el comando se ejecutó correctamente.

Tenga en cuenta que esto fue con Git para Windows, por lo que sus resultados pueden variar con otras plataformas.

David Marchelya
fuente
44
¡Muchas gracias! Esto funcionó! Creo que estaba usando todas las minúsculas antes, o cd a la carpeta y luego traté de usar este comando.
Karen
Si el archivo cambiará, entonces esto es incorrecto. El comando es una promesa, por parte del usuario, a Git, de que no tiene que desperdiciar ciclos al declarar el archivo para detectar si ha cambiado (para sistemas de archivos lentos ;-). Eventualmente, uno de los comandos de Git lo notará y se sorprenderá. La documentación se está actualizando para aclarar esto.
Philip Oakley
1
Gracias, esto indirectamente me ayudó a descubrir algún script de shell malo en un proyecto. Si no existe un camino, ¡esto fallará! :)
uchuugaka
También tenga en cuenta que este comando no funcionará para archivos no versionados. Si tiene un archivo que no existe en el repositorio, puede ignorarlo en .gitignore, y vaya, me siento tonto escribiendo esto, pero creo que podría ayudar a alguien tan tonto como yo. :)
Jesse Ivy
Solo para aclarar lo que algunos de los comentarios han insinuado, si está utilizando un shell de Windows que le ha permitido escapar de las discrepancias de mayúsculas y minúsculas en sus CD, obtendrá este error. O bien, déle a git la ruta completa al archivo (con el caso correcto), o cd hacia arriba y luego hacia abajo nuevamente (nuevamente, con el caso correcto en cada etapa).
dlf
54

Estaba teniendo el mismo problema en una Mac. La distinción entre mayúsculas y minúsculas no fue un problema para mí; el problema era que primero necesitaba restablecer mi git:

Problema:

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

Solución:

git reset HEAD
Unstaged changes after reset:
M   index.php
git update-index --assume-unchanged index.php
Toby Beresford
fuente
2
Tengo el mismo problema en Mac, y ninguna de las soluciones sugeridas me funcionó. ¿Alguna idea? Estoy tratando de dejar de rastrear un directorio temporalmente solo en mi máquina, el nombre del directorio es intellij_idea_project_files /. Aparentemente, todos los archivos de este directorio se han marcado correctamente, excepto uno, y ese es my_project_name.iml.
Javad Sadeqzadeh
1
tenía el mismo problema y esta es la solución que funcionó para mí, no la que
distingue
También estoy en Mac y para mí la "solución" fue eliminar el archivo. (Publicaría esto como respuesta, pero no estoy seguro de lo que sucedió, tal vez más tarde). Algo extraño sucedió. Git decía que el archivo había cambiado (yo quería --skip-worktree). Me deshice de los cambios locales ejecutando, git restore .pero skip todavía dio el error. Finalmente intenté eliminar el archivo. Sorprendentemente, git no dijo que hubo un cambio. Claramente, ha sucedido algo funky ya que git definitivamente lo estaba rastreando y definitivamente lo eliminé y definitivamente no decía que eso era un cambio.
Capitán Man
25

En mi caso, el árbol que estaba marcando era un directorio, y no un archivo como en su caso, y me faltaba la barra diagonal después de su nombre.

Incorrecto

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

Correcto -

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

Tenga en cuenta la barra diagonal (/) al final.

Sahil Singh
fuente
1
Gracias, pero cuando hago esto me sale "Ignorando la ruta nombre-directorio /"
damian
@damian Especifique la ruta completa del archivo en lugar del directorio padre.
Nahid
6

fatal: no se puede marcar la localización del archivo / el-GR.js

Lo que puedes hacer es:

  1. Muévase a la ruta correcta donde el archivo está presente en su local (en GITBASH)
  2. Actualiza el índice $git update-index --assume-unchanged <file name>

Esto me ayudó! :)

Grace Aloysius
fuente
2
$ git update-index --assume-unchanged ./.idea/vcs.xml fatal: Unable to mark file .idea/vcs.xml $ cd .idea git update-index --assume-unchanged .Trabajado, gracias!
AVProgrammer
4

Si su ruta tiene espacios, puede obtener este error incluso si tiene la carcasa correcta.

Esto da como resultado el error "fatal":

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

Para solucionarlo, simplemente agregue comillas alrededor de la ruta.

git update-index --assume-unchanged "code/Solution Files/WebEssentials-Settings-json"
Jon Crowell
fuente
En mi caso tuve el / al revés.
Erik Bergstedt
4

Mi problema fue que probé el comando con un comodín * suponiendo que sería recursivo, pero no fue así.

Entonces lo que hice fue

$ 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

ejecutando

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

funcionó para mí entonces y no resultó en OP y mi problema.

meticuloso
fuente
4

Tuve este problema cuando intentaba eliminar los archivos * .orig.

Esto es lo que hice para descubrirlos:

$git reset -- *.orig

si eso no funciona:

$git clean -fd
EdC
fuente
55
Es peligroso pedirle a la gente que ejecute un comando sin decirles que este comando eliminará los archivos. $ git clean -fd
HS Rathore
4

Asegúrese de que el archivo se agrega a git repo, si no, agregue el archivo en git repo y luego intente que funcione.

bisw
fuente
3

--assume-unchangedse trata de sistemas de archivos lentos, y los usuarios prometen que Git no necesita verificar este archivo, ya que Git puede asumir que no ha cambiado. ¡Pero algunos comandos aún comprueban y producen 'sorpresa'!

No lo use en archivos que cambien.

Lamento ser el portador de esa noticia (tengo un parche en proceso para cambiar esa documentación).

Philip Oakley
fuente
1
Entonces, ¿cómo se supone que se debe actualizar un archivo para marcarlo como 'no me sigas'?
javadba
@javadba ver stackoverflow.com/a/6964492/717355 'git rm - nombre de archivo en caché'
Philip Oakley
THX: voté por eso: en realidad lo había usado justo después de publicar aquí. trabajos.
javadba
tenga en cuenta que git rm --cached filenameeliminará el archivo cuando otros tiren
Ryan Taylor
@RyanTaylor sí, es importante que los usuarios se den cuenta de lo que dice su comando, que es "dejar de seguir esto, eliminarlo de mis revisiones". Eche un vistazo a la última vista del mantenedor y mi nuevo parche. Public-inbox.org/git/[email protected]/…
Philip Oakley
3

En mi caso, intenté usar cualquiera de los métodos anteriores, pero no tuve suerte.

Después de muchos intentos, solo pensé en agregar mi archivo para indexarlo.

git add myfile.php

Git rechazó esta acción, pero me aconsejó que lo hiciera por la fuerza.

git add myfile.php -f

Y eso funcionó para mí.

Stepanov Max
fuente
2

Asegúrese de tener "web.config" registrado.

Si no es así, recibirá este mensaje de error.

OneSolitaryNoob
fuente
1

Quizás útil para alguien. Tuve el mismo problema y no tenía problemas de sintaxis, no tenía nombres con espacios, no tenía problemas de ruta y el comando git reset no funcionaba. Me estaba comprometiendo desde una carpeta dentro de apache www y se detuvo el servicio de apache. Comenzó de nuevo el servicio Apache y el error desapareció

hernancortes
fuente
1

Un error común al usar este comando es tratar de asumir que git ya no ha rastreado el archivo o ya lo ha ignorado.

Asegúrese primero de que el archivo se rastrea ejecutando

git ls-files | grep relative_path/to/file

Si no muestra su archivo, debe agregarlo primero:

git add relative_path/to/file

Si esto muestra su archivo, o si ya ha agregado ese archivo a git, entonces debería poder ejecutar los comandos de git asumir normalmente:

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

o para carpetas

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

puede verificar si se supone que su archivo se ignora ejecutando

git ls-files -v | grep ^S

El carácter S representa los archivos omitidos.

Ahmed Amr
fuente
0

Para todos los futuros visitantes. Ninguno de los anteriores resolvió mi problema. Lo que me di cuenta es que el .gitignorearchivo debe colocarse en el directorio correcto. En mi caso, una vez que me mudé .gitignoreal directorio raíz de la aplicación, el problema se resolvió.

Amir
fuente
0

Compruebe si el archivo a marcar existe y se escribe correctamente, especialmente la ruta del archivo y el separador de archivos. Los separadores de archivos del sistema de Windows y el sistema de Linux están en diferentes direcciones.

chengwengao
fuente
1
Si bien no está mal, esta respuesta realmente no agrega nada a la pregunta. Todas sus sugerencias ya se han mencionado en las respuestas existentes.
Matt
0

Descubrí que a veces esto no funciona porque ya has enviado el archivo a tu .gitignore e hiciste un push o pull. Solo necesita hacer la inserción y su archivo debe ignorarse en las confirmaciones posteriores incluso cuando modifique localmente el archivo.

larrytech
fuente
0

Tuve el mismo problema con Cygwin en Windows. Dando la ruta completa del archivo

Sudeep
fuente