2011-12-19 30 views

Trả lời

52

Chúng được gọi là (c) tiêu đề hunk và chứa thông tin phạm vi.

Chúng được bao quanh bởi dấu hai ở dấu hiệu @@. Họ là các định dạng:

@@ -l,s +l,s @@ 

nơi l là số vạch xuất phát và s là số dòng sự thay đổi (c) hunk áp dụng cho cho mỗi tập tin tương ứng. - cho biết tệp gốc và + cho biết tệp mới (đã sửa đổi). Lưu ý rằng nó không chỉ hiển thị các dòng bị ảnh hưởng, mà còn cả các dòng ngữ cảnh.

-1,5 nằm trong tệp gốc (được chỉ định bởi -). Nó cho thấy rằng dòng đầu tiên đó là bắt đầu và 5 dòng bị ảnh hưởng/bối cảnh

+1,9 nằm trong tệp (sửa đổi) mới (được chỉ định bởi +) và dòng đầu tiên là dòng bắt đầu và 9 dòng bối cảnh.

Xem thêm chi tiết ở đây: http://en.wikipedia.org/wiki/Diff#Unified_format

+0

Vì vậy, các số tham chiếu đến ngữ cảnh + hunk? tức là các dòng được in bằng git là các dòng (thay đổi) của dòng cộng với 3 dòng trước và 3 dòng sau dòng hunk (đã thay đổi). Vì vậy, phạm vi của các dòng là từ đầu của bối cảnh đến cuối bối cảnh, tức là từ 3 dòng trước khi dòng đầu tiên thay đổi thành 3 dòng sau dòng thay đổi cuối cùng? – Will

5

Những mô tả các dòng bị ảnh hưởng bởi phần khác. Trong trường hợp của bạn, nó có nghĩa là hunk ảnh hưởng đến 5 dòng bắt đầu từ dòng 1, dẫn đến sự thay thế bắt đầu từ dòng 1 dài 9 dòng.

Lưu ý rằng đây là định dạng được sử dụng bởi định dạng khác biệt thống nhất. Định dạng diff "cổ điển" sử dụng một mô hình khác (nhưng ai sử dụng diff cổ điển những ngày này?).

15

đơn giản ví dụ phân tích

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

Ví dụ:

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

Ở đây chúng ta loại bỏ dòng 2, 3, 14 và 15. Đầu ra:

@@ -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: tương ứng với mảnh này vào dòng 1 đến 6 của tệp đầu tiên:

    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.

Hunk tiêu đề

Tùy thuộc vào phiên bản và cấu hình git của bạn, bạn cũng có thể nhận được dòng mã bên cạnh dòng @@, ví dụ: các func1() { trong:

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

này cũng có thể thu được với -p cờ của đồng bằng diff.

Ví dụ: tuổi file:

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

Nếu chúng ta loại bỏ dòng 6, diff cho thấy:

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

Lưu ý rằng đây không phải là dòng chính xác cho func1: nó bỏ qua dòng 12 .

Tính năng tuyệt vời này thường cho biết chính xác chức năng hoặc lớp nào từng thuộc về, điều này rất hữu ích để giải thích sự khác biệt.

Làm thế nào các thuật toán để chọn tiêu đề tác phẩm một cách chính xác sẽ được thảo luận tại địa chỉ: Where does the excerpt in the git diff hunk header come from?

+1

Đây có lẽ là giải thích tốt nhất về phần mềm khác. – mahonya

+0

Vâng, tôi có @@ -20,7 +20,8 @@ UserDefinedStitcher và tôi nghĩ có lẽ nó đã nói với tôi rằng những thay đổi của tôi là ở dòng 20, hay đúng hơn, 20 dòng trở đi từ Dòng 6. (Dòng 6 là dòng này nói rằng UserDefinedStitcher.) Nhưng điều này đưa tôi đến Line 26, nhưng những thay đổi của tôi là trên dòng 23. Vì vậy, nó có vẻ như git là ra bởi 3 dòng. Chuyện gì vậy? – Will

+0

@Will vui lòng tạo ra ví dụ có thể tái sản xuất tối thiểu. –

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