ver revisar mis limpiar ignorar historial ejemplo consola commits comando cambios archivos git line-numbers

revisar - Git diff con números de línea(registro de Git con números de línea)



ver historial de cambios en git (7)

No se pueden obtener números de línea legibles por humanos con git diff

Actualmente no hay ninguna opción para hacer que los números de línea se muestren verticalmente en el lado con git diff .

Formato unificado-diff

Esa información está disponible en los encabezados (c) hunk para cada cambio en el diff, está solo en formato unificado-diff :

@@ -start,count +start,count @@

El estado original del archivo se representa con - , y el nuevo estado se representa con + (no significa adiciones y eliminaciones en el encabezado del hunk. start representa el número de línea de inicio de cada versión del archivo, y count representa cómo muchas líneas están incluidas, 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 de hunk

@@ -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 próxima versión del archivo también comienza en la línea 11, y también incluye 7 líneas.

El formato unificado-diff no es realmente para consumo humano

Como probablemente sepa, el formato de diff unificado no facilita la determinación de los números de línea (al menos si no es una máquina). Si realmente quieres números de línea que puedas leer, necesitarás usar una herramienta diferente que los mostrará por ti.

Lectura adicional

Cuando hago un git diff o un git log -p , ¿cómo obtengo los números de línea de los archivos fuente con la salida?

Traté de buscarlo man git-diff | grep "line numbers" man git-diff | grep "line numbers" y traté de buscar en Google, pero no obtuve nada rápidamente.


Aquí hay dos soluciones más, ampliando el código de Andy Talkowski.

Texto sin formato:

git diff | gawk ''match($0,"^@@ -([0-9]+),[0-9]+ [+]([0-9]+),[0-9]+ @@",a){left=a[1];right=a[2];next};/ /^(---|/+/+/+|[^-+ ])/{print;next};/ {line=substr($0,2)};/ /^-/{print "-" left++ ":" line;next};/ /^[+]/{print "+" right++ ":" line;next};/ {print "(" left++ "," right++ "):"line}''

Texto coloreado, suponiendo que / 033 [66m es el formato de los códigos de color:

git diff --color=always | / gawk ''{bare=$0;gsub("/033[[][0-9]*m","",bare)};/ match(bare,"^@@ -([0-9]+),[0-9]+ [+]([0-9]+),[0-9]+ @@",a){left=a[1];right=a[2];next};/ bare ~ /^(---|/+/+/+|[^-+ ])/{print;next};/ {line=gensub("^(/033[[][0-9]*m)?(.)","//2//1",1,$0)};/ bare~/^-/{print "-"left++ ":" line;next};/ bare~/^[+]/{print "+"right++ ":" line;next};/ {print "("left++","right++"):"line;next}''

El código cambia las líneas que comienzan con ''-'' o ''+'' a ''-1: -'' o ''+1: +'', y las líneas que comienzan con '''' a ''(5,6):''. Los números son los números de línea del archivo respectivo.


Aquí hay una secuencia de comandos que intenta arreglar esto, no lo prueba con ira, pero parece estar bien. Se basa en los registros que git diff produce y usa awk para mantener los conteos de líneas.

# Massage the @@ counts so they are usable function prep1() { cat | awk -F'','' ''BEGIN { convert = 0; } /^@@ / { convert=1; } /^/ { if ( convert == 1 ) { print $1,$2,$3; } else { print $0; } convert=0; }'' } # Extract all new changes added with the line count function prep2() { cat | awk ''BEGIN { display=0; line=0; left=0; out=1;} /^@@ / { out=0; inc=0; line=$4; line--; display=line; left=line; } /^[-]/ { left++; display=left; inc=0; } /^[+]/ { line++; display=line; inc=0; } /^[-+][-+][-+] / { out=0; inc=0; } /^/ { line += inc; left += inc; display += inc; if ( out == 1 ) { print display,$0; } else { print $0; } out = 1; inc = 1; display = line; }'' } git diff $1 | prep1 | prep2


Me gusta usar git difftool con git difftool como mi difftool. Es más fácil de ver que git diff , tiene una buena comparación de interfaz gráfica de usuario al lado y muestra los números de línea.


Puede usar 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:

  1. Establecer vimdiff como difftool de git:

    git config --global diff.tool vimdiff

  2. Configure ~/.vimrc para mostrar automáticamente los números de línea cuando use vimdiff:

    if &diff set number endif

  3. Ejecute git difftool, que usará vimdiff con los números de línea:

    git difftool


Puedes probar

git blame

en el archivo. Le muestra el committer, commit id y el número de línea para cada línea en el archivo.


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. Por defecto, los valores de @@ incluyen 3 líneas de antes / después del contexto, lo cual no es conveniente para humanos.

Ejemplo:

git diff # default @@ -10,8 +10,8 @@

Esto es difícil de calcular los números de línea de las líneas modificadas 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.

git diff -U0 @@ -13,2 +13,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 modificadas 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 para cada bloque. Si desea ver los números de línea para cada línea, utilice difftool para un editor externo. Ver share