tool not name displayed configured changes branches because all git difftool

not - git difftool, abre todos los archivos diff inmediatamente, no en serie



git show diff file (12)

Encontré este método (GitDiff.bat y GitDiff.rb) que copia los archivos a direcciones temporales antiguas / nuevas y luego compara una carpeta con ellas.

Pero prefiero ver los archivos de trabajo directamente (desde el directorio de trabajo), ya que BeyondCompare tiene la útil función de poder editar el archivo desde la ventana de diferencias, lo cual es ideal para una limpieza rápida.

Edición: un método similar aquí en respuesta a mi pregunta en la lista de correo de git.

El comportamiento predeterminado de git diff es abrir cada archivo diff en serie (esperar a que se cierre el archivo anterior antes de abrir el archivo 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 de BC.

Esto facilitaría la revisión de un conjunto complejo de cambios; desplácese hacia atrás y hacia adelante entre los archivos de diferencias e ignore los archivos sin importancia.


Esto es lo que decidí ...

Copie el siguiente código en un archivo llamado git-diffall (sin extensión):

#!/bin/sh git diff --name-only "$@" | while read filename; do git difftool "$@" --no-prompt "$filename" & done

Coloque el archivo en la carpeta cmd de su directorio de instalación de git (por ejemplo, C:/Program Files (x86)/Git/cmd )

Y usa como si fueras git diff :

git diffall git diffall HEAD git diffall --cached git diffall rev1..rev2 etc...

Notas: La clave para ello es & 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.


He escrito un script de powershell que duplicará dos árboles de trabajo y lo comparará con DiffMerge. Así que puedes hacer:

GitNdiff master~3 .

Para comparar la rama maestra hace tres registros con el árbol de trabajo actual, por ejemplo.

Es brillante y nuevo y probablemente lleno de bichos. 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


Los siguientes trabajos con meld y kdiff3.

git difftool --dir-diff origin/branch1..origin/branch2

Abre todos los archivos en una ventana que puede navegar con facilidad. Se puede utilizar con conjuntos de cambios en lugar de origen / nombre de rama

por ejemplo: git difftool --dir-diff origin/master..24604fb72f7e16ed44115fbd88b447779cc74bb1


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 del archivo araxisgitdiff que se entrega con Araxis Merge para Mac OS X.

https://github.com/sorens/git-diffall


Puedes usar gitk y ver todas las diferencias al mismo tiempo.


Si todo lo que desea hacer es abrir todos los archivos que están modificados actualmente, intente algo como:

vi $(git status | sed -n ''/.*modified: */s///p'')

Si está realizando "conjuntos complejos de cambios", es posible que desee reconsiderar su flujo de trabajo. Una de las características realmente interesantes de git es que facilita al desarrollador la reducción de conjuntos de cambios complejos a una serie de parches simples. En lugar de intentar editar todos los archivos que están modificados actualmente, es posible que desee examinar

git add --patch lo que te permitirá organizar selectivamente tíos.


Notado aquí que Araxis Merge tiene una opción de comando ''-nowait'':

-nowait Evita que la comparación espere a que se cierre una comparación

Tal vez esto devuelva un código de salida inmediata y funcionaría, ¿alguien experimentó esto? No puedo encontrar una opción similar para BeyondCompare ...


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 algunos de los cambios, pero no todos, están organizados. En el caso de conflictos, incluso habrá cuatro paneles.

Invocalo con

diffuse -m

en su copia de trabajo Git.

Si me preguntas, la mejor diferencia visual que he visto durante una década. (Y he intentado fusionar, también.)


meld tiene una característica interesante que, si le asigna un directorio bajo el 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 haga que descubra el VCS que configurar su VCS para lanzar meld . Además, puede usar el mismo comando sin importar qué VCS esté usando su proyecto, lo cual es genial si cambia mucho entre ellos.

El único inconveniente es que Meld escanea los cambios más lentamente que los cambios pasados ​​de git / hg / svn, aunque estoy seguro de que la lentitud para ser un problema dependerá de cómo se use.


git meld => github.com/wmanley/git-meld es un script impresionante que abrirá una clara diferencia de todos los archivos en una sola ventana.


A partir de git v1.7.11, puedes usar git difftool --dir-diff para realizar un directorio diff.

Esta función funciona bien con Meld 3.14.2, por ejemplo, y le permite explorar todos los archivos modificados:

git difftool --dir-diff --tool=meld HEAD~ HEAD

Esta es una función útil de Bash:

git-diff-meld() ( git difftool --dir-diff --tool=meld "${1:-HEAD~}" "${2:-HEAD}" )

La respuesta que sigue se aplica a las instalaciones de git anteriores a v1.7.11.

Esta misma pregunta se hizo en la lista de correo de git .

Reuní 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 script git-diffall se incluye en la contrib de la instalación estándar de git.

Para versiones anteriores a v1.7.10, puede instalar desde el proyecto git-diffall en GitHub .

Aquí está la descripción del proyecto:

El script git-diffall proporciona un mecanismo de diferencias basado en directorios para git. El script se basa en la opción de configuración diff.tool para determinar qué visor se usa.

Este script es compatible con todos los formularios utilizados para especificar un rango de revisiones para diferenciar:

1) git diffall : muestra la diferencia entre el árbol de trabajo y los cambios en etapas
2) git diffall --cached [<commit>] : muestra la diferencia entre los cambios en etapas y HEAD (u otro commit con nombre)
3) git diffall <commit> : muestra diff entre el árbol de trabajo y el commit con nombre
4) git diffall <commit> <commit> : muestra diff entre dos confirmaciones con nombre
5) git diffall <commit>..<commit> : igual que arriba
6) git diffall <commit>...<commit> : muestra los cambios en la rama que contiene y hasta la segunda, comenzando en un ancestro común de ambos <commit>

Nota: todas las formas toman un limitador de ruta opcional [--] [<path>]

Este script se basa en un ejemplo proporcionado por Thomas Rast en la lista de Git .