有没有办法为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中工作。

编辑:谷歌搜索找到了一个很好的答案:git config --global --add color.ui true

但是,还有什么更通用的解决方案可以为命令输出添加颜色?

评论

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

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

#1 楼

您可以使用以下方法在[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


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

评论


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

–msouth
2015年5月17日下午3:06

这对我来说非常有效-在[color“ status”]部分中,我添加了branch = yellow。

–Wayne Werner
16-10-26在17:06

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

– andrej
17年7月13日在9:30

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

– NeilG
19年9月3日,在1:01

#2 楼

您可能想使用

git config --global color.ui auto


auto部分说git只尝试在支持它的终端上使用颜色,并且如果您重定向,也不会获得ANSI序列。例如,将git命令输出到文件。将其设置为trueauto相同,这也是自Git 1.8.4以来的默认设置。 >
color.ui中对此进行了详细说明。

评论


您能解释一下color.ui true(自动指向)和始终之间的区别吗?我阅读了文档,但仍然没有区别。

–chharvey
19年5月30日在15:03

@chharvey color.ui =自动+ git diff |更少-没有颜色,color.ui =总是+ git diff |较少-彩色输出。暗示LESS = -R。

–x-yuri
20年1月7日,11:50

#3 楼

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


评论


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

– AbhiNickz
18年4月3日在7:59

#4 楼

可接受的答案给出了最常见的解决方案。
如果出于某种原因您不需要永久更改配置(该解决方案可以这样做),则可以使用单个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上不受支持。

评论


对于试图像我以前那样在插入管道时获得颜色的其他人,可以减少通过-R将颜色转义字符传递到终端的次数。

– xdhmoore
17年1月11日在18:16

何时添加此功能?

–恩德拉Žižka
18-10-3在16:47

#5 楼

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


#6 楼

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

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,并希望以某种更全球化的方式进行操作。如果您知道这种方法,请编辑您的答案以进行解释。

–辛德拉巴
17 Mar 2 '17 at 4:51

有时人们会寻找一些密切相关但又有些不同的东西-但要感谢大家的支持。

–TheRiley
17 Mar 3 '17 at 16:04

我喜欢@theRiley

–Richard Lindhout
17年5月2日,12:32

#7 楼

对于通过管道输送到git diff的彩色less来说,这是可行的:

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


#8 楼

您可以使用任意命令输出颜色工具来执行此操作。它通常可以正常工作,但是我还没有弄清楚如何解决一个错误,即没有显示期望输入的提示,并且您不能简单地键入已知的所需输入并按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
17年4月27日在10:05

Nvm,很容易编写。 :)添加到答案。

– Greg Dubicki
17年4月27日在10:45

#9 楼

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

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

 git status | more


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

评论


您还可以更改配置,以将所有内容默认设置为无颜色(color.ui =从不)。

–戴帽子的家伙
18年9月19日在19:27

#10 楼

要给git diff的输出着色,可以在〜/ .gitconfig中添加color.diff部分。例如:

[color "diff"]
  new = bold italic 154
  old = bold italic 196


此处154196是ANSI 256色代码。有关更多详细信息,请参见man git config

#11 楼

看看https://github.com/dandavison/delta上的彩色语言语法-(git)diff输出的突出显示,以及diff中添加/删除的行的彩色突出显示。