He estado recopilando datos de la información devuelta por
git diff <commitId>..<commitId>
y me encontré con @@ -1 +1 @@
No puedo entender lo que me está diciendo. He buscado un poco en Google pero fue en vano.
He estado recopilando datos de la información devuelta por
git diff <commitId>..<commitId>
y me encontré con @@ -1 +1 @@
No puedo entender lo que me está diciendo. He buscado un poco en Google pero fue en vano.
Respuestas:
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í:
--- desde-archivo-desde-archivo-hora-de-modificación +++ a-archivo-a-archivo-hora-modificaciónLa marca de tiempo parece
2002-02-21 23:30:39.942229878 -0800
indicar 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=label
opció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í:
@@ desde-archivo-números-de-línea-a-archivo-números -de-línea @@ línea-desde-cualquier-archivo línea-desde-cualquier-archivo ...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:
- +
Se agregó una línea aquí al primer archivo.- -
Aquí se eliminó una línea del primer archivo.
Análisis de ejemplo simple
El formato es básicamente el mismo que el diff -u
diff unificado.
Por ejemplo:
diff -u <(seq -w 16) <(seq -w 16 | grep -Ev '^(02|03|14|15)$')
Aquí eliminamos las líneas 2, 3, 14 y 15. Salida:
@@ -1,6 +1,4 @@
01
-02
-03
04
05
06
@@ -11,6 +9,4 @@
11
12
13
-14
-15
16
@@ -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.
1
2
3
4
5
6
-
significa "antiguo", como solemos llamarlo diff -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:
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 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:
@@ -4,7 +4,6 @@ func1() {
Esto también se puede obtener con la -p
bandera 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 1
y 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.
Cómo funciona exactamente el algoritmo para elegir el encabezado se discute en: ¿De dónde proviene el extracto del encabezado git diff hunk?
@@ -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.