Git의 diff 출력에서 ​​”@@ -1 +1 @@”은 무엇을 의미합니까? 정보로부터 데이터를 수집하고 있습니다. git diff <commitId>..<commitId> 그리고

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

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 행을 표시합니다.

    + “새로운”을 의미합니다.

    2 개 라인이 제거 되었기 때문에 6 개 대신 4 개 라인 만 있습니다! 새로운 덩어리는 다음과 같습니다.

    01
    04
    05
    06
    

@@ -11,6 +9,4 @@ 두 번째 덩어리의 경우 유사합니다.

  • 이전 파일에는 이전 파일의 11 행에서 시작하여 6 행이 있습니다.

    11
    12
    13
    14
    15
    16
    
  • 새 파일에는 새 파일의 9 행에서 시작하여 4 행이 있습니다.

    11
    12
    13
    16
    

    그 선 주 112와 3 : 우리는 이미 이전의 덩어리에 2 개 라인을 제거했기 때문에 새 파일의 9 라인입니다.

덩어리 헤더

git 버전 및 구성에 따라 줄 옆에 코드 줄을 가져올 수도 있습니다 ( @@func1() {: in :

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

이것은 -pplain 플래그로 도 얻을 수 있습니다 diff.

예 : 이전 파일 :

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

line을 제거 6하면 diff가 다음과 같이 표시됩니다.

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

이에 대한 올바른 라인이 아니라는 것을 참고 func1:이 라인을 생략 1하고 2.

이 멋진 기능은 종종 각 덩어리가 속한 함수 나 클래스를 정확히 알려주므로 차이를 해석하는 데 매우 유용합니다.

헤더를 선택하는 알고리즘이 정확히 어떻게 작동하는지는 다음에서 논의됩니다. git diff hunk 헤더의 발췌 부분은 어디에서 왔습니까?


답변

이 diff 덩어리가 시작하고 끝나는 줄 번호를 나타내는 현재 덩어리 범위 정보입니다.

자세한 설명은 http://en.wikipedia.org/wiki/Diff#Unified_format 을 참조 하십시오 .