working with upstream unable migrar information from determine comparacion branches svn git logging

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).

Referencias