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.