Since my upgrade to OS X 10.5 I have been having a terrible time getting colors to work with git.
Originally I was using OS X 10.5.4, git version 22.214.171.124, and iTerm or Terminal.app. $TERM=xterm or xterm-color. I have color with PS1, ls, vim and most git tasks. However, git diff (or git show) always screws up the diff by showing the ESC[ characters instead of colors. For instance:
[nathan@nate ~/s3]$ git show 67d254ec17f ESC[33mcommit 67d254ec17fdc507765ddee1feb2a14e5896e79fESC[m
I searched and searched wasn't able to figure out how to fix this. It was suggested on the github forum that I upgrade to git 126.96.36.199. Unfortunately not only did it not fix the color in git diff, it broke the color in git status which was working previously.
After about a week of poking around on and off I discovered that the problem was not git, but my GIT_PAGER which is more. If I tried GIT_PAGER=cat git-diff then the color output just fine. less and more use the same environment variable LESS (man less for details). And less was outputting the colors as raw escape codes.
man less shows that the option -R is defined as follows:
-R or --RAW-CONTROL-CHARS Like -r, but only ANSI "color" escape sequences are output in "raw" form.
That would do it.
After perusing the man page for a while I settled on adding this to my
At the end of the day, this tip is really about less and how it interprets colors and probably has little to do with git. Even so, I only found this odd behavior while using git. Hopefully this post will help someone who is having similar issues.
As a side note, below is an example of how to configure your colors for git-diff and other commands.
[user] name = Your Name email = y...@yours.com [color] branch = auto status = auto diff = auto [color "diff"] meta = yellow frag = cyan old = red new = green [color "branch"] current = yellow reverse local = yellow remote = green [color "status"] added = yellow changed = green untracked = cyan [alias] st = status ci = commit co = checkout br = branch