Me gusta el formato de salida de git diff
. El color y la +
/ -
representación de los cambios entre líneas es más fácil de leer que GNU diff.
Puedo ejecutar git diff
usando --no-index
flag fuera de un repositorio de git y funciona bien. Sin embargo, parece faltarle la --exclude
opción de excluir archivos o subdirectorios de un recursivo diff
.
¿Hay alguna manera de obtener lo mejor de ambos mundos? (opciones de color y +
/ -
formato git diff
y --exclude
opción de GNU diff).
He experimentado con colordiff
, pero todavía prefiero el formato de salida degit diff
newtext
en/etc/colordiff
. Creo que git usa verde?Respuestas:
No sé cómo hacer color, pero esto hará
+/-
más que<
y>
.fuente
diff -u file1 file2 | tig
.colordiff
desde su repositorio apt / yum / pacman y úselo.colordiff
: docs.aws.amazon.com/AWSEC2/latest/UserGuide/…colordiff
, también puedes obtener colorvim
definiendocdiff() { diff -u $@ | vim -R -; }
.También puede usar
git diff --no-index -- A B
(a través de la página de manual ).fuente
A
yB
difieren en comparación entre sí en lugar de donde cada archivo ha sido modificado en relación con su última revisión respectiva.git diff --no-index
es genial, pero como señaló el OP, carece de la--exclude
bandera, por lo que a menudo es de utilidad muy limitada.Instalar colordiff .
Actualice su ~ / .colordiffrc (copiando / etc / colordiffrc primero, si es necesario):
Úselo
colordiff -u file1 file2
para dos archivos ocolordiff -ruN path1 path2
para comparar rutas recursivamente.No es exactamente lo mismo, pero está muy cerca.
fuente
Esto es lo que sugiero y está bastante cerca
colordiff
: Tendrás que instalar estobrew install colordiff
en mi Macport install colordiff
en algunas Macsudo apt-get install colordiff
en Debian o Ubuntu-R
: esto le dice a Less que muestre colores en lugar de los códigos sin formato.En última instancia, lo usé
-w
porque no quería ver los espacios en blanco.Editar: según lo sugerido por @Ciprian Tomoiaga en el comentario, puede hacer que esto sea una función y ponerlo en su
~/.bashrc
archivo también.fuente
function gdiff () { diff -u $@ | colordiff | less -R; }
GNU
diff
tiene una--color
opción desde la versión 3.4 a finales de 2016 de acuerdo con esta respuesta en Unix SE. Ese lado-u
debería ser suficiente para imitar la salida degit diff
:diff -u --color=always file1 file2 | less -r
--color
debe seralways
cuando se usa en una tubería,auto
se apagará el color en las tuberías.Solo he intentado esto con Git Bash en Windows, donde
less -R
solo colorearía la primera línea de un trozo.less -r
me lo arregló en ese caso.fuente
Usando sólo
bash
,diff
,tput
, yless
, podemos aproximar estrechamente la salidagit diff
. Sin embargo, habrá algunas diferencias notables, debido a la miopía de losdiff
programadores.Ponga la siguiente definición de función Bash en algún archivo que su cuenta de usuario obtiene automáticamente, y podrá acceder a la función desde la línea de comandos:
Esta función funciona de la siguiente manera:
diff
se invoca con varias opciones de formato para especificar cómo se mostrarán los cambios dentro de los archivos.tput
se utiliza para insertar códigos de color ANSI en esas opciones de formato. Tenga en cuenta que cuando utilice terminales que no sean ANSI, es posible que deba reemplazarlotput setaf
portput setf
.diff
se canaliza aless
.-R
permite preservar los colores ANSI.-X
evita que seless
despeje la pantalla al salir.-F
evita queless
funcione como un buscapersonas si la salida cabe dentro de una pantalla.@full
, la función mostrará todas las líneas sin cambios además de las líneas agregadas y eliminadas.Tenga en cuenta las siguientes diferencias entre este enfoque y
git diff
:git diff
informa tres líneas de contexto que rodean cada cambio. Desafortunadamente,diff
parece quejarse y salir si desea especificar el número de líneas de contexto y al mismo tiempo especificar las opciones de formato. (Al menos lo hace en Mac OS X Yosemite). Graciasdiff
programadores. Por lo tanto, puede solicitar que no haya líneas de contexto que rodeen cada cambio, que es el comportamiento predeterminado, o puede solicitar que también se informen todas las líneas sin cambios dentro del archivo, especificando@full
como el primer parámetro.git diff
, los números de línea reportados por esta función también pueden variar de los reportados porgit diff
.git diff
trata esto mejor, a través de sus líneas de contexto.diff
Si lo prefiere, puede intentar pasar diferentes opciones para tratar mejor el espacio en blanco.fuente
Usted está buscando
colordiff
:fuente
Coloque esto en su
.bashrc
o.zshrc
:diff() { git diff --no-index "$1" "$2" | colordiff; }
requisitos:
git
ycolordiff
deben instalarse de antemano.uso:
diff file1 file2
ejemplo: por $
diff .tmux.conf .zshrc.pre-oh-my-zsh
fuente
La otra opción es hacerlo desde fuera del repositorio para que git sepa diferir entre archivos. p.ej. una función de shell algo así como:
fuente
Usar colordiff :
Instalación:
Uso:
Da exactamente la misma diferencia que se muestra en
git diff
.fuente
Si no tiene
colordiff
ogit diff
, puede obtener colorvim
.o simplemente
fuente
Dado que el murciélago tiene una buena coloración, he probado si eso también funciona
diff
y sorprendentemente funcionó muy bien desde el primer momento.$ diff file1 file2 | bat
o$ diff -u file1 file2 | bat
Así que supongo que podría hacer una función como esta a continuación para ser más eficiente:
fuente
Probado en Debian 9
diff -u --color=always file1 file2
fuente
Creo que la configuración de configuración:
combinado con la
--relative=<path>
opción del comando "diff" haría lo que quisiera. Has probado ?fuente
git
. Estaba preguntando por lasdiff
opciones del programa