worktree update index example change assume git version-control git-index

example - Deshacer git update-index-asume-unchanged<file>



git assume no change (8)

La forma en que Git ignora ver / rastrear un directorio / archivo en particular. simplemente ejecuta esto:

git update-index --assume-unchanged <file>

Ahora, ¿cómo deshacerlo para que sean vistos de nuevo? (Llamémoslo un-asumir).


Agregando a la respuesta de @adardesign , si desea restablecer todos los archivos que se han agregado a la lista de assume-unchanged a no-assume-unchanged de una sola vez, puede hacer lo siguiente:

git ls-files -v | grep ''^h'' | sed ''s/^..//'' | sed ''s// /// /g'' | xargs -I FILE git update-index --no-assume-unchanged FILE || true

Esto solo eliminará los dos caracteres de salida de grep, es decir, "h " , luego escapará de los espacios que puedan estar presentes en los nombres de los archivos, y finalmente || true || true evitará que el comando termine prematuramente en caso de que algunos archivos en el bucle tengan errores.


La función git update-index tiene varias opciones que puedes encontrar escribiendo a continuación:

git update-index --help

Aquí encontrará varias opciones: cómo manejar la función con el índice de actualización.

[si no sabes el nombre del archivo]

git update-index --really-refresh

[si conoce el nombre del archivo]

git update-index --no-assume-unchanged <file>

revertirá todos los archivos que se han agregado en la lista de ignorados a través.

git update-index --assume-unchanged <file>


Para sintetizar las excelentes respuestas originales de @adardesign, @adswebwork y @AnkitVishwakarma y los comentarios de @Bdoserror y @Retsam, con enlaces de documentación adicionales y un alias de shell ...

Comandos básicos

Para restablecer un archivo que es assume-unchanged volver a la normalidad:

git update-index --no-assume-unchanged <file>

Para listar todos los archivos que son asumidos-sin cambios:

git ls-files -v | grep ''^[a-z]'' | cut -c3-

Para restablecer todos los archivos supuesto-sin cambiar de nuevo a normal:

git update-index --really-refresh

Atajos

Para hacer que estas tareas comunes sean fáciles de ejecutar en git, agregue la siguiente sección a .gitconfig para su usuario (por ejemplo, ~/.gitconfig en un sistema * nix o macOS):

[alias] hide = update-index --assume-unchanged unhide = update-index --no-assume-unchanged unhide-all = update-index --really-refresh hidden = ls-files -v

Para facilitar la ejecución de la lista de todos los archivos que se suponen sin cambios en un shell que admite alias (como bash), cree un alias como:

alias git-hidden="git hidden | grep ''^[a-z]'' | cut -c3-"

Para shells sin alias, un script podría hacer el truco.


Si desea deshacer todos los archivos que se aplicaron asumiendo que no ha cambiado con ningún estado, no solo en caché (git los marca con caracteres en minúscula), puede usar el siguiente comando:

git ls-files -v | grep ''^[a-z]'' | cut -c 3- | tr ''/012'' ''/000'' | xargs -0 git update-index --no-assume-unchanged

  1. git ls-files -v imprimirá todos los archivos con su estado
  2. grep ''^[az]'' filtrará archivos y seleccionará solo para asumir sin cambios
  3. cut -c 3- eliminará el estado y dejará solo las rutas, cortando desde el tercer carácter hasta el final
  4. tr ''/012'' ''/000'' reemplazará el carácter de final de línea (/ 012) por cero (/ 000)
  5. xargs -0 git update-index --no-assume-unchanged pasará todas las rutas separadas por cero caracteres a git update-index --no-assume-unchanged a undo

Si está utilizando Git Extensions , siga los pasos a continuación:

  1. Ir a la ventana de confirmación.
  2. Haga clic en el menú desplegable llamado Cambios de directorio de trabajo .
  3. Seleccione la opción Mostrar archivos sin cambios no asumidos .
  4. Haga clic derecho en el archivo que desea desasumir.
  5. Seleccione No asumir sin cambios .

Estás listo.


Si este es un comando que usa con frecuencia, también puede considerar tener un alias para él. Agregue a su .gitconfig global:

[alias] hide = update-index --assume-unchanged unhide = update-index --no-assume-unchanged

Después de guardar esto en su .gitconfig , puede ejecutar un comando de limpieza.

git hide myfile.ext

o

git unhide myfile.ext

Este resource fue muy útil.


Supongo (heh) que quiso --assume-unchanged , ya que no veo ninguna opción --assume-changed . La inversa de --assume-unchanged es --no-assume-unchanged .


Para obtener / deshacer / mostrar los archivos de dir que están configurados para asumir, sin cambios, ejecute esto :

git update-index --no-assume-unchanged <file>

Para obtener una lista de los archivos / del directorio que se assume-unchanged ejecute esto :

git ls-files -v|grep ''^h''