Anda tidak bisa mendapatkan nomor baris yang dapat dibaca manusia dengan git diff
Saat ini tidak ada opsi untuk menampilkan nomor baris secara vertikal di samping git diff
.
Format perbedaan-terpadu
Informasi itu tersedia di (c) hunk header untuk setiap perubahan di diff, itu hanya dalam format unified-diff :
@@ -start,count +start,count @@
Status asli file diwakili dengan -
, dan status baru diwakili dengan +
(ini tidak berarti penambahan dan penghapusan di header hunk. start
Mewakili nomor baris awal dari setiap versi file, dan count
mewakili berapa banyak baris yang disertakan , mulai dari titik awal.
Contoh
diff --git a/osx/.gitconfig b/osx/.gitconfig
index 4fd8f04..fcd220c 100644
--- a/osx/.gitconfig
+++ b/osx/.gitconfig
@@ -11,7 +11,7 @@ <== HERE!
[color "branch"]
upstream = cyan
[color "diff"]
- meta = yellow
+ meta = cyan
plain = white dim
old = red bold
new = green bold
Header cowok
@@ -11,7 +11,7 @@
mengatakan bahwa versi file sebelumnya dimulai pada baris 11, dan mencakup 7 baris:
11 [color "branch"]
12 upstream = cyan
13 [color "diff"]
14 - meta = yellow
14 + meta = cyan
15 plain = white dim
16 old = red bold
17 new = green bold
sedangkan versi file berikutnya juga dimulai pada baris 11, dan juga menyertakan 7 baris.
Format Unified-diff tidak benar-benar untuk konsumsi manusia
Seperti yang mungkin Anda ketahui, format unified-diff tidak membuatnya mudah untuk mengetahui nomor baris (setidaknya jika Anda bukan mesin). Jika Anda benar-benar menginginkan nomor baris yang dapat Anda baca, Anda harus menggunakan alat bantu yang akan menampilkannya untuk Anda.
Bacaan Tambahan
git diff --unified=0 | grep -Po '^\+\+\+ ./\K.*|^@@ -[0-9]+(,[0-9]+)? \+\K[0-9]+(,[0-9]+)?(?= @@)'
--unified=0
atau-U0
, meskipun.git diffn
, pengganti drop-in (pembungkus)git diff
yang menunjukkan nomor baris dan memiliki kompatibilitas penuh dengan semua penggunaan dan opsigit diff
: stackoverflow.com/questions/24455377/…Berikut dua solusi lagi, memperluas kode Andy Talkowski.
Teks biasa:
Teks berwarna, dengan asumsi
\033[66m
format untuk kode warna:Kode mengubah baris yang dimulai dengan
-
dan+
ke-1:-
dan+1:+
, masing-masing, dan baris yang dimulai dengan tanpake
(5,6):
. Angka adalah nomor baris dari file masing-masing.sumber
git diff
dengan hati-hati mempertahankan keselarasan. Kode ini ada di luar kepala saya saat ini, jadi apakah Anda bersedia memperbaikinya? Dengan kata lain, ketika satu baris mengatakan+240:+
dan baris berikutnya mengatakan(241,257):
, Anda perlu menambahkan beberapa spasi ekstra ke baris atas untuk membuat kodenya mempertahankan keselarasan dan indentasi yang tepat dengan kode dari baris bawah. Mungkin ini bisa dengan mudah dilakukan dengan cetakan?printf
.git diffn
. Lihat di sini: stackoverflow.com/a/61997003/4561887 . Terima kasih @PFudd, atas jawaban Anda. Saya mempelajarinya dan menggunakannya untuk belajar, lalu mulai dari awal dan menulisgit diffn
. Setelah diformat sehingga saya dapat membaca kode Anda (terima kasih @EdMorton), saya dapat mempelajari beberapa hal hebat darinya yang membantu saya.Berikut adalah skrip yang mencoba untuk memperbaikinya - tidak mengujinya dalam kemarahan tetapi tampaknya baik-baik saja. Ini bergantung pada rekaman yang dihasilkan git diff dan menggunakan awk untuk mempertahankan jumlah baris.
sumber
Anda dapat menggunakan
git difftool
untuk melakukan perbedaan dengan editor eksternal yang akan menampilkan nomor baris. Berikut cara melakukannya dengan vim / vimdiff:Tetapkan vimdiff sebagai git's difftool:
Konfigurasi
~/.vimrc
untuk menampilkan nomor baris secara otomatis saat menggunakan vimdiff:Jalankan git difftool, yang akan menggunakan vimdiff dengan nomor baris:
sumber
Cara cepat adalah menggunakan
git diff -U0
. Itu akan menyetel baris konteks ke 0, yang akan membuat nilai @@ cocok dengan baris yang diubah sebenarnya. Secara default, nilai @@ menyertakan 3 baris sebelum / sesudah konteks, yang tidak nyaman bagi manusia.Contoh:
Ini sulit untuk menghitung nomor baris dari baris yang diubah karena baris 10 mengacu pada baris pertama dari konteks sebelumnya. Nomor baris sebenarnya dari baris pertama yang diubah adalah 10 + 3 = 13. Untuk menghitung jumlah garis yang berubah, maka Anda juga harus mengurangi konteks sebelum dan sesudah: 8-3-3 = 2.
Seperti yang Anda lihat, menyetel konteks = 0 membuat nilai @@ lebih mudah dibaca manusia. Anda dapat melihat bahwa garis yang diubah mulai dari baris 13, dan ada 2 baris yang diubah.
Ini tidak sempurna, karena hanya menampilkan nomor baris untuk setiap blok. Jika Anda ingin melihat nomor baris untuk setiap baris, gunakan alat difftool untuk editor eksternal. Lihat https://stackoverflow.com/a/50049752
sumber
Saya suka menggunakan
git difftool
dengan meld sebagai difftool saya. Lebih mudah untuk dilihat daripadagit diff
, memiliki perbandingan tampilan berdampingan yang bagus, dan menunjukkan nomor baris di setiap sisi.Mendirikan:
Contoh Screenshot:
Pembaruan 24 Mei 2020:
Saya baru saja menulis
git diffn
selama beberapa hari terakhir untuk menjadi pengganti drop-ingit diff
pada baris perintah. Cobalah. Lihat jawaban saya yang lain di sini .sumber
Mulai 24 Mei 2020, Anda sekarang dapat menggunakan alat pihak ketiga
git diffn
(pengungkapan penuh: Saya menulisnya) untuk tujuan ini. Ini adalah pembungkus ringangit diff
, ditulis dalamawk
bahasa pemrograman berbasis pola / tindakan. Berikut adalah contoh keluaran dari menjalankangit diffn
:Berikut demo nya:
1/3: Demo
git diffn
:Buat file ini:
hello_world.c:
Lakukan:
Ubah ke ini dan simpan file:
hello_world.c:
Sekarang jalankan:
Inilah keluaran
git diff
pertama untuk tujuan perbandingan:Dan screenshot untuk menunjukkan warnanya. Perhatikan bahwa bagian yang disorot merah hanya menampilkan spasi kosong (dalam hal ini spasi) yang dapat dihapus:
Sekarang, inilah hasil dari
git diffn
. Perhatikan itu menunjukkan semua nomor baris dengan sempurna!-
tanda di paling kiri DAN di sebelah kanan:
untuk membantu Anda melihat dengan lebih baik - apakah mata Anda suka melihat ke bawah ke kanan dari titik dua atau ke bawah di ujung kiri layar.+
tanda di paling kiri DAN di kanan:
.,
.Hasil dari
git diffn
:Dan screenshot untuk menunjukkan warnanya. Perhatikan bahwa titik dua TIDAK diwarnai atau diatur gaya agar sesuai dengan teks di sekitarnya di kiri dan kanan. Ini adalah perilaku yang disengaja dan dirancang untuk bertindak sebagai pemisah visual antara nomor baris yang ditambahkan di kiri dan
git diff
keluaran asli di kanan.2/3: Apa itu?
Dari atas
git-diffn.sh
:DESKRIPSI:
git-diffn.sh
pengganti drop-in
git diff
yang juga menunjukkan baris 'n'umbers! Gunakan persis seperti itugit diff
, kecuali Anda akan melihat nomor baris yang indah ini juga untuk membantu Anda memahami perubahan Anda.karena ini hanya pembungkus berbasis bahasa awk yang ringan
git diff
, ia menerima SEMUA opsi dan parameter yanggit diff
menerima. Contoh:git diffn HEAD~
git diffn HEAD~3..HEAD~2
berfungsi dengan
git diff
pengaturan warna Anda , bahkan jika Anda menggunakan warna kustomLihat jawaban saya di sini untuk cara mengatur warna diff khusus, serta untuk melihat tangkapan layar dari keluaran warna khusus dari
git diffn
: Bagaimana Anda menyesuaikan warna header diff di git diff?Berikut adalah beberapa contoh
git config
perintah dari jawaban saya di atas untuk mengaturgit diff
warna dan atribut khusus (pemformatan teks):di
git diffn
, keluaran warna AKTIF secara default; jika Anda ingin menonaktifkan warna keluaran, Anda harus menggunakan--no-color
atau--color=never
. Lihatman git diff
untuk detailnya. Contoh:3/3: Instalasi
gawk
. Jika demikian, coba ini :brew install gawk
.Opsi 1 (rekomendasi saya): unduh seluruh repo dan kemudian buat symlink ke program sehingga Anda dapat dengan mudah menerima pembaruan dengan melakukan a
git pull
dari repo kapan pun Anda mau.Pertama,
cd
ke mana pun Anda ingin menginstal ini. Lalu lari:Selesai! Sekarang lakukan saja langkah terakhir di bawah ini!
Opsi 2 (bagi yang hanya menginginkan 1 file): unduh satu file sekali saja.
Selesai! Sekarang lakukan saja langkah terakhir di bawah ini!
Langkah terakhir:
Sekarang tutup dan buka kembali terminal Anda, atau sumber kembali dengan
. ~/.bashrc
, dan Anda selesai!git diffn
sekarang akan berfungsi sebagai pengganti mampir yang tepat untukgit diff
!sumber
Anda dapat mencoba
di file. Ini menunjukkan kepada Anda pelaku, komit id, dan nomor baris untuk setiap baris dalam file.
sumber
git blame
hanya akan menunjukkan status file saat ini dengan nomor baris.git blame
sama sekali tidak menjawab pertanyaan itu; Saya cukup bingung dengan suara positif di siniPertama, konfigurasikan alat git diff Anda, misalnya Meld
Kemudian, cabut difftool Anda pada beberapa file:
Ingat mengatur nomor baris dalam preferensi alat diff Anda.
sumber