Is there a way to color output for git (or any command)?
Consider:
[email protected]:~/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")
[email protected]:~/rails/spunky-monkey$ git add app/models
And
[email protected]:~/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
#
The output looks the same, but the information is totally different: the file has gone from unstaged to staged for commit.
Is there a way to colorize the output? For example, files that are unstaged are red, staged are green?
Or even Changes not staged for commit: to red and # Changes to be committed: to green?
Working in Ubuntu.
EDIT: Googling found this answer which works great: git config --global --add color.ui true.
However, is there any more general solution for adding color to a command output?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
You can create a section [color] in your ~/.gitconfig with e.g. the following content
[color] diff = auto status = auto branch = auto interactive = auto ui = true pager = true
You can also fine control what you want to have coloured in what way, e.g.
[color "status"] added = green changed = red bold untracked = magenta bold [color "branch"] remote = yellow
I hope this gets you started. And of course, you need a terminal which supports colour.
Also see this answer for a way to add colorization directly from the command line.
Method 2
You probably want to use
git config --global color.ui auto
The auto part says that git will only try and use color on terminals that support it, and you will not get ANSI sequences if you redirect output of git commands to a file for example. Setting it to true is same as auto, and this is also the default since Git 1.8.4.
The color.ui is a meta configuration that includes all the various color.* configurations available with git commands.
This is explained in-depth in git help config.
When color.ui is set to always it will always emit ANSI color characters, even when piping the output like git log | less while when set to auto it will not print colors unless the output is to the terminal.
Method 3
The accepted answer gives the most common solution.
If for any reason you need not to permanently change the configuration, which that solution does, you may override the configuration for a single git command:
git -c color.ui=always <usual git command and options>
For example:
git -c color.ui=always status git -c color.ui=always diff
Tested: supported on git 2.4.6, not supported on git 1.7.1.
Method 4
git config --global color.ui auto git config --global color.branch auto git config --global color.status auto
Method 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
Method 6
or turn off all/most of the colorization off via:
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
Method 7
For a colored git diff piped into less, this works:
git -c color.diff=always diff [...] | less -R
Method 8
You can do this with Arbitrary Command Output Colourer. It mostly works, but I haven’t figured out how to work around a bug where prompts expecting input aren’t shown and you can’t simply type the known needed input and press enter to continue in every case.
Example of ~/.acoc.conf for git:
# git [git/ae] /.*(error:.*)/ red+bold /.*(warning:.*)/ yellow /.*(hint:.*)/ magenta /.*(up-to-date).*/ green+bold /.*(nothing to commit).*/ green /^(+.*)/ green /^(-.*)/ red
..which works nicely along with alias git="acoc git" in .bash_profile.
Method 9
I know the post is four years old but no one responded from my camp, the color blind. If you can distinguish colors, ignore my post.
“git status” for example puts out text that is white on background/black on white background (legible), dark gray for deleted (illegible against a black background but legible against a white background) and medium gray for added (barley legible on black background, illegible on white background). I used to toggle the background of my terminal window to/from white/black so I could read the illegible text. A simple solution is more:
git status | more
This makes all the text legible on a standard white or black background terminal window.
Method 10
To colorize the output of git diff you can add a color.diff section to ~/.gitconfig. For example:
[color "diff"] new = bold italic 154 old = bold italic 196
Here 154 and 196 are ANSI 256-color codes. For more details see man git config.
Method 11
Have a look at https://github.com/dandavison/delta for colored language syntax-highlighting of (git) diff output, and colored highlighting of added/removed lines in the diff.
Method 12
Definitely recommend: diff-so-fancy
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0