Bagaimana saya bisa mengaktifkan keluaran berwarna untuk OSX diff?

33

Saya perlu diff dua file (bukan dua versi dari file yang sama, mereka dilacak oleh git, tetapi itu tidak terkait) dan saya ingin beberapa keluaran berwarna, bagaimana saya bisa mencapainya?

$ diff file_1 file_2

1,9d0
< <script ... >
<     // more code
< </script>

$ 

Kode di atas menunjukkan kepada saya perbedaan antara file-file itu, namun tanpa warna. Untuk diff yang lebih panjang itu sulit dibaca.


Atau, apakah ada cara untuk git (yang dengannya saya memiliki keluaran warna yang bagus) untuk membedakan dua file yang berbeda (bukan perubahan ke file)?

OSX (10.7.5)

miphe
sumber

Jawaban:

39

Perl memiliki masalah pembungkus colordiff yang kurang bagus untuk diff, tapi saya lebih suka grc (generic colorizer) .

Dengan grc (coloric colorizer) , Anda dapat menulis pembungkus Anda sendiri untuk berbagai jenis perintah atau input (jika Anda suka hal semacam itu).

Di bawah, grc berjalan berlawanan /var/log/syslog(dalam konfigurasi, file ini diatur ke skema warna tertentu), di mana ia menyoroti proses, pid, IP dan "sambungkan".

Tentu saja, disarankan untuk menggunakan alias agar Anda tidak lupa:

alias diff="/usr/bin/grc /usr/bin/diff"

grc berjalan melawan syslog


Jika Anda memiliki git, Anda mungkin hanya ingin menggunakannya, yang memungkinkan sangat kuat diff , bahkan di seluruh cabang.

git diff master:cogs/foo.txt branch:widgets/bar.txt

Anda tidak harus menggunakan di git diffdalam repositori, Anda dapat menggunakannya hanya untuk file biasa.masukkan deskripsi gambar di sini

git diff old.txt new.txt

Seperti biasa, Anda dapat alias diffuntuk kemudahan penggunaan.

alias diff="git diff"
jnovack
sumber
6
yay for git diff
chrismarx
8
git diffharus ada di bagian atas jawaban Anda! +1 untuk menunjukkan bahwa itu berfungsi bahkan di luar repositori.
Lucio Paiva
4
'git diff' tidak berfungsi pada file generik sehingga aliasing diff menjadi 'git diff' dapat berbahaya
Anton Chikin
1
Ini tidak berfungsi untuk saya ... echo one > foo; echo two > bar; git diff foo bartidak menghasilkan output, sementara diff foo barmenghasilkan 1c1 < one --- > two (dengan format yang tepat, tentu saja)
LarsR
git difftidak berfungsi untuk pipa misalnya
Piotr Findeisen
34

Saat membuat file berbeda, saya hampir selalu menggunakan vim:

vim -d file_1 file_2

Itu tidak hanya menggunakan warna, itu berbaris file sehingga lebih mudah untuk melihat baris ditambahkan / dihapus.

Philip Kearns
sumber
Wow ... Vim adalah hal yang indah.
Weston Ganger
@WestonGanger vim memang luar biasa, tidak pernah berhenti membuat saya terkesan
Philip Kearns
1
vim juga berfungsi pada file patch git (menunjukkan diff berwarna)!
ryanman
7

Anda bisa membuat git melakukan diff dua file berbeda :

git diff branch1:full/path/to/foo.txt branch2:full/path/to/foo-another.txt
Colin Pickard
sumber
6

Untuk membangun jawaban yang disetujui: grc sangat cocok untuk ini. Ini dapat diinstal dengan minuman dan mewarnai sejumlah perintah terminal di luar kotak, berbeda dengan salah satunya. Begitu...

brew install grc

... instal grc ke sistem Anda. Maka Anda perlu mengatur alias Anda, peringatan pembuatan bir memberikan solusi. Cukup tambahkan baris berikut ke .bashrcatau serupa Anda.

source "`brew --prefix`/etc/grc.bashrc"

Ini saat ini akan menambahkan alias berikut:

alias colourify="$GRC -es --colour=auto"
alias configure='colourify ./configure'
alias diff='colourify diff'
alias make='colourify make'
alias gcc='colourify gcc'
alias g++='colourify g++'
alias as='colourify as'
alias gas='colourify gas'
alias ld='colourify ld'
alias netstat='colourify netstat'
alias ping='colourify ping'
alias traceroute='colourify /usr/sbin/traceroute'
alias head='colourify head'
alias tail='colourify tail'
alias dig='colourify dig'
alias mount='colourify mount'
alias ps='colourify ps'
alias mtr='colourify mtr'
alias df='colourify df'
Mattias Bäcklund
sumber