Git-diff 转换为 HTML

8 投票
3 回答
6405 浏览
提问于 2025-04-15 17:57

我想找到一种方法,可以把git-diff的输出结果变成HTML文件,最好是用Python来实现。我查看了这个链接,但是没搞明白怎么把git-diff的输出作为输入。

有没有什么线索呢?

非常感谢!

3 个回答

1

我为我的 maildiff 写了一个简单的实现。

def getHtml(diffData):
    """ This method convertes git diff data to html color code
    """
    openTag = "<span style='font-size: .80em; color: "
    openTagEnd = ";font-family: courier, arial, helvetica, sans-serif;'>"
    nbsp = '&nbsp;&nbsp;&nbsp;&nbsp;'
    return ''.join([("%s%s%s%s%s</span><br>" % (openTag, '#ff0000' if line.startswith('-') else ('#007900' if line.startswith('+') else '#000000'), openTagEnd, nbsp*line.count('\t') ,line)) for line in diffData]) 

可以看看这个实现。

1

也许 difr 正是你在寻找的东西。它可以接受任何类型的 git 风格的差异(也就是代码的变化)作为输入,然后生成一个 HTML 格式的版本,看起来和 GitHub 上的差不多。(而且它还内置了一个编辑器,可以添加一些小评论。这可能比你最初要求的功能多一点,但我觉得这并不会妨碍使用。)

https://github.com/wspringer/difr

10

你可以使用 pygments 这个命令行工具来生成带有语法高亮的HTML输出。

安装方法:

$ easy_install Pygments

示例:

$ git diff HEAD^1 > last.diff
$ pygmentize -f html -O full,style=trac -l diff -o last.diff.html last.diff

$ # mac only
$ open last.diff.html

或者更简短的方式:

$ git diff | pygmentize -f html -O full,style=emacs -l diff

附注:要查看所有可用的样式,可以试试:

$ pygmentize -L styles

补充说明:为了让整个流程更完整,你可以使用这个 小技巧

$ git diff | pygmentize -f html -O full,style=emacs -l diff | browser

撰写回答