Apa arti “@@ -1 +1 @@” dalam keluaran diff Git?

104

Saya telah mengumpulkan data dari informasi yang dikembalikan dari

git diff <commitId>..<commitId>

dan saya bertemu @@ -1 +1 @@

Saya tidak tahu apa yang dikatakan itu kepada saya. Saya sudah mencari sedikit di Google tetapi tidak berhasil.

SSEMember
sumber
Bisakah Anda menjelaskan file apa yang menghasilkan header seperti itu?
kworr
@kworr itu pertanyaan konyol, perbedaan apa pun dalam format terpadu memiliki tajuk rentang.
Yuval Adam
@YuvalAdam: sebenarnya format diff unified memiliki lebih banyak field yang harus diisi seperti [- +] <position>, <lines> dan di sini kita tidak memiliki perubahan yang ditampilkan tetapi perubahan ini menyentuh baris pertama file.
kworr

Jawaban:

69

Ini adalah pengenal diff hunk terpadu. Ini didokumentasikan oleh GNU Diffutils.

Format keluaran terpadu dimulai dengan tajuk dua baris, yang terlihat seperti ini:

--- dari-file dari-file-modifikasi-waktu 
+++ ke-file ke-file-modifikasi-waktu

Cap waktu terlihat seperti itu 2002-02-21 23:30:39.942229878 -0800 menunjukkan tanggal, waktu dengan pecahan detik, dan zona waktu. Detik pecahan dihilangkan pada host yang tidak mendukung stempel waktu pecahan.

Anda dapat mengubah konten header dengan --label=labelopsi; lihat Lihat Nama Alternatif .

Berikutnya datang satu atau lebih bongkahan perbedaan; setiap bongkah menunjukkan satu area di mana file berbeda. Hunk format terpadu terlihat seperti ini:

@@ from-file-line-numbers to-file-line-numbers @@
  baris-dari-salah-file 
 baris-dari-salah-file ...

Jika bingkah hanya berisi satu baris, hanya nomor baris awalnya yang muncul. Jika tidak, nomor barisnya akan terlihat sepertistart,count . Bongkahan kosong dianggap mulai dari garis yang mengikuti bongkahan tersebut.

Jika sebongkah dan konteksnya berisi dua atau lebih baris, nomor barisnya akan terlihat seperti . Jika tidak, hanya nomor baris akhirnya yang muncul. Bongkahan kosong dianggap berakhir di garis yang mendahului bongkah tersebut.start,count

Baris yang umum untuk kedua file dimulai dengan karakter spasi. Garis-garis yang sebenarnya berbeda antara kedua file tersebut memiliki salah satu karakter indikator berikut di kolom kiri cetak:

  • +
    Garis telah ditambahkan di sini ke file pertama.
  • -
    Garis telah dihapus di sini dari file pertama.
Todd A. Jacobs
sumber
69

Analisis contoh sederhana

Formatnya pada dasarnya sama dengan diff -uunified diff.

Misalnya:

diff -u <(seq -w 16) <(seq -w 16 | grep -Ev '^(02|03|14|15)$')

Di sini kami menghapus baris 2, 3, 14 dan 15. Output:

@@ -1,6 +1,4 @@
 01
-02
-03
 04
 05
 06
@@ -11,6 +9,4 @@
 11
 12
 13
-14
-15
 16

@@ -1,6 +1,4 @@ cara:

  • -1,6berarti bagian dari file pertama ini dimulai pada baris 1 dan menunjukkan total 6 baris. Oleh karena itu, ini menunjukkan baris 1 hingga 6.

    1
    2
    3
    4
    5
    6
    

    -berarti "tua", seperti yang biasa kita sebut sebagai diff -u old new.

  • +1,4berarti bahwa bagian dari file kedua ini dimulai pada baris 1 dan menampilkan total 4 baris. Oleh karena itu, ini menunjukkan baris 1 hingga 4.

    + berarti "baru".

    Kami hanya memiliki 4 baris, bukan 6 karena 2 baris telah dihapus! Yang baru hanya:

    01
    04
    05
    06
    

@@ -11,6 +9,4 @@ untuk bongkahan kedua adalah analog:

  • pada file lama, kami memiliki 6 baris, dimulai dari baris 11 dari file lama:

    11
    12
    13
    14
    15
    16
    
  • pada file baru, kami memiliki 4 baris, dimulai dari baris 9 file baru:

    11
    12
    13
    16
    

    Perhatikan bahwa baris tersebut 11adalah baris ke-9 dari file baru karena kami telah menghapus 2 baris pada bagian sebelumnya: 2 dan 3.

Hunk header

Bergantung pada versi dan konfigurasi git Anda, Anda juga bisa mendapatkan baris kode di sebelah @@baris tersebut, misalnya di func1() {dalam:

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

Ini juga bisa diperoleh dengan -pbendera polos diff.

Contoh: file lama:

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

Jika kita menghapus garis 6, perbedaannya menunjukkan:

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

Perhatikan bahwa ini bukan baris yang benar untuk func1: baris yang dilewati 1dan 2.

Fitur luar biasa ini sering kali memberi tahu dengan tepat fungsi atau kelas mana yang dimiliki setiap hunk, yang sangat berguna untuk menafsirkan perbedaannya.

Bagaimana algoritma untuk memilih tajuk bekerja persis dibahas di: Dari mana kutipan di tajuk git diff hunk berasal?

Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
sumber
Ah, jadi saya akan membaca @@ -1,6 +1,4 @@sebagai "Mulai dari baris 1, jumlah baris yang lama adalah 6 tetapi jumlah baris baru adalah 4"
Awan
1
@Cloud yup that's it :-)
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
6

Ini adalah informasi kisaran cowok saat ini yang menyatakan di nomor baris mana tempat ini dimulai dan diakhiri.

Baca http://en.wikipedia.org/wiki/Diff#Unified_format untuk penjelasan mendalam.

Yuval Adam
sumber
Terima kasih. Membantu. Jika tidak ada tanda koma dan s, defaultnya adalah 1.
SSEMember