No puede obtener números de línea legibles por humanos con git diff
Actualmente no hay opciones para que los números de línea se muestren verticalmente en el lado con git diff
.
Formato de diferencia unificada
Sin embargo, esa información está disponible en los encabezados de hunk (c) para cada cambio en la diferencia, solo está en formato de diferencia unificada :
@@ -start,count +start,count @@
El estado original del archivo se representa con -
y el nuevo estado se representa con +
(no significan adiciones y eliminaciones en el encabezado del trozo.representa start
el número de línea inicial de cada versión del archivo y count
representa cuántas líneas se incluyen , comenzando desde el punto de inicio.
Ejemplo
diff --git a/osx/.gitconfig b/osx/.gitconfig
index 4fd8f04..fcd220c 100644
--- a/osx/.gitconfig
+++ b/osx/.gitconfig
@@ -11,7 +11,7 @@ <== HERE!
[color "branch"]
upstream = cyan
[color "diff"]
- meta = yellow
+ meta = cyan
plain = white dim
old = red bold
new = green bold
El encabezado del trozo
@@ -11,7 +11,7 @@
dice que la versión anterior del archivo comienza en la línea 11 e incluye 7 líneas:
11 [color "branch"]
12 upstream = cyan
13 [color "diff"]
14 - meta = yellow
14 + meta = cyan
15 plain = white dim
16 old = red bold
17 new = green bold
mientras que la siguiente versión del archivo también comienza en la línea 11 y también incluye 7 líneas.
El formato de diferencia unificada no es realmente para consumo humano
Como probablemente pueda ver, el formato de diferencia unificada no facilita el cálculo de los números de línea (al menos si no es una máquina). Si realmente desea números de línea que pueda leer, necesitará usar una herramienta de diferenciación que los muestre.
Lectura adicional
git diff --unified=0 | grep -Po '^\+\+\+ ./\K.*|^@@ -[0-9]+(,[0-9]+)? \+\K[0-9]+(,[0-9]+)?(?= @@)'
--unified=0
o-U0
.git diffn
, un reemplazo directo (envoltorio) para elgit diff
que muestra los números de línea y tiene total compatibilidad con todos los usos y opciones degit diff
: stackoverflow.com/questions/24455377/…Aquí hay dos soluciones más, ampliando el código de Andy Talkowski.
Texto sin formato:
Texto en color, asumiendo que
\033[66m
es el formato de los códigos de color:El código cambia líneas que comienzan con
-
y+
a-1:-
y+1:+
, respectivamente, y las líneas que comienzan con nadaa
(5,6):
. Los números son los números de línea del archivo respectivo.fuente
git diff
mantiene cuidadosamente la alineación. Este código está sobre mi cabeza en este momento, así que ¿estaría dispuesto a arreglarlo? En otras palabras, cuando una línea dice+240:+
y la siguiente línea dice(241,257):
, debe agregar algunos espacios adicionales a la línea superior para que su código mantenga la alineación y sangría adecuadas con el código de la línea inferior. ¿Quizás esto podría hacerse fácilmente con la impresión?printf
.git diffn
. Vea aquí: stackoverflow.com/a/61997003/4561887 . Gracias @PFudd, por tu respuesta. Lo estudié y lo usé para aprender, luego comencé desde cero y escribígit diffn
. Una vez formateado para poder leer su código (gracias @EdMorton), pude aprender algunas cosas geniales que me ayudaron.Aquí hay un script que intenta solucionar este problema, no lo probé con ira, pero parece estar bien. Se basa en los registros que produce git diff y usa awk para mantener el recuento de líneas.
fuente
Puede utilizar
git difftool
para hacer la diferencia con un editor externo que mostrará los números de línea. He aquí cómo hacerlo con vim / vimdiff:Establecer vimdiff como difftool de git:
Configure
~/.vimrc
para mostrar automáticamente los números de línea al usar vimdiff:Ejecute git difftool, que usará vimdiff con números de línea:
fuente
Una forma rápida es usar
git diff -U0
. Eso establecerá las líneas de contexto en 0, lo que hará que los valores @@ coincidan con las líneas cambiadas reales. De forma predeterminada, los valores @@ incluyen 3 líneas de contexto antes / después, lo que no es conveniente para los humanos.Ejemplo:
Es difícil calcular los números de línea de las líneas cambiadas porque la línea 10 se refiere a la primera línea del contexto anterior. El número de línea real de la primera línea modificada es 10 + 3 = 13. Para calcular el número de líneas cambiadas, también debe restar el contexto antes y después: 8-3-3 = 2.
Como puede ver, establecer context = 0 hace que los valores @@ sean más fáciles de leer para los humanos. Puede ver que las líneas cambiadas comienzan en la línea 13 y hay 2 líneas cambiadas.
Esto no es perfecto, ya que solo muestra el número de línea de cada bloque. Si desea ver los números de línea para cada línea, utilice difftool para un editor externo. Ver https://stackoverflow.com/a/50049752
fuente
Me gusta usar
git difftool
con MELD como mi difftool. Es más fácil de ver quegit diff
, tiene una buena comparación de interfaz gráfica de usuario y muestra los números de línea en cada lado.Preparar:
Captura de pantalla de muestra:
Actualización 24 de mayo de 2020:
Acabo de escribir
git diffn
durante los últimos días para ser un reemplazogit diff
directo de la línea de comandos. Dale un tiro. Vea mi otra respuesta aquí .fuente
A partir del 24 de mayo de 2020, ahora puede usar la herramienta de terceros
git diffn
(divulgación completa: la escribí) para este propósito. Es un envoltorio ligerogit diff
, escrito en elawk
lenguaje de programación basado en patrones / acciones. Aquí hay una salida de muestra de la ejecucióngit diffn
:1/3: ¿Qué es?
Desde lo alto de
git-diffn.sh
:DESCRIPCIÓN:
git-diffn.sh
¡un reemplazo
git diff
directo para el que también muestra números de línea! Úselo exactamente igualgit diff
, excepto que verá estos hermosos números de línea también para ayudarlo a entender sus cambios.ya que es solo un contenedor ligero basado en el lenguaje awk
git diff
, acepta TODAS las opciones y parámetros quegit diff
acepta. Ejemplos:git diffn HEAD~
git diffn HEAD~3..HEAD~2
funciona con cualquiera de sus
git diff
configuraciones de color, incluso si está utilizando colores personalizadosVea mi respuesta aquí para saber cómo configurar colores de diferencia personalizados, así como para ver una captura de pantalla de la salida de color personalizado de
git diffn
: ¿Cómo se personaliza el color del encabezado de diferencias en git diff?Aquí hay algunos
git config
comandos de muestra de mi respuesta anterior para establecergit diff
colores y atributos personalizados (formato de texto):adentro
git diffn
, la salida de color está activada de forma predeterminada; si desea deshabilitar el color de salida, debe usar--no-color
o--color=never
. Consulteman git diff
para obtener más detalles. Ejemplos:2/3: Instalación
gawk
. Si es así, trate de esta :brew install gawk
.Opción 1 (mi recomendación): descargue el repositorio completo y luego cree un enlace simbólico al programa para que pueda recibir actualizaciones fácilmente haciendo una
git pull
desde el repositorio cuando lo desee.Primero,
cd
a donde quieras instalar esto. Entonces corre:¡Hecho! ¡Ahora solo haz el paso final a continuación!
Opción 2 (para aquellos que solo quieren el archivo 1): descargue solo el archivo una vez.
¡Hecho! ¡Ahora solo haz el paso final a continuación!
Último paso:
Ahora cierre y vuelva a abrir su terminal, o recárguelo con
. ~/.bashrc
, ¡y listo!git diffn
ahora funcionará como un reemplazo directo exacto degit diff
!Aquí hay una demostración:
3/3: Demo de
git diffn
:Crea este archivo:
hello_world.c:
Comprométase:
Cámbielo a esto y guarde el archivo:
hello_world.c:
Ahora ejecuta:
Aquí está el resultado de
git diff
first para fines de comparación:Y una captura de pantalla para mostrar el color. Tenga en cuenta que la sección resaltada en rojo simplemente muestra espacios en blanco vacíos (espacios en este caso) que podrían eliminarse:
Ahora aquí está la salida de
git diffn
. ¡Observe que muestra todos los números de línea perfectamente!-
signo tanto en el extremo izquierdo como en el derecho del:
para ayudarlo a ver mejor, ya sea que a sus ojos les guste escanear hacia la derecha del colon o hacia abajo en el extremo a la izquierda de la pantalla.+
signo tanto a la izquierda como a la derecha del:
.,
.Salida de
git diffn
:Y una captura de pantalla para mostrar el color. Tenga en cuenta que los dos puntos NO están coloreados ni estilizados para que coincidan con el texto circundante a la izquierda y a la derecha. Este es un comportamiento intencional y diseñado para actuar como un separador visual entre los números de línea agregados a la izquierda y la
git diff
salida original a la derecha.fuente
Puedes probar
en el archivo. Le muestra el confirmador, la identificación del compromiso y el número de línea para cada línea en el archivo.
fuente
git blame
solo mostrará el estado actual del archivo con números de línea.git blame
de ninguna manera responde la pregunta; Estoy bastante desconcertado por los votos a favor aquíPrimero, configure su herramienta git diff, por ejemplo, Meld
Luego, tira de tu difftool en algún archivo:
Recuerde configurar el número de línea en la preferencia de su herramienta de diferencias.
fuente