如何为git的输出着色?


255

有没有办法为git(或任何命令)上色输出?

考虑:

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

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
#

输出看起来相同,但是信息却完全不同:文件已从未暂存状态变为已暂存状态以进行提交。

有没有办法使输出着色?例如,未暂存的文件为红色,暂存的文件为绿色?

甚至Changes not staged for commit:是红色和# Changes to be committed:绿色?

在Ubuntu中工作。

编辑:Googling找到了这个很好的答案:git config --global --add color.ui true

但是,是否还有其他通用的解决方案可为命令输出添加颜色?


1
您想要使所有命令输出着色的东西吗?它怎么知道要给哪些部分上色?
Michael Mrozek

我想是否可以使用正则表达式进行配置:每种颜色都可以有一个起始正则表达式。并且可能有默认的颜色正则表达式来关闭所有颜色。并且,如果出现文本“ foo”,
B

Answers:


268

您可以创建一个部分[color]~/.gitconfig与如以下内容

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

您还可以用什么方式精细控制您想要的颜色,例如

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

[color "branch"]
  remote = yellow

我希望这可以帮助您入门。当然,您需要一个支持颜色的终端。


14
我认为可能值得将git config --global color.ui auto(@Evgeny的答案)放在您的顶部...我认为这可能是大多数人想要的。我都赞成...我只是说,为了这里的互联网,我想很多人只想要那种简单的衬垫。如果他们得到了,那就更好了,再加上您的额外好处。
msouth

这对我来说非常有效-在[color "status"]我添加的部分中branch = yellow
韦恩·沃纳

3
您也可以将[color]部分添加到项目的.git / config文件中
andrej

您只需为git命令的一次调用设置配置变量:stackoverflow.com/a/18304605/134044
NeilG

220

您可能想使用

git config --global color.ui auto

auto部分说git只会尝试在支持它的终端上使用颜色,例如,如果将git命令的输出重定向到文件,则不会获得ANSI序列。将其设置true为与相同auto,这也是Git 1.8.4以来的默认设置。

color.ui是一个元配置,其中包括color.*git命令可用的所有各种配置。

在中对此进行了深入解释git help config


您能解释一下color.ui trueauto指向)与之间的区别always吗?我阅读了文档,但仍然没有区别。
chharvey

19
git config --global color.ui auto
git config --global color.branch auto
git config --global color.status auto

仅供参考,仅此功能适用于git版本1.5.2.1,其他答案则无效。
AbhiNickz

14

可接受的答案给出了最常见的解决方案。如果出于某种原因不需要永久更改配置(该解决方案需要这样做),则可以使用单个git命令覆盖该配置:

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

例如:

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

测试:支持git的2.4.6,支持的git 1.7.1。


2
对于less像我刚进入管道时尝试获取颜色的其他任何人,您都可以less通过将颜色转义字符传递到终端less -R
xdhmoore

何时添加此功能?
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

1

您可以使用任意命令输出Colourer进行此操作。它通常可以正常工作,但是我还没有弄清楚如何解决一个错误,即没有显示期望输入的提示,并且您不能简单地键入已知的所需输入并按Enter继续进行操作。

的例子~/.acoc.confgit

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

..这很好地一起工作alias git="acoc git".bash_profile


您可以共享您的配置acoc吗?
Greg Dubicki

Nvm,很容易编写。:)添加到答案。
格雷格·杜比奇

1

对于用git diff管道输送到的有色颜料less,可以使用:

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

0

我知道这个职位已有四岁了,但是没有人从我的营地回复,色盲。如果您可以区分颜色,请忽略我的帖子。

例如,“ git status”显示背景为白色/白色背景为黑色(清晰),已删除的深灰色(黑色背景为清晰,白色背景为清晰)和添加的中灰(大麦在黑色背景上清晰)背景,在白色背景上难以辨认)。我过去经常将终端窗口的背景切换为白色/黑色,这样我就可以阅读难以理解的文本。一个简单的解决方案是:

 git status | more

这使所有文本在标准的白色或黑色背景终端窗口上均清晰可见。


1
您还可以更改配置,以将所有内容默认设置为无颜色(color.ui = never)。
帽子的家伙

0

或通过以下方式关闭所有/大部分着色:

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

OP不注意打开关闭的颜色,而把颜色。他在OP中陈述了如何做到这一点,git并希望以某种更全球化的方式来做到这一点。如果您知道这种方法,请编辑您的答案以进行解释。
Gypsy Spellweaver

有时人们正在寻找一些密切相关但又有些不同的东西-但是谢谢你的反对。
theRiley

我喜欢@theRiley
理查德·
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.