2011-06-28 26 views
37

Mỗi lần tôi chạy git diff, đối với mỗi sự thay đổi duy nhất tôi làm, tôi nhận được một số loại tiêu đề với số, ví dụ:Các con số trên tiêu đề Git Diff có nghĩa là gì?

@@ -169,14 +167,12 @@ function Browser(window, document, body, XHR, $log) {..... 

Tôi tự hỏi những gì hiện bốn số nghĩa là gì? Tôi đoán -169 có nghĩa là dòng mã cụ thể sau đây ban đầu nằm trong dòng 169 nhưng bây giờ là 167? Và 14 và 12 nghĩa là gì?

Trả lời

38

Tiêu đề này được gọi là bộ thay đổi hoặc hunk. Mỗi hunk bắt đầu bằng một dòng có chứa, kèm theo trong @@, dòng hoặc dòng from,no-of-lines trong tệp trước (với -) và sau (với +) các thay đổi. Sau đó đến các dòng từ tập tin. Các dòng bắt đầu bằng số - bị xóa, các dòng bắt đầu bằng + được thêm vào. Mỗi dòng sửa đổi bởi các bản vá được bao quanh với 3 dòng ngữ cảnh trước và sau.

Một sự bổ sung như sau:

@@ -75,6 +103,8 @@ 
foo 
bar 
baz 
+line1 
+line2 
more context 
and more 
and still context 

Điều đó có nghĩa, trong file gốc trước khi dòng 78 (= 75 + 3 dòng ngữ cảnh) thêm hai dòng. Đây sẽ là các dòng 106 (= 103 + 3 dòng ngữ cảnh) thông qua 107 sau tất cả các thay đổi.
Lưu ý sự khác biệt trong số from (-75 so với +103), điều này có nghĩa là có những thay đổi khác trong tệp này trước phần này, thêm 28 (103 - 75) dòng mã.

Một xóa trông như thế này:

@@ -75,7 +75,6 @@ 
foo 
bar 
baz 
-line1 
more context 
and more 
and still context 

Điều đó có nghĩa, xóa dòng 78 (= 75 + 3 dòng ngữ cảnh) trong file gốc. Ngữ cảnh không thay đổi sẽ nằm trên các dòng 75 đến 80 sau tất cả các thay đổi.
Lưu ý rằng from số trong hunk này bằng (-75 và +75), điều này có nghĩa là không có thay đổi nào trước hunk này, hoặc số lượng dòng đã thêm và xóa trong các thay đổi trước là như nhau.

Cuối cùng, một sự thay đổi trông như thế này:

@@ -70,7 +70,7 @@ 
foo 
bar 
baz 
-red 
+blue 
more context 
and more 
still context 

Điều đó có nghĩa, thay đổi dòng 73 (= 70 + 3 dòng ngữ cảnh) trong file trước khi tất cả những thay đổi, trong đó có màu đỏ sang màu xanh. Dòng đã thay đổi cũng là dòng 73 (= 70 + 3 dòng ngữ cảnh) trong tệp sau tất cả các thay đổi.

Credit goes to Markus Bertheau.

+7

Câu trả lời ngắn: 14 trong trường hợp của bạn là số tiền các dòng trong hunk trước khi áp dụng các thay đổi, 12 - sau. –

+5

Giá trị 'no-of-lines' có thể không hiển thị ngay lập tức. Giá trị 'trước' là tổng của 3 dòng ngữ cảnh dẫn, số lượng '-' dòng và 3 dòng ngữ cảnh sau, trong khi giá trị 'sau' là tổng của 3 dòng ngữ cảnh dẫn, số lượng' + 'dòng và 3 dòng cuối. Trong một số trường hợp, có thêm các dòng ngữ cảnh trung gian bổ sung cũng được thêm vào các số đó. Vì vậy, tổng số dòng hiển thị thường không phải là giá trị 'no-of-lines'! –

+3

Có một cá trích đỏ trong ví dụ đầu tiên về việc thêm 2 dòng: '@@ -75,6 +77,8 @@'. Các 75 và 77 có thể gây nhầm lẫn cho newbie nghĩ rằng có liên quan đến việc thêm 2 dòng. Trên thực tế, một ví dụ đơn giản hơn sẽ có '@@ -75,6 +75,8 @@'. Các +77 sẽ chỉ được nếu có các chỉnh sửa khác cao hơn mà thêm một mạng lưới của 2 dòng. – wisbucky

3

Tóm tắt:

  • Giả git diff chí đầu ra [0-3] dòng bối cảnh [trước/sau] [đầu tiên/cuối cùng] thay đổi

@@ - [original file's number of first line displayed], [context lines + removed lines ] + [changed file's number of first line displayed], [context lines + added lines] @@

4

Tôi tự hỏi ý nghĩa của bốn số này là gì?

Hãy phân tích một ví dụ đơn giản

Định dạng là cơ bản giống các diff -u diff thống nhất.

Chúng tôi bắt đầu với những con số 1-16 và loại bỏ 2, 3, 14 và 15:

diff -u <(seq 16) <(seq 16 | grep -Ev '^(2|3|14|15)$') 

Output:

@@ -1,6 +1,4 @@ 
1 
-2 
-3 
4 
5 
6 
@@ -11,6 +9,4 @@ 
11 
12 
13 
-14 
-15 
16 

@@ -1,6 +1,4 @@ có nghĩa là:

  • -1,6: đoạn này tương ứng với dòng 1 đến 6 của tệp thứ nhất:

    1 
    2 
    3 
    4 
    5 
    6 
    

    - có nghĩa là "cũ", như chúng ta thường gọi nó là diff -u old new.

  • +1,4 nói rằng đoạn này tương ứng với dòng 1 đến 4 của tệp thứ hai.

    + có nghĩa là "mới".

    Chúng tôi chỉ có 4 dòng thay vì 6 vì 2 dòng đã bị xóa! Hunk mới chỉ là:

    1 
    4 
    5 
    6 
    

@@ -11,6 +9,4 @@ cho hunk thứ hai là tương tự:

  • vào file cũ, chúng tôi có 6 dòng, bắt đầu từ dòng 11 của file cũ:

    11 
    12 
    13 
    14 
    15 
    16 
    
  • vào file mới, chúng tôi có 4 dòng, bắt đầu từ dòng 9 của tập tin mới:

    11 
    12 
    13 
    16 
    

    Lưu ý rằng dòng 11 là dòng thứ 9 của tập tin mới, vì chúng tôi đã xóa 2 dòng trên hunk theo thời gian: 2 và 3.

Các vấn đề liên quan