El comportamiento predeterminado de git diff es abrir cada archivo diff en serie (espere a que se cierre el archivo anterior antes de abrir el siguiente).
Estoy buscando una manera de abrir todos los archivos a la vez; en BeyondCompare, por ejemplo, esto abriría todos los archivos en pestañas dentro de la misma ventana BC.
Esto facilitaría la revisión de un conjunto complejo de cambios; deslice hacia atrás y hacia adelante entre los archivos diff e ignore los archivos sin importancia.
Respuestas:
A partir de
git
v1.7.11, puede utilizargit difftool --dir-diff
para realizar un directorio diff.Esta característica funciona bien con Meld 3.14.2 por ejemplo, y le permite explorar todos los archivos modificados:
Esta es una práctica función Bash:
La respuesta que sigue se aplica a las
git
instalaciones anteriores a v1.7.11.Esta misma pregunta se hizo en la lista de correo de git .
Arme un script de shell basado en ese hilo de correo electrónico que realiza una diferencia de directorio entre confirmaciones arbitrarias.
A partir de git v1.7.10, el
git-diffall
script se incluye en lacontrib
instalación estándar de git.Para versiones anteriores a v1.7.10, puede instalar desde el
git-diffall
proyecto en GitHub .Aquí está la descripción del proyecto:
fuente
git difftool --dir-diff
y más allá de la comparación): me puse en contacto con Scooter Software (autores de Beyond Compare) y me dijeron quebcompare.exe
no es una solución compatible y que puede causar problemas si hay más de un diferencial abierto a la vez. Planean agregar soporte para las diferencias de carpetabcomp.exe
en una versión futura (mientras tanto, continuaré usandobcompare.exe
como una solución no admitida).--dir-diff
funciona perfectamente con Meld. A partir de ahí, le permitirá seleccionar y ver diferencias para archivos individuales.Esto es lo que decidí ...
Copie el siguiente código en un archivo llamado
git-diffall
(sin extensión):Coloque el archivo en la
cmd
carpeta de su directorio de instalación de git (p. Ej.C:\Program Files (x86)\Git\cmd
)Y usa como lo harías
git diff
:Notas: La clave es el & param que le dice al comando diff externo que se ejecute en una tarea en segundo plano para que los archivos se procesen de inmediato. En el caso de BeyondCompare, esto abre una pantalla con cada archivo en su propia pestaña.
fuente
"$filename"
a"../$filename"
. Entonces funcionó perfectamente con Beyond Comparegit-diffall
archivo a laC:\Program Files\Git\cmd
carpeta? Hice exactamente lo que me$ git diffall git: 'diffall' is not a git command. See 'git --help'. Did you mean this? difftool
meld
tiene una característica ordenada que si le da un directorio bajo control de origen (Git, Mercurial, Subversion, Bazaar y probablemente otros), enumerará automáticamente todos los archivos modificados y puede hacer doble clic para ver las diferencias individuales.En mi opinión, es mucho más fácil escribir
meld .
y descifrar el VCS que configurar su VCS para que se iniciemeld
. Además, puede usar el mismo comando sin importar qué VCS esté usando su proyecto, lo cual es excelente si cambia mucho entre ellos.El único inconveniente es que la fusión es más lenta para buscar cambios que para pasar los cambios desde git / hg / svn, aunque estoy seguro de que si es lo suficientemente lento como para ser un problema dependerá de cómo lo esté usando.
fuente
git diff
elimina líneas en blanco, lo que no ofrece.Encontré este método (GitDiff.bat y GitDiff.rb) que copia los archivos en directorios temporales antiguos / nuevos y luego compara una carpeta en ellos.
Pero prefiero ver los archivos de trabajo directamente (desde el directorio de trabajo), ya que BeyondCompare tiene la práctica función de poder editar el archivo desde la ventana de diferencias, lo cual es ideal para realizar limpiezas rápidas.
Editar: un método similar aquí en respuesta a mi pregunta en la lista de correo de git.
fuente
git meld
=> https://github.com/wmanley/git-meld es un script increíble que abrirá una clara diferencia de todos los archivos en una sola ventana.fuente
Noté aquí que Araxis Merge tiene una opción de comando '-ahora':
Tal vez esto devuelva un código de salida inmediato y funcione, ¿alguien lo ha experimentado? No puedo encontrar una opción similar para BeyondCompare ...
fuente
Diffuse también tiene integración VCS. Interopera con una gran cantidad de otros VCS, incluidos SVN, Mercurial, Bazaar, ... Para Git, incluso mostrará tres paneles si se realizan algunos pero no todos los cambios. En el caso de conflictos, incluso habrá cuatro paneles.
Invocarlo con
en tu copia de trabajo de Git.
Si me preguntas, la mejor diferencia visual que he visto en una década. (Y también he intentado fusionar).
fuente
Si todo lo que quiere hacer es abrir todos los archivos que están actualmente modificados, intente algo como:
Si realiza confirmaciones de "conjuntos complejos de cambios", es posible que desee reconsiderar su flujo de trabajo. Una de las características realmente agradables de git es que facilita al desarrollador reducir los complejos conjuntos de cambios a una serie de parches simples. En lugar de intentar editar todos los archivos que están modificados actualmente, es posible que desee examinar
lo que te permitirá organizar selectivamente trozos.fuente
He escrito un script de PowerShell que duplicará dos árboles de trabajo y se comparará con DiffMerge. Entonces puedes hacer:
Para comparar la rama maestra hace tres registros con el árbol de trabajo actual, por ejemplo.
Es brillante y nuevo y probablemente lleno de errores. Un inconveniente es que los archivos en su árbol de trabajo que aún no se han agregado se copian en ambos árboles de trabajo. También puede ser lento.
http://github.com/fschwiet/GitNdiff
fuente
Para aquellos interesados en usar git-diffall en Mac OS X con Araxis, bifurqué el proyecto git-diffall en github y agregué un AppleScript que envuelve el comando Araxis Merge. Nota: este es un clon ligeramente modificado de
araxisgitdiff
archivo que se incluye con Araxis Merge para Mac OS X.https://github.com/sorens/git-diffall
fuente
Lo siguiente funciona con meld y kdiff3
Abre todos los archivos en una ventana que puede explorar con facilidad. Se puede usar con conjuntos de cambios en lugar de origen / nombre de sucursal
p.ej:
git difftool --dir-diff origin/master..24604fb72f7e16ed44115fbd88b447779cc74bb1
fuente
Puedes usar gitk y ver todas las diferencias al mismo tiempo
fuente