彩色的Git差异转换为HTML

75

我喜欢使用git diff --color-words命令来清晰地查看文件中已更改的单词:

屏幕截图

但是,我想与没有安装git或者无法显示颜色的终端的人共享此diff结果。那么有没有工具或技巧可以将带有颜色转义符的终端输出转换为HTML格式呢?

9个回答

96
wget "http://www.pixelbeat.org/scripts/ansi2html.sh" -O /tmp/ansi2html.sh
chmod +x /tmp/ansi2html.sh
git diff --color-words --no-index orig.txt edited.txt | \
/tmp/ansi2html.sh > 2beshared.html

我真正需要的是一个将ANSI转换成HTML格式的工具。我在http://www.pixelbeat.org/上找到了一个非常不错的工具。

注意:如果没有包含--color--color-words,可能无法看到任何颜色,因为管道会导致Git Diff排除颜色。

注意2:您可能需要安装GNU sed和awk,特别是如果您使用的是Mac。请使用brew install gnu-sed gawk进行安装。您可能还需要手动将它们添加到您的路径中,例如:ln -s /usr/local/Cellar/gnu-sed/4.2.2/bin/gsed /usr/local/bin/


10
很高兴你喜欢它 :) 你可以在这里看到一些使用示例:http://www.pixelbeat.org/docs/terminal_colours/ - pixelbeat
1
我已经寻找了好几天,想找一个能够生成自动LaTex差异的工具。这是我本周最好的发现。谢谢! - Wynand Winterbach
1
这还能用吗?我收到了一些sed错误:sed:2:“s#\x1b[^\x1b]*\x1b\## ...”:替换命令中的坏标志:“#”。sed:15:“# escape HTML s#\&#\&a ...”:替换命令中的坏标志:“#”。sed:43:“: ansi_to_span#replac ...”:意外的EOF(待定}的)。 - annie
1
我发现使用这个脚本,我可以得到最好的布局:git diff f0f7dfb4 43f7949 --color | ./ansi2html.sh > changes.html - alexleonard
1
Latex用户有时会有非常长的行。如果您将 | fold -w 80 -s | 添加为管道的一部分,则可以将彩色行自动换行。 - Peter Rigby
显示剩余7条评论

12

下载 diff2html,解压缩后使用以下命令将差异转换为 HTML:

$ diff2html file1.txt file2.txt > diff-demo1.htm

有更多的内容...请查看这个问题

或者在获取后:

git diff --color-words --no-index orig.txt /tmp/edited.txt > myfile

这里下载ansifilter,然后使用此命令将myfile转换为HTML格式。

ansifilter -i myfile -H -o myfile2.html

那么...这正是你想要的 ;)


3
我不接受 diff2html,因为它看起来很糟糕。 - hendry
那看起来也太糟糕了。我希望它能像我上面的终端截图一样。 - hendry
我仍然不喜欢它。我相信我需要编写某种 ANSI 转换为 HTML 的转换器。 - hendry
非常感谢您尝试帮助米歇尔。你被挤到了第二名。 :) - hendry
1
diff2html是一个很棒的脚本,可以轻松修改以生成任何结果。 - Three Diag

11

我刚在Debian软件仓库中发现了aha,安装非常简单:

git diff --color | aha > white.html          # white background
git diff --color | aha --black > black.html  # black background
git diff --color | aha --pink > pink.html    # pink background

它极小的下载大小(<20KB)引起了我的好奇心,所以我查看了它的源代码:这是一个自包含的C文件,只包括4个头文件:errno.hstdlib.hstdio.hstring.h,并且仅依赖于libc。 美妙!


4
如果你想查看干净的差异行相似度匹配更好的单词比较语法高亮等等,请查看diff2html,这是一个非常可定制的git差异到HTML展示器。
你可以在命令行上使用它,可以检查diff2html-cli,这是一个简单的基于Node.js编写的CLI。
为了与同事分享你的差异,它与diffy.org集成。
这里查看一个差异样例。

谢谢,这是一个很棒的工具。如果它能够支持在Windows下进行的差异(在---和+++行之后引用路径),那就太好了。 - Zsolti
除了通过 npm 安装 diff2html,还有其他方式可以安装吗? - dokaspar
@dokaspar 不完全是这样。你可以直接运行js,但最终只支持npm作为包管理器。 - rtfpessoa

3

不知道有任何工具可以完全满足您的要求。但是这里有一段我经常用来输出HTML格式化彩色差异的代码:simplediff

它在PHP和Python中都可用。输出使用<del><ins>标签标记差异,因此您可以轻松地使用CSS对其进行着色。


很遗憾,目前还没有一个简单的包装器来制作彩色差异(无论是HTML还是终端)的简单差异。 - Andy Hayden

2

您可能希望查看 GitHub 项目 rmed,它提供了一个命令行工具,可使用 vimdiff 生成静态可共享的 HTML 差异。


1
当我使用Git Bash时,如果你使用git show命令,只需要复制并粘贴控制台中显示的内容,它会正确地复制颜色。

1

1
Unable to determine IP address from host name kernel-demystified.com - ArcherGodson

0

我知道这个问题很老了。然而,如果你正在使用PHP,我刚刚分享了一个简单的渲染器,可以为本地git diff控制台输出添加一些样式:https://github.com/nrctkno/git-diff-renderer


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接