Debido a la burocracia, necesito obtener una lista de todos los archivos modificados en mi repositorio para un informe (comencé con el código fuente existente).
¿Qué debo ejecutar para obtener esta lista?
Debido a la burocracia, necesito obtener una lista de todos los archivos modificados en mi repositorio para un informe (comencé con el código fuente existente).
¿Qué debo ejecutar para obtener esta lista?
Respuestas:
Para los archivos modificados entre un SHA determinado y su confirmación actual:
git diff --name-only <starting SHA> HEAD
o si desea incluir archivos modificados pero aún no confirmados:
git diff --name-only <starting SHA>
De manera más general, la siguiente sintaxis siempre le indicará qué archivos cambiaron entre dos confirmaciones (especificadas por sus SHA u otros nombres):
git diff --name-only <commit1> <commit2>
git diff --name-only <SHA> <SHA>^
--name-statusbandera en lugar de --name-onlyes útil para obtener una lista de archivos y ver su estado de modificación, como Agregado o Modificado.
--name-statusmuestran lo que les sucedió
Para encontrar los nombres de todos los archivos modificados desde su última confirmación:
git diff --name-only
O (para obtener un poco más de información, incluidos los archivos sin seguimiento):
git status
Para una lista de todos los unstaged archivos modificados de orugas:
git diff --name-only
Para enumerar todos los archivos cambiados rastreados por etapas :
git diff --name-only --staged
Para enumerar todos los archivos cambiados rastreados y no escalonados :
{ git diff --name-only ; git diff --name-only --staged ; } | sort | uniq
Para enumerar todos los archivos no rastreados (los enumerados por git status, sin incluir los archivos ignorados):
git ls-files --other --exclude-standard
Si está utilizando esto en un script de shell y desea verificar mediante programación si estos comandos devuelven algo, le interesará git diffla --exit-codeopción.
Cuando agregué / modifiqué / eliminé muchos archivos (desde la última confirmación), me gusta ver esas modificaciones en orden cronológico.
Para eso uso:
Para enumerar todos los archivos no organizados:
git ls-files --other --modified --exclude-standard
Para obtener la última fecha de modificación para cada archivo:
while read filename; do echo -n "$(stat -c%y -- $filename 2> /dev/null) "; echo $filename; done
Aunque ruvim sugiere en los comentarios :
xargs -0 stat -c '%y %n' --
Para ordenarlos del más antiguo al más reciente:
sort
Un alias hace que sea más fácil de usar:
alias gstlast='git ls-files --other --modified --exclude-standard|while read filename; do echo -n "$(stat -c%y -- $filename 2> /dev/null) "; echo $filename; done|sort'
O (más corto y más eficiente, gracias a ruvim )
alias gstlast='git ls-files --other --modified --exclude-standard|xargs -0 stat -c '%y %n' --|sort'
Por ejemplo:
username@hostname:~> gstlast
2015-01-20 11:40:05.000000000 +0000 .cpl/params/libelf
2015-01-21 09:02:58.435823000 +0000 .cpl/params/glib
2015-01-21 09:07:32.744336000 +0000 .cpl/params/libsecret
2015-01-21 09:10:01.294778000 +0000 .cpl/_deps
2015-01-21 09:17:42.846372000 +0000 .cpl/params/npth
2015-01-21 12:12:19.002718000 +0000 sbin/git-rcd
Ahora puedo revisar mis modificaciones, desde la más antigua hasta la más reciente.
xargssola llamada stat? La git ls-files -z --other --modified --exclude-standard | xargs -0 stat -c '%y %n' -- | sort
Necesito una lista de archivos que hayan cambiado el contenido entre dos confirmaciones (solo agregadas o modificadas), así que usé:
git diff --name-only --diff-filter=AM <commit hash #1> <commit hash #2>
Las diferentes opciones de filtro de diferencias de la documentación de git diff :
filtro diferencial = [(A | C | D | M | R | T | U | X | B)… [*]]
Seleccione solo los archivos que se añaden (A), se copian (C), se eliminan (D), se modifican (M), se cambian de nombre (R), se les cambia su tipo (es decir, archivo normal, enlace simbólico, submódulo, ...) (T), no están fusionados (U), son desconocidos (X) o se han roto sus pares (B). Se puede usar cualquier combinación de los caracteres de filtro (incluido ninguno). Cuando se agrega * (All-or-none) a la combinación, todas las rutas se seleccionan si hay algún archivo que coincida con otros criterios en la comparación; Si no hay ningún archivo que coincida con otros criterios, no se selecciona nada.
Además, estas letras mayúsculas se pueden descartar para excluir. Por ejemplo, --diff-filter = ad excluye las rutas agregadas y eliminadas.
Si también desea enumerar el estado (p. Ej., A / M), cambie --name-onlya --name-status.
La lista de modificaciones no preparadas se puede obtener usando git statusy el grepcomando como a continuación. Algo como git status -s | grep M:
root@user-ubuntu:~/project-repo-directory# git status -s | grep '^ M'
M src/.../file1.js
M src/.../file2.js
M src/.../file3.js
....
Con git showusted puede obtener un resultado similar. Para ver el commit (como se ve a la git logvista) con la lista de archivos incluidos, use:
git show --name-only [commit-id_A]^..[commit-id_B]
¿Dónde [commit-id_A]está la confirmación inicial y [commit-id_B]es la última confirmación de lo que desea mostrar?
Atención especial con ^símbolo. Si no pone eso, la información commit-id_A no se desplegará.
Si desea verificar los archivos modificados, debe ocuparse de muchas cosas pequeñas, como cuál será el mejor para usar, como si desea verificar cuáles de los archivos cambiados simplemente escriba
estado de git: mostrará los archivos con cambios
entonces, si desea saber qué cambios se deben realizar, puede verificarlos de alguna manera,
git diff: mostrará todos los cambios en todos los archivos
es bueno solo cuando se modifica un solo archivo
y si desea verificar un archivo en particular, use
git diff