Reputation: 16512
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
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
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 givenReported-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
Reputation: 247
Open the output diff file in Sublime Text 2. It shows the diff colors.
Upvotes: 23
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
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
Reputation: 2314
You could upload to GitHub and provide a link to the relevant commit.
Upvotes: 0
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
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
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