El proyecto de código abierto Trac tiene un resaltador de diferencias excelente: ¡resalta las líneas cambiadas y los bytes cambiados en cada línea cambiada! Consulte aquí o aquí para ver ejemplos.
¿Hay alguna forma de utilizar el mismo color de resaltado (es decir, líneas cambiadas y bytes cambiados también ) en el terminal bash git
, o vim
para la salida diff (archivo de parche)?
Respuestas:
El
diff-highlight
script contrib de Perl produce una salida tan similar a la de las capturas de pantalla de Trac que es probable que Trac la esté usando:Instalar con:
Mueva el archivo
diff-highlight
al~/bin/
directorio (o donde sea que$PATH
esté) y luego agregue lo siguiente a su~/.gitconfig
:Instalación de copia única y pegado sugerida por @cirosantilli:
fuente
git add -p
. Por favor, añada también:git config --global interactive.diffFilter diff-highlight
Mientras usa
git diff
ogit log
y posiblemente otros, use la opción--word-diff=color
(también hay otros modos para diferencias de palabras por cierto)fuente
--word-diff=color
es realmente mejor (especialmente congit config color.diff.old "red reverse"
ygit config color.diff.new "green reverse"
), pero no es lo que quiero :(git add --patch
: stackoverflow.com/questions/10873882/…diff-highlight
es que funciona bien tanto para diferencias de palabra como para diferencias de línea.diff-so-fancy
es undiff
iluminador diseñado para ojos humanos.Elimina los principales
+
/-
que son molestos para cortar / pegar y deja secciones claras entre archivos.Coloreado
git
(izquierda) vsdiff-so-fancy
(derecha - tenga en cuenta los aspectos destacados a nivel de personaje):Si desea la
diff-so-fancy
salida (del lado derecho) pero no restringida a los archivos en ungit
repositorio, agregue la siguiente función.bashrc
para usarla en cualquier archivo:P.ej:
Resaltado de nivel de carácter y
diff
formato estándarSi no le gusta el formato no estándar de
diff-so-fancy
, pero aún deseagit
resaltar a nivel de carácter , use eldiff-highlight
que tomarágit
la salida y producirá la salida de formato estándar realmente bonitadiff
:Para usarlo por defecto desde
git
, agregue a su.gitconfig
:La
[pager]
sección le dicegit
que canalice su salida ya coloreada adiff-highlight
qué colores a nivel de carácter, y luego pagina la salida en menos (si es necesario), en lugar de simplemente usar el valor predeterminadoless
.fuente
gitconfig
opciones?dsf()
.El comportamiento que desea ahora está disponible en git (como se señaló en un comentario de naught101). Para habilitarlo, debe configurar su buscapersonas en
¿Dónde
/usr/share/doc/git/contrib/diff-highlight/diff-highlight
está la ubicación del script resaltador en Ubuntu 13.10 (no tengo idea de por qué está en unadoc
carpeta)? Si no está en su sistema, intente usarlolocate diff-highlight
para encontrarlo. Tenga en cuenta que el script de resaltado no es ejecutable (al menos en mi máquina), de ahí el requisito deperl
.Para usar siempre el resaltador para los diversos comandos tipo diff, simplemente agregue lo siguiente a su
~/.gitconfig
archivo:Agregué esto como una nueva respuesta, el comentario de naught101 está enterrado y porque la configuración no es tan trivial como debería ser y al menos en la versión de Ubuntu que tengo las instrucciones en el README no funcionan.
fuente
git add -p
(modo interactivo). Sin embargo, no sé cómo se puede arreglar eso, simplemente agregar agregar a la lista hace que se cuelgue.git config interactive.diffFilter diff-highlight
diff-highlight
no estaba en mi camino, así que tuve que localizarlo primero. Detalles en mi respuesta a continuación.Se ha distribuido una utilidad para diferencias basadas en bytes con Git oficial desde v1.7.8 1 . Solo tiene que ubicar dónde está instalado en su máquina y habilitarlo.
Encuentra dónde está instalado Git
/usr/local/opt/git
cd / && pwd -W
para buscar el directorio de instalación.ll $(which git)
olocate git
debería ayudarlo.Enlace
diff-highlight
a su directorio bin para que su PATH pueda encontrarloGIT_HOME='/usr/local/opt/git/' # Use the value from the first step. ln -s "${GIT_HOME}/share/git-core/contrib/diff-highlight/diff-highlight" \ '/usr/local/bin/diff-highlight'
Habilítelo en su configuración de Git
git config --global interactive.diffFilter diff-highlight # Use on interactive prompts git config --global pager.diff "diff-highlight | less" # Use on git diff git config --global pager.log "diff-highlight | less" # Use on git log git config --global pager.show "diff-highlight | less" # Use on git show
1 Aquí está la versión v1.7.8 , pero se han realizado muchos cambios desde entonces.
fuente
which git
requiere que esté en el PATH en primer lugar, por lo que no funcionará si no lo es :-)diff-highlight
, en realidad no lo instala , por lo que el paso del enlace simbólico es realmente necesario (al menos en macOS). Si encuentra que no es necesario para su plataforma, nuevamente no dude en actualizar la respuesta. Mientras tanto,which git
por lo general funciona, porque Git hace instalar elgit
alguna parte binaria en el camino..perl
. La compilación es trivial: simplemente ejecútelasudo make
en eldiff-highlight
directorio.Yo uso la
--color-words
opción y funciona bien para mí:fuente
como dice @dshepherd :
Pero
diff-highlight
se encuentra en DOC y no está disponible en shell.Para instalar
diff-highlight
en su~/bin
directorio, siga los siguientes pasos (esto guardará su escritura):Luego configure su
.gitconfig
documento oficial como dice:UPD
También puede probar el siguiente en el último
git
sin ninguna instalación:Mas complejo:
fuente
Emacs tiene la función ediff-patch-buffer que debería satisfacer sus necesidades.
Abra el archivo sin parchear en emacs escriba ESC-x, ediff-patch-buffer.
Siga las indicaciones y debería ver una comparación resaltada de las versiones parcheadas y originales de su archivo.
Según su comentario, lo siguiente le dará una solución bash que solo requiere dwdiff:
fuente
colordiff -u <(patch original_file -i patch_file -o -) <(cat original_file)
pero esto solo resaltará las líneas cambiadas, no las mordidas ...dwdiff -c --diff-input diff_file
Difícil
GitLab está usando Diffy https://github.com/samg/diffy (Ruby) para lograr una salida similar a GitHub y diff-highlight:
Diffy crea la diferencia usando el mismo algoritmo ad Git y admite diferentes tipos de resultados, incluida la salida HTML que usa GitLab:
Salida:
Observe cómo
strong
se agregó a los bytes modificados.fuente
Sí, Vim hace esto, incluido el resaltado del texto cambiado dentro de una línea.
Consulte
:h diff
y:h 08.7
para obtener más detalles sobre cómo diferenciar archivos.Vim utiliza un algoritmo bastante simple para resaltar. Busca en la línea el primer carácter cambiado y luego el último carácter cambiado, y simplemente resalta todos los caracteres entre ellos.
Esto significa que no puede tener varios aspectos destacados por línea; muchas decisiones de diseño en Vim priorizan la eficiencia.
fuente
vimdiff file1 file2
mostrará la diferencia de caracteres entre dos archivos.vimdiff es una herramienta de diferencias incluida en vim. (Vim debería haber sido compilado con la opción + diff, para asegurarse de que pueda verificar
:version
)También puede iniciarlo desde dentro de vim. Consulte
:help diff
para obtener más información y comandos.fuente
vimdiff file.old file.new -c 'FormatCommand diffformat' -c 'w! file.diff.html' -c 'qa!'
.screen -D -m
o agregar&>/dev/null
(la variante / dev / null a veces produce errores extraños) si no desea ver el terminal parpadeando) y saldrá de vim después de que se complete el formateo, pero es puro vimscript y incluso con mis optimizaciones es muy lento para archivos grandes.Nota : esto es un duplicado de lo que se encuentra aquí: ¿Cómo mejorar el resaltado de diferencias de git? . Sin embargo, publicar mi respuesta aquí también, ya que puede ser útil para algunas personas que encuentran directamente este hilo :)
Como se dijo en algunas respuestas anteriores, esto es posible solo con cosas de git. Publico esto porque las instrucciones pueden ser un poco más fáciles de seguir dependiendo de su sistema, pero esto es similar a varias otras respuestas.
Una solución que se basa exclusivamente en git y sus contribuciones. Esto no requiere archivos adicionales a los que vienen con git . Todas las explicaciones son para Ubuntu (probado en 18.04LTS), deberían funcionar de manera similar en otros sistemas Linux:
en mi sistema, la única respuesta válida es:
~/.gitconfig
para obtener el resultado que desea, agregando (tenga en cuenta que estos son TABS, no 4 espacios):fuente