Cuando escribo "git diff", me gustaría ver un diff de lado a lado, como con "diff -y", o me gustaría mostrar el diff en una herramienta de diferencias interactiva como "kdiff3". ¿Cómo se puede hacer esto?
git
git-diff
code-visualization
Miguel
fuente
fuente
Respuestas:
Aunque Git tiene una implementación interna de diff, puede configurar una herramienta externa en su lugar.
Hay dos formas diferentes de especificar una herramienta de diferencia externa:
GIT_EXTERNAL_DIFF
y losGIT_DIFF_OPTS
variables de entorno.git config
Ver también:
git diff --help
Al hacer un
git diff
, Git verifica tanto la configuración de las variables de entorno anteriores como su.gitconfig
archivo.Por defecto, Git pasa los siguientes siete argumentos al programa diff:
Por lo general, solo necesita los parámetros de archivo antiguo y archivo nuevo. Por supuesto, la mayoría de las herramientas diff solo toman dos nombres de archivo como argumento. Esto significa que debe escribir una pequeña secuencia de comandos de envoltura, que toma los argumentos que Git proporciona a la secuencia de comandos y los entrega al programa externo de git que elija.
Digamos que pones tu wrapper-script debajo
~/scripts/my_diff.sh
:entonces necesita hacer que ese script sea ejecutable:
luego debe decirle a Git cómo y dónde encontrar su script de envoltorio de diferencias personalizado. Tiene tres opciones para hacerlo: (prefiero editar el archivo .gitconfig)
Utilizando
GIT_EXTERNAL_DIFF
,GIT_DIFF_OPTS
por ejemplo, en su archivo .bashrc o .bash_profile puede establecer:
Utilizando
git config
use "git config" para definir dónde se puede encontrar su script de envoltura:
Editando tu
~/.gitconfig
archivopuedes editar tu
~/.gitconfig
archivo para agregar estas líneas:Nota:
De manera similar a la instalación de su herramienta de diferencias personalizada, también puede instalar una herramienta de fusión personalizada, que podría ser una herramienta de fusión visual para ayudar a visualizar mejor la fusión. (ver la página progit.org)
Ver: http://fredpalma.com/518/visual-diff-and-merge-tool/ y https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration
fuente
meld
,?meld
puede configurar la versión para hacer un directorio diff, donde puedo elegir para qué archivo (s) quiero ver el diff? Actualmente ejecuta unmeld
comando separado para cada archivo, y tengo que salirmeld
para ver el siguiente archivo. Prefieromeld
mostrarme una lista de directorio de archivos modificados como se comporta cuandomeld
se usa desde Mercurial.Prueba git difftool
Usar en
git difftool
lugar degit diff
. Nunca volverásACTUALIZAR para agregar un ejemplo de uso:
Aquí hay un enlace a otro stackoverflow que habla sobre
git difftool
: ¿Cómo veo la salida 'git diff' con mi herramienta / visor diff preferido?Para las versiones más recientes de
git
, eldifftool
comando admite muchas herramientas externas externas listas para usar. Por ejemplo,vimdiff
se admite automáticamente y se puede abrir desde la línea de comandos:Otras herramientas externas de soporte compatibles se enumeran a través de
git difftool --tool-help
aquí es un ejemplo de salida:fuente
This message is displayed because 'diff.tool' is not configured.
. Tal vez actualice la respuesta con un mínimo de cómo configurar esta cosa, para que muestre diferencias lado a lado en el terminal, ¿qué es lo que solicitó OP? Las herramientas GUI son bastante inútiles en el servidor remoto donde te conectas usando ssh.git difftool
convimdiff
no siempre se alinean los dos archivos / buffers correctamente.git difftool -y
O uso para evitar el avisogit difftool
en Windows y Linux: stackoverflow.com/a/48979939/4561887También puedes intentarlo
git diff --word-diff
. No es exactamente uno al lado del otro, pero de alguna manera es mejor, por lo que podría preferirlo a su necesidad real de lado a lado.fuente
git diff --word-diff=color
--word-diff=color
me da un error de opción no válida. ¿En qué versión se introdujo?git diff --color-words
funciona.git diff --color-words
es el camino a seguir en las versiones modernas de git.ydiff
Anteriormente llamada
cdiff
, esta herramienta puede mostrar diferencias de lado a lado , incrementales y coloridas .En lugar de hacer
git diff
, haz:Esto se iniciará
ydiff
en modo de visualización de lado a lado para cada uno de los archivos con diferencias.Instalar con:
-o-
Para
git log
, puedes usar:-w0
detecta automáticamente el ancho de su terminal. Consulte laydiff
página del repositorio de GitHub para obtener detalles y una demostración.Probado en Git 2.18.0, ydiff 1.1.
fuente
git diff | cdiff -s
con icdiff?ydiff -s
desde un git / SVN / hg espacio de trabajo, usted no tiene que canalizar en.cd <git repo>
y luego ejecutarydiff -ls <path/to/file>
Puede hacer una en paralelo
diff
usandosdiff
lo siguiente:donde
HEAD^
es un ejemplo que debe reemplazar con lo que quiera diferir.Encontré esta solución aquí, donde también hay otras sugerencias. Sin embargo, esta respuesta es la pregunta del OP de manera sucinta y clara.
Ver man git-difftool para una explicación de los argumentos.
Teniendo en cuenta los comentarios, puede crear un
git sdiff
comando útil escribiendo el siguiente script ejecutable:Guardarlo como
/usr/bin/git-sdiff
ychmod -x
él. Entonces podrás hacer esto:fuente
tput cols
en lugar, por ejemplo:git difftool -x "sdiff -s -w $(tput cols)"
.entonces simplemente:
fuente
Si desea ver diferencias de lado a lado en un navegador sin involucrar a GitHub, puede disfrutar de git webdiff , un reemplazo directo para
git diff
:Esto ofrece una serie de ventajas sobre las herramientas de interfaz gráfica de usuario tradicionales, ya
tkdiff
que puede darle resaltado de sintaxis y mostrar diferencias de imagen.Lea más sobre esto aquí .
fuente
Yo uso colordiff .
En Mac OS X, instálelo con
En Linux es posible
apt get install colordiff
o algo así, dependiendo de su distribución.Luego:
O crea un alias
Entonces puedes usarlo
Lo llamé "diffy" porque
diff -y
es la diferencia de lado a lado en unix. Colordiff también agrega colores, que son más agradables. En la opción-ydw
,y
es para el lado a lado,w
es para ignorar los espacios en blanco, yd
es para producir el mínimo diff (generalmente obtienes un mejor resultado como diff)fuente
-y
para omitir laLaunch 'colordiff' [Y/n]:
solicitud.git alias diffy "difftool --extcmd=\"colordiff -ydw\""
? ¿No debería sergit config --global alias.diffy "difftool --extcmd=\"colordiff -ydw\""
?Para unix, combinando solo
git
y el incorporadodiff
:Por supuesto, puede reemplazar HEAD con cualquier otra referencia de git, y probablemente desee agregar algo como
-W 170
al comando diff.Esto supone que solo está comparando el contenido de su directorio con una confirmación anterior. La comparación entre dos confirmaciones es más compleja. Si su shell es
bash
puede usar "sustitución de proceso":donde
REF1
yREF2
son referencias de git: etiquetas, ramas o hashes.fuente
¡Personalmente me gusta mucho icdiff !
Si estás en
Mac OS X
laHomeBrew
, acaba de hacerbrew install icdiff
.Para obtener las etiquetas de archivo correctamente, además de otras características interesantes, tengo en mi
~/.gitconfig
:Y lo uso como:
git difftool
fuente
Esta pregunta apareció cuando estaba buscando una forma rápida de usar la forma integrada de git para localizar diferencias. Mi criterio de solución:
Encontré esta respuesta para obtener color en git.
Para obtener la diferencia de lado a lado en lugar de la diferencia de línea, modifiqué la excelente respuesta de mb14 a esta pregunta con los siguientes parámetros:
Si no le gusta el extra [- o {+,
--word-diff=color
puede usar la opción .Eso ayudó a obtener una comparación adecuada tanto con el texto json y xml como con el código java.
En resumen, las
--word-diff-regex
opciones tienen una visibilidad útil junto con la configuración de color para obtener una experiencia de código fuente de color lado a lado en comparación con la diferencia de línea estándar, al navegar a través de archivos grandes con pequeños cambios de línea.fuente
Varios otros ya mencionaron cdiff para la diferenciación de git de lado a lado, pero nadie dio una implementación completa.
Configurar cdiff:
Edite ~ / .gitconfig insertando estas líneas:
El buscapersonas es necesario para que cdiff funcione con Diff, de todos modos es esencialmente un buscapersonas, por lo que está bien. Difftool funcionará independientemente de esta configuración.
El alias show es necesario porque git show solo admite herramientas diff externas a través de argumentos.
El '#' al final del comando externo diff es importante. El comando diff de Git agrega un $ @ (todas las variables diff disponibles) al comando diff, pero solo queremos los dos nombres de archivo. Entonces llamamos a esos dos explícitamente con $ 2 y $ 5, y luego ocultamos los $ @ detrás de un comentario que de lo contrario confundiría a sdiff. Resultando en un error que se parece a:
Comandos Git que ahora producen una diferencia de lado a lado:
Uso de cdiff:
Ahora tiene diff de lado a lado a través de git diff y difftool. Y tiene el código fuente de cdiff python para la personalización del usuario avanzado si lo necesita.
fuente
Aquí hay un enfoque. Si pasa menos, el ancho xterm se establece en 80, que no es tan caliente. Pero si continúa con el comando, por ejemplo, COLS = 210, puede utilizar su xterm expandido.
fuente
Abra Intellij IDEA , seleccione una o varias confirmaciones en la ventana de la herramienta "Control de versiones", explore los archivos modificados y haga doble clic en ellos para inspeccionar los cambios uno al lado del otro para cada archivo.
Con el lanzador de línea de comandos incluido, puede traer IDEA a cualquier lugar con un simple
idea some/path
fuente
Hay muchas buenas respuestas en este hilo. Mi solución para este problema fue escribir un script.
Nombre este 'git-scriptname' (y hágalo ejecutable y póngalo en su RUTA, como cualquier script), y puede invocarlo como un comando git normal ejecutando
La funcionalidad real es solo la última línea. Aquí está la fuente:
fuente
Esta puede ser una solución algo limitada, pero hace el trabajo usando el
diff
comando del sistema sin herramientas externas:--suppress-common-lines
(sidiff
admite la opción).diff
marcadores habituales--width=term-width
; en Bash puede obtener el ancho como$COLUMNS
otput cols
.Esto también se puede incluir en un script de ayuda git para mayor comodidad, por ejemplo, para un uso como este:
fuente