Bagaimana mewarnai keluaran git?

256

Apakah ada cara untuk mewarnai keluaran untuk git (atau perintah apa pun)?

Mempertimbangkan:

baller@Laptop:~/rails/spunky-monkey$ git status
# On branch new-message-types
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   app/models/message_type.rb
#
no changes added to commit (use "git add" and/or "git commit -a")
baller@Laptop:~/rails/spunky-monkey$ git add app/models

Dan

baller@Laptop:~/rails/spunky-monkey$ git status
# On branch new-message-types
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   app/models/message_type.rb
#

Outputnya terlihat sama, tetapi informasinya sama sekali berbeda: file telah berubah dari tidak dipentaskan menjadi dipentaskan untuk komit.

Apakah ada cara untuk mewarnai output? Misalnya, file yang tidak dipentaskan berwarna merah, dipentangkan berwarna hijau?

Atau bahkan Changes not staged for commit:menjadi merah dan # Changes to be committed:hijau?

Bekerja di Ubuntu.

EDIT: Googling menemukan jawaban ini yang bekerja besar: git config --global --add color.ui true.

Namun, apakah ada solusi yang lebih umum untuk menambahkan warna ke output perintah?

B Tujuh
sumber
1
Anda menginginkan sesuatu yang mewarnai semua output perintah? Bagaimana ia tahu bagian mana yang diwarnai?
Michael Mrozek
Saya kira jika ada cara untuk mengonfigurasinya menggunakan regex: Setiap warna bisa memiliki regex mulai. Dan mungkin ada regex warna default untuk mematikan semua warna. Dan, jika teks "foo" muncul, tampilkan dalam warna tertentu ...
B Seven

Jawaban:

268

Anda dapat membuat bagian [color]di Anda ~/.gitconfigdengan misalnya konten berikut

[color]
  diff = auto
  status = auto
  branch = auto
  interactive = auto
  ui = true
  pager = true

Anda juga dapat mengontrol dengan baik apa yang ingin Anda warnai dengan cara apa, misalnya

[color "status"]
  added = green
  changed = red bold
  untracked = magenta bold

[color "branch"]
  remote = yellow

Saya harap ini memulainya. Dan tentu saja, Anda membutuhkan terminal yang mendukung warna.

Marco
sumber
14
Saya pikir mungkin ada baiknya menempatkan git config --global color.ui auto (jawaban @ Evgeny) di atas Anda ... Saya pikir itu mungkin yang dicari oleh kebanyakan orang. Saya telah memutakhirkan keduanya ... Saya hanya mengatakan, demi internet ketika datang ke sini, saya pikir banyak orang hanya ingin yang sederhana satu liner. Lebih baik jika mereka mendapatkannya, ditambah kebaikan ekstra Anda.
msouth
Ini bekerja dengan baik untuk saya - di [color "status"]bagian yang saya tambahkan branch = yellow.
Wayne Werner
3
Anda dapat menambahkan bagian [warna] ke file .git / config proyek juga
andrej
Dan Anda bisa mengatur variabel konfigurasi untuk satu permintaan perintah git: stackoverflow.com/a/18304605/134044
NeilG
220

Anda mungkin ingin menggunakannya

git config --global color.ui auto

Bagian tersebut automengatakan bahwa git hanya akan mencoba dan menggunakan warna pada terminal yang mendukungnya, dan Anda tidak akan mendapatkan urutan ANSI jika Anda mengarahkan output dari perintah git ke file misalnya. Pengaturannya truesama dengan auto, dan ini juga merupakan default sejak Git 1.8.4.

Ini color.uiadalah konfigurasi meta yang mencakup semua color.*konfigurasi yang tersedia dengan perintah git.

Ini dijelaskan secara mendalam di git help config.

Evgeny
sumber
Bisakah Anda menjelaskan perbedaan antara color.ui true(yang automenunjuk ke) versus always? Saya membaca dokumen tetapi saya masih belum mendapatkan perbedaannya.
chharvey
19
git config --global color.ui auto
git config --global color.branch auto
git config --global color.status auto
sakisk
sumber
FYI, Hanya ini yang berfungsi untuk git versi 1.5.2.1, jawaban lain tidak.
AbhiNickz
14

Jawaban yang diterima memberikan solusi paling umum. Jika karena alasan apa pun Anda tidak perlu mengubah konfigurasi secara permanen, yang dilakukan oleh solusi itu, Anda dapat mengganti konfigurasi untuk perintah git tunggal:

git -c color.ui=always <usual git command and options>

Sebagai contoh:

git -c color.ui=always status
git -c color.ui=always diff

Diuji: didukung pada git 2.4.6, tidak didukung pada git 1.7.1.

Dukuh
sumber
2
Untuk orang lain yang mencoba untuk mendapatkan warna ketika mem-pipi lessseperti saya, Anda dapat lessmengirimkan karakter pelarian warna ke terminal melalui less -R.
xdhmoore
Kapan fitur ini ditambahkan?
Ondra Žižka
11
git config --global color.ui always
git config --global color.branch always
git config --global color.diff always
git config --global color.interactive always
git config --global color.status always
git config --global color.grep always
git config --global color.pager true
git config --global color.decorate always
git config --global color.showbranch always
mlibre
sumber
1

Anda dapat melakukan ini dengan Colourer Perintah Output Sewenang - wenang . Sebagian besar berfungsi, tapi saya belum menemukan cara mengatasi bug di mana prompt mengharapkan input tidak ditampilkan dan Anda tidak bisa cukup mengetik input yang diperlukan dan tekan enter untuk melanjutkan dalam setiap kasus.

Contoh ~/.acoc.confuntuk git:

# git
[git/ae]
/.*(error:.*)/                                    red+bold
/.*(warning:.*)/                                  yellow
/.*(hint:.*)/                                     magenta
/.*(up-to-date).*/                                green+bold
/.*(nothing to commit).*/                         green
/^(\+.*)/                                         green
/^(-.*)/                                          red

..which bekerja dengan baik bersama dengan alias git="acoc git"di .bash_profile.

Tom Mahoney
sumber
Bisakah Anda membagikan konfigurasi Anda acoc?
Greg Dubicki
Nvm, mudah untuk menulis. :) Ditambahkan ke jawabannya.
Greg Dubicki
1

Untuk git diffpipa berwarna less, ini bekerja:

git -c color.diff=always diff [...] | less -R
cemas
sumber
0

Saya tahu pos itu berumur empat tahun tetapi tidak ada yang menanggapi dari kamp saya, warnanya buta. Jika Anda dapat membedakan warna, abaikan posting saya.

"git status" misalnya mengeluarkan teks yang putih di latar belakang / hitam di latar belakang putih (terbaca), abu-abu gelap untuk dihapus (tidak terbaca dengan latar belakang hitam tetapi terbaca dengan latar belakang putih) dan abu-abu sedang untuk ditambahkan (barley dapat dibaca pada hitam latar belakang, tidak terbaca dengan latar belakang putih). Saya dulu beralih latar belakang terminal saya ke / dari putih / hitam sehingga saya bisa membaca teks yang tidak terbaca. Solusi sederhana lebih dari:

 git status | more

Ini membuat semua teks dapat terbaca pada jendela terminal latar belakang putih atau hitam standar.

Jan David Narkiewicz
sumber
1
Anda juga dapat mengubah konfigurasi untuk mengatur semuanya menjadi tanpa warna secara default ( color.ui = never).
The Guy with The Hat
0

atau matikan semua / sebagian besar pewarnaan melalui:

git config --global color.ui false
git config --global color.branch false
git config --global color.diff false
git config --global color.interactive false
git config --global color.status false
git config --global color.grep false
git config --global color.pager false
git config --global color.decorate false
git config --global color.showbranch false
theRiley
sumber
OP tidak melihat untuk mengubah off warna, bukan untuk menghidupkan pada warna. Dalam OP dia menyatakan bagaimana melakukannya gitdan ingin beberapa cara melakukannya dalam arti yang lebih global. Jika Anda mengetahui metode semacam itu, harap edit jawaban Anda untuk menjelaskannya.
Gypsy Spellweaver
kadang-kadang orang mencari sesuatu yang terkait erat tetapi sedikit berbeda - tetapi terima kasih untuk downvote.
theRiley
Saya menyukainya @theRiley
Richard Lindhout