tag remove practices crear best git vim diff highlight word-diff

remove - git tags best practices



resaltar líneas cambiadas y bytes modificados en cada línea cambiada (10)

Proyecto de código abierto Trac tiene un resaltador de diferencias excelente: resalta las líneas cambiadas y los bytes modificados en cada línea cambiada . Consulte https://trac.transmissionbt.com/changeset/12148 o http://trac.gajim.org/changeset/297ad7711d20bfee1491768640d9bc5384464363 para obtener ejemplos.

¿Hay alguna manera de utilizar el mismo resaltado de color (es decir, líneas modificadas y bytes modificados también ) en el terminal de bash, git o vim para la salida de diff (patch-file) ?


Compartí un prototipo que podría ayudar, aquí está https://coderwall.com/p/ydluzg

El script de contrl Perl de diff-highlight produce un resultado tan similar al de las capturas de pantalla de Trac que es probable que Trac lo esté usando:

Instalar con:

wget https://raw.githubusercontent.com/git/git/fd99e2bda0ca6a361ef03c04d6d7fdc7a9c40b78/contrib/diff-highlight/diff-highlight && chmod +x diff-highlight

Mueva el archivo diff-highlight al directorio ~/bin/ (o donde su $PATH sea), y luego agregue lo siguiente a su ~/.gitconfig :

[pager] diff = diff-highlight | less log = diff-highlight | less show = diff-highlight | less

Instalación de pegado de copia única sugerida por @cirosantilli:

cd ~/bin curl -O https://raw.githubusercontent.com/git/git/fd99e2bda0ca6a361ef03c04d6d7fdc7a9c40b78/contrib/diff-highlight/diff-highlight chmod +x diff-highlight git config --global pager.log ''diff-highlight | less'' git config --global pager.show ''diff-highlight | less'' git config --global pager.diff ''diff-highlight | less''


El comportamiento que desea ahora está disponible en git (como se señaló en un comentario de naught101). Para habilitarlo, debe configurar su buscapersonas para

perl /usr/share/doc/git/contrib/diff-highlight/diff-highlight | less

donde /usr/share/doc/git/contrib/diff-highlight/diff-highlight es la ubicación de la secuencia de comandos resaltador en Ubuntu 13.10 (no tengo idea de por qué está en una carpeta doc ). Si no está allí en su sistema, intente utilizar locate diff-highlight para encontrarlo. Tenga en cuenta que el guión de resaltado no es ejecutable (al menos en mi máquina), de ahí el requisito de perl .

Para usar siempre el resaltador para los diversos comandos de tipo diff, simplemente agregue lo siguiente a su archivo ~/.gitconfig :

[pager] log = perl /usr/share/doc/git/contrib/diff-highlight/diff-highlight | less show = perl /usr/share/doc/git/contrib/diff-highlight/diff-highlight | less diff = perl /usr/share/doc/git/contrib/diff-highlight/diff-highlight | less

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 archivo README no funcionan.


Emacs tiene la función ediff-patch-buffer que debería satisfacer sus necesidades.

Abra el archivo sin patches en emacs tipo ESC-x, ediff-patch-buffer.

Siga las instrucciones y verá una comparación destacada 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:

#!/bin/bash paste -d''/n'' <(dwdiff -2 -L -c <(cat $2) <(patch $2 -i $1 -o -)) <(dwdiff -1 -L -c <(cat $2) <(patch $2 -i $1 -o -))| uniq


Mientras usa git diff o git log y posiblemente otros, use la opción --word-diff=color (también hay otros modos para diferencia de palabras por cierto)


Sí, Vim lo hace incluyendo el resaltado del texto modificado dentro de una línea.
Vea :h diff y :h 08.7 para más detalles sobre cómo diferenciar archivos.

Vim usa un algoritmo bastante simple para resaltarlo. 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 múltiples reflejos por línea: muchas decisiones de diseño en Vim priorizan la eficiencia.


Uso la opción --color-words y funciona bien para mí:

$ git diff --color-words | less -RS


como @dshepherd says :

El comportamiento que desea ahora está disponible en git

Pero diff-highlight se encuentra en DOC y no está disponible desde shell.
Para instalar diff-highlight en su directorio ~/bin siga los siguientes pasos (Esto guardará su tipeo):

$ locate diff-highlight $ cd /usr/share/doc/git/contrib/diff-highlight #or path you locate $ sudo make $ mv diff-highlight ~/bin

Luego configura tu .gitconfig como dice el documento oficial:

[pager] log = diff-highlight | less show = diff-highlight | less diff = diff-highlight | less

UPD
También puedes probar el último git sin ninguna instalación:

git diff --color-words=.

Mas complejo:

git diff --color-words=''[^[:space:]]|([[:alnum:]]|UTF_8_GUARD)+''


diff-so-fancy es un difusor de luz diseñado para globos oculares humanos.

Quita los principales + / - que son molestos para cortar / pegar y hace secciones claras entre los archivos.

git coloreado (izquierda) vs diff-so-fancy (a la derecha - tenga en cuenta los aspectos más destacados del nivel de personaje):

Si desea la salida diff-so-fancy (lado derecho) pero no está restringida a los archivos en un repositorio de git , agregue la siguiente función a su .bashrc para usarla en cualquier archivo:

dsf() { git diff --no-index --color "$@" | diff-so-fancy; }

P.ej:

dsf original changed-file

Nivel de resaltado de personajes y formato de diff estándar

Si no te gusta el formato no estándar de diff-so-fancy , pero aún quieres resaltar git nivel de personaje, usa diff-highlight que tomará la salida de git y producirá el resultado de formato diff-so-fancy bastante normal:

Para usarlo por defecto de git , .gitconfig a tu .gitconfig :

[color "diff-highlight"] oldNormal = red bold oldHighlight = red bold 52 newNormal = green bold newHighlight = green bold 22 [pager] diff = diff-highlight | less -FRXsu --tabs=4

La sección [pager] le dice a git que canalice su salida ya coloreada para diff-highlight que se diff-highlight a nivel de personaje, y luego coloca la salida en menos (si es necesario), en lugar de simplemente usar el valor predeterminado.


vimdiff file1 file2 mostrará la diferencia entre dos archivos.

vimdiff es una herramienta diff incluida en vim. (Vim debería haber sido compilado con la opción + diff, para asegurarse de que puede verificar con :version )

También puedes ejecutarlo desde dentro de vim. Ver :help diff para más información y comandos.


Diffy

GitLab está utilizando Diffy https://github.com/samg/diffy (Ruby) para lograr resultados similares a GitHub y diff-highlight:

Diffy crea la diferencia utilizando el mismo algoritmo ad Git, y admite diferentes tipos de salidas, incluida la salida HTML que utiliza GitLab:

gem install diffy echo '' require "diffy" puts Diffy::Diff.new("a b c/n", "a B c/n").to_s(:html) '' | ruby

Salida:

<div class="diff"> <ul> <li class="del"><del>a <strong>b</strong> c</del></li> <li class="ins"><ins>a <strong>B</strong> c</ins></li> </ul> </div>

Tenga en cuenta qué tan strong se agregó a los bytes modificados.