Saya suka format keluaran dari git diff
. Warna dan +
/ -
representasi perubahan antar baris lebih mudah dibaca daripada GNU diff.
Saya dapat menjalankan git diff
menggunakan --no-index
flag di luar git repo dan berfungsi dengan baik. Namun, tampaknya tidak ada --exclude
opsi untuk mengecualikan file atau subdirektori dari rekursif diff
.
Apakah ada cara untuk mendapatkan yang terbaik dari kedua dunia? (opsi warna dan +
/ -
format git diff
dan --exclude
opsi GNU diff).
Saya sudah bereksperimen colordiff
, tapi saya masih lebih suka format output darigit diff
newtext
dalam/etc/colordiff
. Saya pikir git menggunakan hijau?Jawaban:
Saya tidak tahu bagaimana cara membuat warna, tetapi ini akan dilakukan
+/-
daripada<
dan>
.sumber
diff -u file1 file2 | tig
.colordiff
dari repositori apt / yum / pacman Anda dan gunakan.colordiff
: docs.aws.amazon.com/AWSEC2/latest/UserGuide/…colordiff
, Anda juga bisa mendapatkan warna denganvim
mendefinisikancdiff() { diff -u $@ | vim -R -; }
.Anda juga dapat menggunakan
git diff --no-index -- A B
(melalui halaman manual ).sumber
A
danB
berbeda dibandingkan satu sama lain alih - alih di mana setiap file telah dimodifikasi relatif terhadap revisi terakhir masing-masing.git diff --no-index
memang bagus, tetapi seperti yang ditunjukkan OP, tidak memiliki--exclude
bendera, jadi sering kali kegunaannya sangat terbatas.Instal colordiff .
Perbarui ~ / .colordiffrc Anda (menyalin / etc / colordiffrc Anda terlebih dahulu, jika perlu):
Gunakan
colordiff -u file1 file2
untuk dua file ataucolordiff -ruN path1 path2
untuk membandingkan jalur secara rekursif.Ini tidak persis sama, tetapi sangat dekat.
sumber
Ini yang saya sarankan dan cukup dekat
colordiff
: Anda harus menginstal inibrew install colordiff
di Mac saya.port install colordiff
pada beberapa Mac.sudo apt-get install colordiff
di Debian atau Ubuntu-R
: ini memberitahu Less untuk menampilkan warna, bukan kode mentah.Saya akhirnya menggunakan
-w
karena saya tidak ingin melihat diff spasi putih.Sunting: Seperti yang disarankan oleh @Ciprian Tomoiaga di komentar, Anda dapat membuat ini berfungsi dan memasukkannya ke
~/.bashrc
file Anda juga.sumber
function gdiff () { diff -u $@ | colordiff | less -R; }
GNU
diff
memiliki--color
opsi sejak versi 3.4 pada akhir 2016 sesuai dengan jawaban ini di Unix SE. Itu bersama-u
harus cukup untuk meniru output darigit diff
:diff -u --color=always file1 file2 | less -r
--color
harusalways
ketika digunakan dalam pipa,auto
akan mematikan warna pada pipa.Saya hanya mencoba ini dengan Git Bash di Windows, di mana
less -R
hanya akan mewarnai garis pertama dari sebongkah.less -r
memperbaikinya untuk saya dalam kasus itu.sumber
Hanya menggunakan
bash
,diff
,tput
, danless
, kita dapat erat mendekati outputgit diff
. Akan ada beberapa perbedaan penting, karena kurangnya perhatian paradiff
programmer.Masukkan definisi fungsi Bash berikut dalam beberapa file yang bersumber secara otomatis oleh akun pengguna Anda, dan Anda akan dapat mengakses fungsi dari baris perintah:
Fungsi ini berfungsi sebagai berikut:
diff
akan dipanggil dengan berbagai opsi pemformatan untuk menentukan bagaimana perubahan dalam file akan ditampilkan.tput
digunakan untuk menyisipkan kode warna ANSI ke dalam opsi pemformatan tersebut. Perhatikan bahwa saat menggunakan terminal non-ANSI, Anda mungkin harus menggantitput setaf
dengantput setf
.diff
disalurkan keless
.-R
memungkinkan warna ANSI dipertahankan.-X
mencegahless
dari membersihkan layar saat keluar.-F
mencegahless
beroperasi sebagai pager jika output cocok dalam satu layar.@full
, fungsi akan menampilkan semua baris yang tidak berubah selain baris yang ditambahkan dan dihapus.Perhatikan perbedaan berikut antara pendekatan ini dan
git diff
:git diff
melaporkan tiga baris konteks seputar setiap perubahan. Sayangnya,diff
tampaknya mengeluh dan keluar jika Anda ingin menentukan jumlah baris konteks sementara juga secara bersamaan menentukan opsi pemformatan. (Setidaknya itu di Mac OS X Yosemite). Terima kasihdiff
programmer. Oleh karena itu, Anda dapat meminta tidak ada baris konteks di sekitar setiap perubahan, yang merupakan perilaku default, atau Anda dapat meminta agar semua baris yang tidak berubah dalam file juga dilaporkan, dengan menetapkan@full
sebagai parameter pertama.git diff
, nomor baris yang dilaporkan oleh fungsi ini juga akan berbeda dari yang dilaporkan olehgit diff
.git diff
berurusan dengan ini lebih baik, melalui garis konteksnya. Anda dapat mencoba melewati opsi yang berbedadiff
untuk menangani ruang putih dengan lebih baik, jika Anda mau.sumber
Anda mencari
colordiff
:sumber
Tempatkan ini di Anda
.bashrc
atau.zshrc
:diff() { git diff --no-index "$1" "$2" | colordiff; }
persyaratan:
git
dancolordiff
harus dipasang sebelumnya.penggunaan:
diff file1 file2
contoh: untuk $
diff .tmux.conf .zshrc.pre-oh-my-zsh
sumber
Pilihan lainnya adalah melakukannya dari luar repositori sehingga git tahu untuk membedakan antar file. misalnya. fungsi shell seperti:
sumber
Gunakan colordiff :
Instalasi:
Pemakaian:
Memberikan perbedaan yang persis sama seperti yang ditunjukkan oleh
git diff
.sumber
Jika Anda tidak memiliki
colordiff
ataugit diff
, Anda bisa mendapatkan warna denganvim
.atau sederhana
sumber
Karena kelelawar memiliki pewarnaan yang bagus, saya telah menguji apakah itu berfungsi dengan baik
diff
dan secara mengejutkan itu bekerja dengan sangat baik di luar kotak.$ diff file1 file2 | bat
atau$ diff -u file1 file2 | bat
Jadi saya kira Anda bisa membuat fungsi seperti ini di bawah ini menjadi lebih efisien:
sumber
Diuji dalam debian 9
diff -u --color=always file1 file2
sumber
Saya pikir pengaturan konfigurasi:
dikombinasikan dengan
--relative=<path>
opsi perintah "diff" akan melakukan apa yang Anda inginkan. Apakah kamu sudah mencoba?sumber
git
. Dia memintadiff
opsi program