upstream - migrate svn to git with branches
Cómo tener git log mostrar nombres de archivos como svn log-v (7)
Lo uso a diario para mostrar el historial con archivos que han cambiado:
git log --stat --pretty=short --graph
Para que sea breve, agregue un alias en su .gitconfig
haciendo:
git config --global alias.ls ''log --stat --pretty=short --graph''
El registro de SVN tiene un modo "-v" que genera nombres de archivos de archivos cambiados en cada confirmación, de esta manera:
jes5199$ svn log -v ------------------------------------------------------------------------ r1 | jes5199 | 2007-01-03 14:39:41 -0800 (Wed, 03 Jan 2007) | 1 line Changed paths: A /AUTHORS A /COPYING A /ChangeLog A /EVOLUTION A /INSTALL A /MacOSX
¿Hay una forma rápida de obtener una lista de archivos modificados en cada confirmación en git?
Para nombres de ruta completos de archivos modificados:
git log --name-only
Para los nombres de ruta completos y el estado de los archivos modificados:
git log --name-status
Para nombres de rutas abreviados y una diferencia de archivos modificados:
git log --stat
Hay muchas más opciones, echa un vistazo a los documentos .
Si desea obtener los nombres de archivo solo sin el resto del mensaje de confirmación, puede utilizar:
git log --name-only --pretty=format: <branch name>
Esto se puede ampliar para usar las diversas opciones que contienen el nombre del archivo:
git log --name-status --pretty=format: <branch name>
git log --stat --pretty=format: <branch name>
Una cosa a tener en cuenta al usar este método es que hay algunas líneas en blanco en la salida que deberán ignorarse. El uso de esto puede ser útil si desea ver los archivos que se han cambiado en una sucursal local, pero aún no se ha enviado a una sucursal remota y no hay garantía de que ya se haya retirado la última desde el control remoto. Por ejemplo :
git log --name-only --pretty=format: my_local_branch --not origin/master
Mostraría todos los archivos que se han cambiado en la rama local, pero que aún no se han fusionado con la rama maestra en el control remoto.
Yo uso esto:
git log --name-status <branch>..<branch> | grep -E ''^[A-Z]/b'' | sort | uniq
que genera solo una lista de archivos y su estado (agregado, modificado, eliminado):
A sites/api/branding/__init__.py
M sites/api/branding/wtv/mod.py
...
git diff --stat HEAD^!
muestra los archivos modificados y los conteos de líneas agregados / eliminados para el último compromiso ( HEAD
).
Me parece que no hay un solo comando para obtener resultados concisos que consistan solo en nombres de archivos y sumas de líneas agregadas y eliminadas para varios confirmaciones a la vez, así que creé mi propio script de bash para eso:
#!/bin/bash
for ((i=0; i<=$1; i++))
do
sha1=`git log -1 --skip=$i --pretty=format:%H`
echo "HEAD~$i $sha1"
git diff --stat HEAD~$(($i+1)) HEAD~$i
done
Para ser llamado por ejemplo. ./changed_files 99
para obtener los cambios en forma concisa de HEAD
a HEAD~99
. Se puede canalizar por ejemplo. a less
git show
es también un gran comando.
Es algo así como svn diff
, pero puedes pasarlo como una guía de confirmación y verlo.
NOTA: git whatchanged
está en desuso, use git log
lugar
Se recomienda a los nuevos usuarios que usen git-log [1] en su lugar. El comando
whatchanged
es esencialmente el mismo que git-log [1], pero por defecto muestra la salida del formato en bruto diff y omite las fusiones.El comando se mantiene principalmente por razones históricas; los dedos de muchas personas que aprendieron Git mucho antes de que Git
git log
fuera inventado leyendo la lista de correo del kernel de Linux están capacitados para escribirlo.
Puede usar el comando git whatchanged --stat
para obtener una lista de archivos que cambiaron en cada confirmación (junto con el mensaje de confirmación).