“ @@ -1 +1 @@” หมายความว่าอย่างไรในผลลัพธ์ที่แตกต่างของ Git


106

ฉันได้รวบรวมข้อมูลจากข้อมูลที่ส่งคืนมาจาก

git diff <commitId>..<commitId>

และฉันก็วิ่งเข้าไป @@ -1 +1 @@

ฉันคิดไม่ออกว่ามันบอกอะไรฉัน ฉันค้นหาใน Google นิดหน่อย แต่ก็ไม่มีประโยชน์


คุณอธิบายได้ไหมว่าไฟล์ใดส่งผลให้ส่วนหัวดังกล่าว
kworr

@kworr เป็นคำถามโง่ ๆ ความแตกต่างใด ๆ ในรูปแบบรวมมีส่วนหัวของช่วง
Yuval Adam

@YuvalAdam: จริง ๆ แล้วรูปแบบรวมที่แตกต่างกันมีช่องเพิ่มเติมที่ควรกรอกเช่น [- +] <ตำแหน่ง>, <เส้น> และที่นี่เราไม่มีการเปลี่ยนแปลงใด ๆ ปรากฏขึ้น แต่การเปลี่ยนแปลงนี้จะสัมผัสกับบรรทัดแรกของไฟล์
kworr

คำตอบ:


69

เป็นตัวระบุกลุ่มที่แตกต่างกัน เอกสารนี้จัดทำโดย GNU Diffutils

รูปแบบเอาต์พุตแบบรวมเริ่มต้นด้วยส่วนหัวสองบรรทัดซึ่งมีลักษณะดังนี้:

--- from-file from-file-modified-time 
+++ to-file to-file-modified-time

การประทับเวลาดูเหมือน2002-02-21 23:30:39.942229878 -0800จะระบุวันที่เวลาพร้อมเศษเสี้ยววินาทีและเขตเวลา วินาทีเศษส่วนจะถูกละไว้ในโฮสต์ที่ไม่รองรับการประทับเวลาแบบเศษส่วน

คุณสามารถเปลี่ยนเนื้อหาส่วนหัวด้วย--label=labelตัวเลือก ดูดูรายชื่อสำรอง

ถัดไปเป็นความแตกต่างอย่างน้อยหนึ่งอย่าง; แต่ละกลุ่มจะแสดงพื้นที่หนึ่งที่ไฟล์แตกต่างกัน hunks รูปแบบรวมมีลักษณะดังนี้:

@@ from-file-line-numbers to-file-line-numbers @@
  line-from-any-file 
 line-from-any-file ...

หากกลุ่มมีเพียงหนึ่งบรรทัดหมายเลขบรรทัดเริ่มต้นจะปรากฏขึ้นเท่านั้น มิฉะนั้นหมายเลขบรรทัดของมันมีลักษณะเหมือน ก้อนที่ว่างเปล่าจะถือว่าเริ่มต้นที่เส้นที่ตามหลังก้อนใหญ่start,count

หาก hunk และบริบทมีสองบรรทัดขึ้นไปหมายเลขบรรทัดจะมีลักษณะดังนี้ มิฉะนั้นจะมีเพียงหมายเลขท้ายบรรทัดเท่านั้นที่ปรากฏขึ้น ก้อนที่ว่างเปล่าจะถือว่าสิ้นสุดที่เส้นที่นำหน้าก้อนใหญ่start,count

บรรทัดทั่วไปของไฟล์ทั้งสองเริ่มต้นด้วยอักขระช่องว่าง บรรทัดที่แตกต่างกันระหว่างสองไฟล์มีอักขระตัวบ่งชี้ต่อไปนี้ในคอลัมน์พิมพ์ด้านซ้าย:

  • +
    มีการเพิ่มบรรทัดที่นี่ในไฟล์แรก
  • -
    บรรทัดนี้ถูกลบออกจากไฟล์แรก

74

การวิเคราะห์ตัวอย่างง่ายๆ

โดยพื้นฐานแล้วรูปแบบจะเหมือนกันกับความdiff -uแตกต่างแบบรวม

ตัวอย่างเช่น:

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

    + หมายถึง "ใหม่"

    เรามีเพียง 4 บรรทัดแทนที่จะเป็น 6 เพราะ 2 บรรทัดถูกลบออก! ก้อนใหม่เป็นเพียง:

    01
    04
    05
    06
    

@@ -11,6 +9,4 @@ สำหรับก้อนที่สองนั้นคล้ายคลึงกัน:

  • ในไฟล์เก่าเรามี 6 บรรทัดโดยเริ่มจากบรรทัดที่ 11 ของไฟล์เก่า:

    11
    12
    13
    14
    15
    16
    
  • ในไฟล์ใหม่เรามี 4 บรรทัดเริ่มต้นที่บรรทัดที่ 9 ของไฟล์ใหม่:

    11
    12
    13
    16
    

    โปรดทราบว่าบรรทัด11เป็นบรรทัดที่ 9 ของไฟล์ใหม่เนื่องจากเราได้ลบ 2 บรรทัดในกลุ่มก่อนหน้านี้: 2 และ 3

ส่วนหัวของ Hunk

ขึ้นอยู่กับเวอร์ชันคอมไพล์และคอนฟิกูเรชันของคุณคุณยังสามารถรับโค้ดที่อยู่ถัดจาก@@บรรทัดเช่นfunc1() {ใน:

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

นอกจากนี้ยังสามารถรับได้กับธงของธรรมดา-pdiff

ตัวอย่าง: ไฟล์เก่า:

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

หากเราลบเส้น6ค่าต่างจะแสดง:

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

โปรดทราบว่านี่ไม่ใช่บรรทัดที่ถูกต้องสำหรับfunc1: มันข้ามบรรทัด1และ2.

คุณลักษณะที่ยอดเยี่ยมนี้มักจะบอกอย่างชัดเจนว่าฟังก์ชันหรือคลาสใดที่แต่ละกลุ่มเป็นของซึ่งมีประโยชน์มากในการตีความความแตกต่าง

อัลกอริทึมในการเลือกส่วนหัวทำงานอย่างไรมีการพูดคุยกันที่: ข้อความที่ตัดตอนมาในส่วนหัว git diff hunk มาจากไหน?


อ่าฉันจะอ่าน@@ -1,6 +1,4 @@ว่า "เริ่มต้นที่บรรทัดที่ 1 จำนวนบรรทัดเก่าคือ 6 แต่จำนวนบรรทัดใหม่คือ 4"
Cloud

1
@Cloud yup นั่นแหละ :-)
Ciro Santilli 郝海东冠状病六四事件法轮功

6

เป็นข้อมูลช่วง hunk ปัจจุบันที่ระบุว่าหมายเลขบรรทัดใดที่กลุ่มที่แตกต่างนี้เริ่มต้นและสิ้นสุด

อ่านhttp://en.wikipedia.org/wiki/Diff#Unified_formatสำหรับคำอธิบายเชิงลึก


ขอบคุณ. ช่วยออกมา เมื่อไม่มีเครื่องหมายจุลภาคและ s ต่อท้ายค่าเริ่มต้นจะเป็น 1
SSE สมาชิก
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.