¿Puedo obtener una lista de archivos marcados como "sin cambios"?

325

¿Qué he marcado como --assume-unchanged? ¿Hay alguna forma de averiguar lo que he escondido usando esa opción?

He revisado el .git/directorio y no veo nada que se parezca a lo que esperaba, pero debe estar en algún lugar. Olvidé lo que marqué de esta manera hace unas semanas y ahora necesito documentar esos detalles para futuros desarrolladores.

Rob Wilkerson
fuente

Respuestas:

449

Puedes usar git ls-files -v . Si el carácter impreso está en minúsculas, el archivo se marca asumido sin cambios.

Para imprimir solo los archivos que no han cambiado, use:

git ls-files -v | grep '^[[:lower:]]'

Para abrazar a su programador perezoso, convierta esto en un alias git . Edite su .gitconfigarchivo para agregar este fragmento:

[alias]
    ignored = !git ls-files -v | grep "^[[:lower:]]"

Ahora escribir git ignoredte dará una salida como esta:

h path/to/ignored.file
h another/ignored.file
Andrew Aylett
fuente
42
git ls-files -v | grep ^ [az]
Matt R
17
Mi sistema operativo aparentemente tiene una configuración de intercalación extraña, por lo que el comando de Matt no funcionó para mí. Esto es lo que agregué en la [alias]sección de mi .gitconfig:ignored = !git ls-files -v | grep "^[[:lower:]]"
Abe Voelker
15
La razón [az] no funciona es que el shell lo expande como comodín; si el directorio actual contiene un archivo que coincide con ese patrón (es decir, una sola letra minúscula), entonces la expansión de ese es el nombre del archivo. Intente agregar comillas, por ejemplo, "[az]"
DomQ
77
git ls-files -v | grep -e "^ [az]"
Amir Ali Akbari
12
Los alias sugeridos funcionan para encontrar archivos sin cambios en el directorio actual y debajo. Si desea una lista de todos los archivos "asumir sin cambios" en el repositorio, necesitarágit ls-files -v `git rev-parse --show-toplevel` | grep "^[a-z]"
Trebor Rude
65

Un trazador de líneas

git ls-files -v | grep "^[a-z]"

Usar alias

En mi humilde opinión, git hiddenes mejor para los archivos marcados como --assume-unchanged:

git config --global alias.hidden '!git ls-files -v | grep "^[a-z]"'

Aquí hay una lista de alias relacionados que tengo en ~/.gitconfig:

[alias]
  hide = update-index --assume-unchanged
  unhide = update-index --no-assume-unchanged
  unhide-all = update-index --really-refresh
  hidden = !git ls-files -v | grep \"^[a-z]\"
  ignored = !git status -s --ignored | grep \"^!!\"

Para que funcione en subdirectorios y argumentos de soporte :

  hidden = "!f(){ git -C \"$GIT_PREFIX\" ls-files -v \"$@\" | grep \"^[a-z]\";}; f"
  ignored = "!f(){ git -C \"$GIT_PREFIX\" status -s --ignored \"$@\" | grep \"^!!\";}; f"

Por ejemplo:

 # cd target
 # git ignored classes

Acerca del estado del archivo

Para mí, la mayoría de los archivos ocultos están marcados con una bandera h, aunque en realidad hay varias otras banderas de acuerdo con el manual de git-ls-files-v:

-v
    Similar to -t, but use lowercase letters for files that are 
marked as assume unchanged (see git-update-index(1)).

Acerca de git ls-files-t:

This option (-t) identifies the file status with the following tags 
(followed by a space) at the start of each line:

H   cached
S   skip-worktree
M   unmerged
R   removed/deleted
C   modified/changed
K   to be killed
?   other
ryenus
fuente
1
Bonitos alias fáciles de recordar :) Gracias
PlagueHammer
1
Aquí hay algunas variantes más flexibles: hidden = "!f() { git ls-files -v \"$@\" | grep \"^[a-z]\"; }; f"y ignored = "!f() { git status -s --ignored \"$@\" | grep \"^!!\"; }; f". Esto permite, por ejemplo, git ignored -- PATH1 PATH2enumerar solo los archivos ignorados en ciertas rutas (útil cuando tiene muchos archivos ignorados).
sls
Gracias por el alias
MOHRE
22

Este comando funciona de manera más consistente para mí. Imprimirá solo los archivos que están listados como 'asumir sin cambios'.

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

Lo he usado muchas veces en diferentes entornos y funciona perfectamente.

earl3s
fuente
55
En el indicador de Windows, use en grep "^h"lugar de comillas simples
beautifulcoder
7

Solución de PowerShell, usando Select-String \ sls

git ls-files -v | sls -pattern ^h -casesensitive
Thowk
fuente
3

Solución de línea de comandos de Windows usando FindStr :

git ls-files -v | findstr /B h
Vova
fuente