RoR
RoR

Reputation: 16512

Git diff output to file preserve coloring

Is it possible to do git diff and save the output to a file with the coloring somehow?

I know how to do git diff > filename.rtf - which saves to a file, but I'd like to preserve the coloring.

Upvotes: 211

Views: 185119

Answers (10)

ralphtheninja
ralphtheninja

Reputation: 133258

Try:

git diff --color > foo.txt

Then later issue:

cat foo.txt

Or:

less -R foo.txt

https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration:

Git automatically colors most of its output, but there’s a master switch if you don’t like this behavior. To turn off all Git’s colored terminal output, do this:

$ git config --global color.ui false

The default setting is auto, which colors output when it’s going straight to a terminal, but omits the color-control codes when the output is redirected to a pipe or a file.

You can also set it to always to ignore the difference between terminals and pipes. You’ll rarely want this; in most scenarios, if you want color codes in your redirected output, you can instead pass a --color flag to the Git command to force it to use color codes. The default setting is almost always what you’ll want.

Upvotes: 246

VonC
VonC

Reputation: 1330102

As an alternative to file redirection, you also have the git diff --output option

git diff --color --output=aFile
cat aFile
# you would still see the colors

However, make sure to not use the combined diff format (for diff on merge commits), like git diff -c or git diff --cc

With Git 2.38 (Q3 2022), certain diff options (including --output) are currently ignored when combined-diff is shown; mark them as incompatible with the feature.

See commit cfb19ae, commit e3d1be4 (18 Jun 2022) by René Scharfe (rscharfe).
(Merged by Junio C Hamano -- gitster -- in commit a2d1f00, 11 Jul 2022)

combine-diff: abort if --output is given

Reported-by: Ævar Arnfjörð Bjarmason
Signed-off-by: René Scharfe

The code for combined diffs currently only writes to stdout.
Abort and report that fact instead of silently ignoring the --output option.
The (empty) output file has already been created at that point, though.

The error message would therefore be:

combined diff and '--output' cannot be used together

Upvotes: 2

Julien
Julien

Reputation: 247

Open the output diff file in Sublime Text 2. It shows the diff colors.

Upvotes: 23

ironhyde
ironhyde

Reputation: 1036

Save the file with a .diff extension and open it in Notepad++ or Vim or SublimeText.

git diff > 20150203_someChanges.diff

Thanks @Monsingor

Upvotes: 86

Scott Stensland
Scott Stensland

Reputation: 28345

to allow any colorized terminal text ... git diff or any other ... to be viewable from a browser

sudo apt-get install aha  #  https://github.com/theZiz/aha

install aha using above then issue

git diff --color mysourcefile  | aha > ~/cool_colorized.html

firefox  ~/cool_colorized.html

Upvotes: 3

Choylton B. Higginbottom
Choylton B. Higginbottom

Reputation: 2314

You could upload to GitHub and provide a link to the relevant commit.

Upvotes: 0

sk8asd123
sk8asd123

Reputation: 1705

To expand on @Gabe's answer.

You can pipe the output to an ansi to html converter bash script and direct that output to an html file:

git diff --color|./ansi2html.sh > changes.html

of course html can be viewed by any browser so output can be read in Windows etc.

ansi2html code is here: http://www.pixelbeat.org/scripts/ansi2html.sh

Upvotes: 20

amaslenn
amaslenn

Reputation: 805

I found an answer here: Color output of specific git command.

You can pass -c color.ui=always to any git command and it will keep coloring on redirection. For example: git -c color.ui=always status > file

Upvotes: 5

Abhijeet
Abhijeet

Reputation: 8781

git remote add -f b path/to/repo_b.git
git remote update
git diff master remotes/b/master > foo.txt

Differences extracted in '*.txt' files are easily read by SublimeText2 without the need to set (via View -> Syntax -> Diff).

Upvotes: 1

Rose Perrone
Rose Perrone

Reputation: 63616

Vim colors files containing git diff's beautifully.

git diff

Upvotes: 8

Related Questions