ฉันได้รวบรวมข้อมูลจากข้อมูลที่ส่งคืนมาจาก
git diff <commitId>..<commitId>
และฉันก็วิ่งเข้าไป @@ -1 +1 @@
ฉันคิดไม่ออกว่ามันบอกอะไรฉัน ฉันค้นหาใน Google นิดหน่อย แต่ก็ไม่มีประโยชน์
ฉันได้รวบรวมข้อมูลจากข้อมูลที่ส่งคืนมาจาก
git diff <commitId>..<commitId>
และฉันก็วิ่งเข้าไป @@ -1 +1 @@
ฉันคิดไม่ออกว่ามันบอกอะไรฉัน ฉันค้นหาใน Google นิดหน่อย แต่ก็ไม่มีประโยชน์
คำตอบ:
เป็นตัวระบุกลุ่มที่แตกต่างกัน เอกสารนี้จัดทำโดย 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
บรรทัดทั่วไปของไฟล์ทั้งสองเริ่มต้นด้วยอักขระช่องว่าง บรรทัดที่แตกต่างกันระหว่างสองไฟล์มีอักขระตัวบ่งชี้ต่อไปนี้ในคอลัมน์พิมพ์ด้านซ้าย:
- +
มีการเพิ่มบรรทัดที่นี่ในไฟล์แรก- -
บรรทัดนี้ถูกลบออกจากไฟล์แรก
การวิเคราะห์ตัวอย่างง่ายๆ
โดยพื้นฐานแล้วรูปแบบจะเหมือนกันกับความ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() {
นอกจากนี้ยังสามารถรับได้กับธงของธรรมดา-p
diff
ตัวอย่าง: ไฟล์เก่า:
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"
เป็นข้อมูลช่วง hunk ปัจจุบันที่ระบุว่าหมายเลขบรรทัดใดที่กลุ่มที่แตกต่างนี้เริ่มต้นและสิ้นสุด
อ่านhttp://en.wikipedia.org/wiki/Diff#Unified_formatสำหรับคำอธิบายเชิงลึก