Git-log'da renk


106

Çalıştırdığınızda git log --decorate --pretty=oneline, çıktı (HEAD, refs/published/master, master)renklendirmede olduğu gibi girdilere sahip olacaktır .

Ayrıca gitconfig'imde aşağıdakiler var:

[color "branch"]
    current = yellow reverse
    local = yellow
    remote = green

Aşağıdaki gibi özel bir format yaparken bu renkleri nasıl kopyalıyorsunuz?

git log --decorate --stat --graph --pretty=format:"%d %Cgreen%h%Creset (%ar - %Cred%an%Creset), %s%n"

Yanıtlar:


91

Git 1.8.3 (24 Mayıs 2013) itibarı ile , biçim dizesini %C(auto)süslemek için kullanabilirsiniz .%dgit log

Gönderen sürüm notları :

 * "git log --format" specifier learned %C(auto) token that tells Git
   to use color when interpolating %d (decoration), %h (short commit
   object name), etc. for terminal output.)

60

git log --decorateVarsayılan olarak koyacağız:

  • HEAD camgöbeği
  • kırmızı renkli uzak dallar
  • yeşil etiket

ve color.decorateconfig aracılığıyla değiştirilebilir .

Ancak, git log --formatözel olarak HEAD veya uzaktan kumandaları veya şubeyi görüntülemek için bir yol sunmuyor : üçü de %dtek bir renkle gösteriliyor .


Mayıs 2013 Güncellemesi, aşağıda Elad Shahar tarafından belirtildiği gibi (yükseltildi), Git 1.8.3 bir seçenek daha sunuyor:

git log –formatartık %C(auto)Git'e uçbirim çıktısı için çözümleme %d(dekorasyon), %h(kısa işleme nesne adı) vb. sırasında renk kullanmasını söyleyen bir belirteç bulunuyor .

Bu Atlassian blog yazısı , bu özelliğin format ( git rebase, git count-objects) ve renklere ( git branch -vv) odaklanan diğerlerinin bir parçası olduğunu söylüyor.

Bu , çıktı bir terminal için kullanılmadığında renkleri otomatik olarak devre dışı bırakan auto,reset1.8.2'ye ek olarak gelir1

%C(auto,blue)Hello%C(auto,reset)

Not: git 2.4+ (Q2 2015), şube adlarının etrafındaki rengi sıfırlama konusunda daha iyi bir iş çıkaracaktır.
Bkz 5ee8758 tamamlama ile (Junio Cı Hamano gitster) :

log --decorate: "commit" rengini bir sonraki öğeye sızdırmayın

" git log --decorate" İçinde , kaydetme başlığını şu şekilde görürsünüz:

commit ... (HEAD, jc/decorate-leaky-separator-color)

burada " commit ... (" boyanmış color.diff.commit, " HEAD" içinde color.decorate.head" ," içinde color.diff.commit, dal adı color.decorate.branchgirilmiş ve sonra " )" içinde kapanmıştır color.diff.commit.

HEAD ve yerel dal adını gövde metniyle aynı renge boyamak isterseniz (belki de camgöbeği ve yeşil, siyah-beyaz bir terminalde okunamayacak kadar soluk olduğundan), söylemek zorunda kalmazsınız.

[color "decorate"]
    head = black
    branch = black

çünkü aynı yapılandırmayı siyah üzerine beyaz bir terminalde yeniden kullanamazsınız. Safça beklerdin

[color "decorate"]
    head = normal
branch = normal

çalışmak, ama maalesef öyle değil.
" HEAD" Dizgisini ve dal adını, dekorasyon öğeleri arasında açılış parantezi veya virgülle aynı renge boyar.
Bunun nedeni, kodun kendi renginde "ön ek" yazdırdıktan sonra rengi sıfırlamayı unutmasıdır.


Git 2.5'in (Q2 2015) bir hatayı düzelttiğini unutmayın:

Bkz 429ad20 tamamlama ile Junio Cı Hamano ( gitster) , 13 Mayıs 2015
(göre birleştirilmiş Junio Cı Hamano - gitster- içinde fd70780 tamamlama 2015 22 Mayıs)

log: dekorasyon adlarını çok erken kısaltmayın

log --decorateGit 2.4'te geçerli dalın ucundaki HEAD -> masteryürütmeyi gösteren " " geliştirme, örneğin " ", --decorate = full ile çalışmadı.


Git 2.9.x + (Q3 2016) Başka bir hata ve çözecektir onur color=autoiçin%C(auto)


Git 2.10.2 (Ekim 2016) , René Scharfe (``) tarafından 82b83da (29 Eylül 2016) ve commit c99ad27 (17 Eylül 2016) ile diğer hataları düzeltir . (Tarafından Birleştirilmiş - Junio C Hamano - içinde 76796d4 taahhüt 2016, 28 Eki)
gitster

pretty: %C(auto)çıktı boşsa sıfırlama eklemekten kaçının

%C(auto)Otomatik renklendirmenin amaçlandığı gibi görüntülendiğinden emin olmak için rengi ve niteliği sıfırlamak için bir kaçış dizisi yayınlıyoruz .
Çıktı strbuf boşsa , yani %C(auto)biçim dizgisinin başlangıcında göründüğünde bunu yapmayı bırakın , çünkü o zaman sıfırlamaya gerek yoktur ve çıktıda birkaç bayt kaydederiz.

pretty: %C(auto)tüm özellikleri sıfırlayalım

Renkleri sıfırla ve nitelikleri üzerine %C(auto)üzerlerinden tam otomatik kontrol sağlamak için; aksi takdirde kalın veya ters gibi özellikler, önceki %Cyer tutuculardan yine de geçerli olabilir .


3
--decorate ve --pretty = "... stuff" kullanmanın bir yolu yok mu?
NorthIsUp

8
@NorthlsUp: --decoratekendi uygulaması ve yapılandırmasına sahip gibi görünüyor, ancak --prettyaynı bilgiyi %dtek bir blok aracılığıyla sunuyor , yani sahip olduğunuzla aynı ince taneli renk yapılandırmasına sahip --prettyolamayacağınız anlamına geliyor --decorate.
VonC

"Git log" un sonrasına "--decorate" eklediğimde gördüğüm tek fark, depoların "refs / heads / ..." veya "refs / remotes ..." ile başlaması. Renkler her iki şekilde de ortaya çıkıyor. Buna neyin sebep olacağı hakkında bir fikriniz var mı? Sormamın nedeni .gitconfig dosyamın hiçbir renk özelliği göstermemesi. "Color.decorate" mülkümü nerede bulabileceğimi merak ediyorum. Bunu .gitconfig dosyamda göremiyorum.
J Woodchuck

@JWoodchuck Deneyin git config --show-origin -l: tüm yapılandırmalarınızı göreceksiniz . Daha sonra "renk" için grep yapabilirsiniz.
VonC

Evet, renk aradığımda hiçbir şey görünmüyor, bu da ayarların nerede göründüğünü çok gizemli hale getiriyor.
J Woodchuck

9

Parantez içine alın:

%C(...): color specification, as described in color.branch.* config option

Bu yüzden %C(yellow reverse)işe yarar.


1
tam olarak değil %d, tüm dallar öyle görünebilir (HEAD, master), bu durumda baş mavi ve usta yeşil olmalıdır (bunların varsayılan renkler olduğuna inanıyorum). %C(yellow)%d%Cresethepsinin aynı rengi nerede yapacağını.
NorthIsUp

2
Oh, bireysel süsleri renklendirmek. Bunun imkansız olduğunu düşünüyorum. Günlük girişlerini işleme kodu esasen iki kez uygulanır.
Josh Lee

1
Ne yazık ki bu mümkün değil ... git log --decorate --oneline --date=...
Yapmayı çok isterim

8

Yapılandırma seçeneği log.decorate, günlüklerdeki varsayılan süslemeleri etkinleştirebilir / devre dışı bırakabilir.

git config --global log.decorate full

Bu bittiğinde color.decorate.*renklerle oynamak için kullanabilirsiniz


3
log.decorate=fullref adlarının önekleriyle ( refs/heads/vb.) yazdırılmasına neden olur ; log.decorate=shortDaha kullanışlı buluyorum .
musiphil

1
Çok kullanışlı bir ortam, bunun shortyerine tercih full
Thomas Levesque

4

Bazıları bunu kullanmak isteyebilir: %C(colorname) Bunun renk yapılandırmasını değiştirmesine gerek yoktur.

Örnek: Yazar adını sarıyla renklendirmek

--pretty=format:"%C(yellow)%an%Creset"

Normal ANSI renkleri https://en.wikipedia.org/wiki/ANSI_escape_code ile çalışmalıdır

  • siyah
  • kırmızı
  • yeşil
  • Sarı
  • mavi
  • eflatun
  • camgöbeği
  • beyaz
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.