彩色 Git 差异到 HTML

Posted

技术标签:

【中文标题】彩色 Git 差异到 HTML【英文标题】:Coloured Git diff to HTML 【发布时间】:2011-01-02 01:19:32 【问题描述】:

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

但是,我想与没有 git 或彩色终端的人分享这个差异。那么有人知道可以将颜色转义的终端输出转换为html的工具或技巧吗?

【问题讨论】:

【参考方案1】:
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/

【讨论】:

很高兴你喜欢它 :) 你可以在这里看到一些示例用法:pixelbeat.org/docs/terminal_colours 我几天来一直在寻找类似的东西来生成自动 LaTex 差异。这是我本周最好的发现。谢谢! 这还能用吗?我收到一些 sed 错误: sed: 2: " s#\x1b[^\x1b]*\x1b\\## ...": 替代命令中的错误标志:'#' sed: 15: " # escape HTML s#\\&a ...": 替换命令中的错误标志:'#' sed: 43:" :ansi_to_span #replac ...": 意外的 EOF(待处理的 ) 我发现使用这个脚本我得到了最好的布局:git diff f0f7dfb4 43f7949 --color | ./ansi2html.sh > changes.html Latex 用户有时会排很长的队。如果添加 |折叠 -w 80 -s |作为管道的一部分,它将自动换行彩色线条。【参考方案2】:

下载 diff2html,解压并使用以下命令将 diff 转换为 html:

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

还有更多...看看this问题。

在 gitting 之后:

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

从this 位置下载两个 ansifilter。并使用此命令将 myfile 转换为 html 格式

ansifilter -i myfile -H -o myfile2.html

所以...这正是你想要的;)

【讨论】:

flickr.com/photos/hendry/4250699527 我不接受diff2html,因为它看起来很糟糕。 这看起来也很糟糕。我希望它看起来像我上面的终端屏幕截图。 我还是不喜欢。我确信我需要编写某种 ANSI 转义到 HTML 转换器。 非常感谢您帮助米歇尔。你被赶到了岗位。 :) diff2html 是一个很棒的脚本,可以轻松修改以产生任何结果。【参考方案3】:

如果您想查看具有行相似性匹配更好的单词比较语法高亮和更多请查看diff2html,这是非常可自定义 git diff to HTML Presenter。

要在命令行上使用它,您可以查看diff2html-cli,这是一个用 Node.js 编写的简单 CLI。

因此您可以与与diffy.org 集成的同事分享您的差异。

查看差异示例here。

【讨论】:

谢谢,这是一个很棒的工具。如果能增加对 Windows 下差异的支持(在 --- 和 +++ 行之后引用路径),那就太好了。 除了npm之外,是否可以通过其他方式安装diff2html? @dokaspar 不是真的。您可以直接运行 js,但最终 npm 是唯一支持的包管理器。【参考方案4】:

不知道任何工具可以完全按照您的意愿行事。但这里有一段代码我经常用来输出 html 格式的彩色差异:simplediff

它在 php 和 Python 中可用。输出使用 <del><ins> 标签标记差异,因此您可以使用 CSS 轻松为它们着色。

【讨论】:

很遗憾没有简单的 diff 包装器来制作彩色 diff(html 或终端)。【参考方案5】:

我刚刚在 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

它很小的下载大小 (self-contained C file,只有 4 个包括:errno.hstdlib.hstdio.hstring.h,以及仅依赖于 libc。美女!

【讨论】:

【参考方案6】:

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

【讨论】:

【参考方案7】:

我创建了一个 perl 脚本来为 git diff 生成 html 表。要首先使用此脚本,您必须使用 git diff sha1s... > diff.file 收集差异,然后运行 ​​diff2html.pl diff.file。 访问:

http://kernel-demystified.com/forum/index.php/topic,23.msg28.html#new

【讨论】:

Unable to determine IP address from host name kernel-demystified.com【参考方案8】:

当我使用 git bash 时,如果您使用 git show,您只需复制并粘贴控制台中显示的内容,它就会正确复制颜色。

【讨论】:

【参考方案9】:

我知道这个问题很老了。但是,如果您使用的是 PHP,我刚刚共享了一个简单的渲染器,它为本地 git diff 控制台输出添加了一些样式:https://github.com/nrctkno/git-diff-renderer。

【讨论】:

以上是关于彩色 Git 差异到 HTML的主要内容,如果未能解决你的问题,请参考以下文章

如何改进 git 的差异突出显示?

将文件恢复到以前的版本后 git diff 没有显示差异?

将文件恢复到以前的版本后 git diff 没有显示差异?

Windows下GIT配置BeyondCompare为默认差异比较工具和合并工具

从 git 存储库创建补丁或差异文件并将其应用到另一个不同的 git 存储库

详细分析iOS和Android实现有一定差异