Programing

Git의 diff 출력에서 ​​"@@ -1 +1 @@"은 무엇을 의미합니까?

lottogame 2020. 8. 30. 19:39
반응형

Git의 diff 출력에서 ​​"@@ -1 +1 @@"은 무엇을 의미합니까?


반환 된 정보로부터 데이터를 수집하고 있습니다.

git diff <commitId>..<commitId>

그리고 나는 만났다 @@ -1 +1 @@

그게 무슨 말인지 이해할 수 없습니다. Google에서 약간 검색했지만 아무 소용이 없습니다.


통합 된 diff 덩어리 식별자입니다. 이것은 GNU Diffutils에 의해 문서화 되었습니다.

통합 출력 형식은 다음과 같은 두 줄 헤더로 시작합니다.

--- 파일에서 파일 수정 시간 
+++ 파일에서 파일 수정 시간

타임 스탬프는 2002-02-21 23:30:39.942229878 -0800날짜, 시간 (초) 및 시간대를 나타내는 것처럼 보입니다 . 분수 타임 스탬프를 지원하지 않는 호스트에서는 분수 초가 생략됩니다.

--label=label옵션을 사용하여 헤더의 내용을 변경할 수 있습니다 . 대체 이름을 참고하십시오 .

다음으로 하나 이상의 차이점이 있습니다. 각 덩어리는 파일이 다른 하나의 영역을 보여줍니다. 통합 형식 덩어리는 다음과 같습니다.

@@ 에서 파일 - 라인 번호에-파일 라인 번호 @@
  라인에서-파일 중 하나를 
 라인에서-중 파일 ...

덩어리가 한 줄만 포함하면 시작 줄 번호 만 나타납니다. 그렇지 않으면 라인 번호는 다음과 같습니다 . 빈 덩어리는 덩어리 다음의 줄에서 시작하는 것으로 간주됩니다.start,count

덩어리와 컨텍스트에 두 개 이상의 줄이 포함 된 경우 줄 번호는 다음과 같습니다 . 그렇지 않으면 끝 줄 번호 만 나타납니다. 빈 덩어리는 덩어리 앞의 줄에서 끝나는 것으로 간주됩니다.start,count

두 파일에 공통된 행은 공백 문자로 시작합니다. 두 파일간에 실제로 다른 행은 왼쪽 인쇄 열에 다음 표시기 문자 중 하나가 있습니다.

  • +
    여기에 첫 번째 파일에 한 줄이 추가되었습니다.
  • -
    첫 번째 파일에서 한 줄이 제거되었습니다.

간단한 예제 분석

형식은 기본적으로 diff -u통합 diff 와 동일합니다 .

예를 들면 :

diff -u <(seq -w 16) <(seq -w 16 | grep -Ev '^(02|03|14|15)$')

여기서 우리는 2, 3, 14, 15 행을 제거했습니다. 출력 :

@@ -1,6 +1,4 @@
 01
-02
-03
 04
 05
 06
@@ -11,6 +9,4 @@
 11
 12
 13
-14
-15
 16

@@ -1,6 +1,4 @@ 방법:

  • -1,6첫 번째 파일의이 부분이 1 행에서 시작하여 총 6 행을 표시 함을 의미합니다. 따라서 1 ~ 6 행을 표시합니다.

    1
    2
    3
    4
    5
    6
    

    -"오래된"을 의미하며 일반적으로 diff -u old new.

  • +1,4두 번째 파일의이 부분이 1 행에서 시작하여 총 4 행을 표시 함을 의미합니다. 따라서 1 ~ 4 행을 표시합니다.

    + "새로운"을 의미합니다.

    We only have 4 lines instead of 6 because 2 lines were removed! The new hunk is just:

    01
    04
    05
    06
    

@@ -11,6 +9,4 @@ for the second hunk is analogous:

  • on the old file, we have 6 lines, starting at line 11 of the old file:

    11
    12
    13
    14
    15
    16
    
  • on the new file, we have 4 lines, starting at line 9 of the new file:

    11
    12
    13
    16
    

    Note that line 11 is the 9th line of the new file because we have already removed 2 lines on the previous hunk: 2 and 3.

Hunk header

Depending on your git version and configuration, you can also get a code line next to the @@ line, e.g. the func1() { in:

@@ -4,7 +4,6 @@ func1() {

This can also be obtained with the -p flag of plain diff.

Example: old file:

func1() {
    1;
    2;
    3;
    4;
    5;
    6;
    7;
    8;
    9;
}

If we remove line 6, the diff shows:

@@ -4,7 +4,6 @@ func1() {
     3;
     4;
     5;
-    6;
     7;
     8;
     9;

Note that this is not the correct line for func1: it skipped lines 1 and 2.

This awesome feature often tells exactly to which function or class each hunk belongs, which is very useful to interpret the diff.

How the algorithm to choose the header works exactly is discussed at: Where does the excerpt in the git diff hunk header come from?


It's the current hunk range information stating on which line numbers this diff hunk starts and ends.

Read http://en.wikipedia.org/wiki/Diff#Unified_format for an in-depth explanation.

참고URL : https://stackoverflow.com/questions/10950412/what-does-1-1-mean-in-gits-diff-output

반응형