¿Puede describir qué archivo da como resultado tal encabezado?
kworr
@kworr esa es una pregunta tonta, cualquier diferencia en formato unificado tiene encabezados de rango.
Yuval Adam
@YuvalAdam: en realidad el formato unificado diff tiene más campos que deberían ser llenados como [- +] <posición>, <líneas> y aquí no se muestran cambios, pero estos cambios tocan la primera línea del archivo.
kworr
Respuestas:
69
Es un identificador unificado de trozos de diferencias. Esto está documentado por GNU Diffutils.
El formato de salida unificado comienza con un encabezado de dos líneas, que se ve así:
La marca de tiempo parece 2002-02-21 23:30:39.942229878 -0800indicar la fecha, la hora con fracciones de segundo y la zona horaria. Los segundos fraccionarios se omiten en hosts que no admiten marcas de tiempo fraccionarias.
Puede cambiar el contenido del encabezado con la --label=labelopción; consulte Ver nombres alternativos .
Luego vienen uno o más trozos de diferencias; cada trozo muestra un área donde los archivos difieren. Los macizos de formato unificado se ven así:
Si un trozo contiene solo una línea, solo aparece su número de línea de inicio. De lo contrario, sus números de línea se parecen a . Se considera que un trozo vacío comienza en la línea que sigue al trozo.start,count
Si un trozo y su contexto contienen dos o más líneas, sus números de línea se ven así . De lo contrario, solo aparece su número de línea final. Se considera que un trozo vacío termina en la línea que precede al trozo.start,count
Las líneas comunes a ambos archivos comienzan con un carácter de espacio. Las líneas que realmente difieren entre los dos archivos tienen uno de los siguientes caracteres indicadores en la columna de impresión de la izquierda:
-1,6significa que esta parte del primer archivo comienza en la línea 1 y muestra un total de 6 líneas. Por tanto, muestra las líneas 1 a 6.
1
2
3
4
5
6
-significa "antiguo", como solemos llamarlo diff -u old new.
+1,4significa que esta parte del segundo archivo comienza en la línea 1 y muestra un total de 4 líneas. Por tanto, muestra las líneas 1 a 4.
+ significa "nuevo".
¡Solo tenemos 4 líneas en lugar de 6 porque se eliminaron 2 líneas! El nuevo galán es simplemente:
01
04
05
06
@@ -11,6 +9,4 @@ porque el segundo trozo es análogo:
en el archivo anterior, tenemos 6 líneas, comenzando en la línea 11 del archivo anterior:
11
12
13
14
15
16
en el nuevo archivo, tenemos 4 líneas, comenzando en la línea 9 del nuevo archivo:
11
12
13
16
Tenga en cuenta que la línea 11es la novena línea del nuevo archivo porque ya hemos eliminado 2 líneas en el trozo anterior: 2 y 3.
Encabezado de hunk
Dependiendo de su versión y configuración de git, también puede obtener una línea de código junto a la @@línea, por ejemplo, func1() {en:
@@ -4,7 +4,6 @@ func1() {
Esto también se puede obtener con la -pbandera de llano diff.
Ejemplo: archivo antiguo:
func1() {
1;
2;
3;
4;
5;
6;
7;
8;
9;
}
Si eliminamos la línea 6, la diferencia muestra:
@@ -4,7 +4,6 @@ func1() {
3;
4;
5;
- 6;
7;
8;
9;
Tenga en cuenta que esta no es la línea correcta para func1: omitió líneas 1y 2.
Esta asombrosa característica a menudo dice exactamente a qué función o clase pertenece cada trozo, lo cual es muy útil para interpretar la diferencia.
Respuestas:
Es un identificador unificado de trozos de diferencias. Esto está documentado por GNU Diffutils.
fuente
Análisis de ejemplo simple
El formato es básicamente el mismo que el
diff -u
diff unificado.Por ejemplo:
Aquí eliminamos las líneas 2, 3, 14 y 15. Salida:
@@ -1,6 +1,4 @@
medio:-1,6
significa que esta parte del primer archivo comienza en la línea 1 y muestra un total de 6 líneas. Por tanto, muestra las líneas 1 a 6.-
significa "antiguo", como solemos llamarlodiff -u old new
.+1,4
significa que esta parte del segundo archivo comienza en la línea 1 y muestra un total de 4 líneas. Por tanto, muestra las líneas 1 a 4.+
significa "nuevo".¡Solo tenemos 4 líneas en lugar de 6 porque se eliminaron 2 líneas! El nuevo galán es simplemente:
@@ -11,6 +9,4 @@
porque el segundo trozo es análogo:en el archivo anterior, tenemos 6 líneas, comenzando en la línea 11 del archivo anterior:
en el nuevo archivo, tenemos 4 líneas, comenzando en la línea 9 del nuevo archivo:
Tenga en cuenta que la línea
11
es la novena línea del nuevo archivo porque ya hemos eliminado 2 líneas en el trozo anterior: 2 y 3.Encabezado de hunk
Dependiendo de su versión y configuración de git, también puede obtener una línea de código junto a la
@@
línea, por ejemplo,func1() {
en:Esto también se puede obtener con la
-p
bandera de llanodiff
.Ejemplo: archivo antiguo:
Si eliminamos la línea
6
, la diferencia muestra:Tenga en cuenta que esta no es la línea correcta para
func1
: omitió líneas1
y2
.Esta asombrosa característica a menudo dice exactamente a qué función o clase pertenece cada trozo, lo cual es muy útil para interpretar la diferencia.
Cómo funciona exactamente el algoritmo para elegir el encabezado se discute en: ¿De dónde proviene el extracto del encabezado git diff hunk?
fuente
@@ -1,6 +1,4 @@
como "A partir de la línea 1, el recuento de líneas antiguas era 6 pero el recuento de líneas nuevas es 4"Es la información actual del rango del trozo que indica en qué números de línea comienza y termina este trozo de diferencia.
Lea http://en.wikipedia.org/wiki/Diff#Unified_format para obtener una explicación detallada.
fuente