Git-diff到HTML

时间:2010-01-13 00:56:03

标签: python html git diff

我正在寻找一种从git-diff输出生成HTML文件的方法,最好是使用python。我一直在查看http://docs.python.org/library/difflib.html而无法弄清楚如何使用git-diff输出作为输入。

有任何线索吗?

非常感谢

3 个答案:

答案 0 :(得分:8)

您可以使用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

P.S。要查看所有可用的样式,请尝试:

$ pygmentize -L styles

P.P.S。要使管道完整,您可以使用此trick

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

答案 1 :(得分:1)

也许 difr 就是您所需要的。它需要任何类型的git样式diff作为输入并生成它的HTML版本,这与GitHub给你的相似。 (并且它嵌入了一个编辑器,用于添加一些小注释。这可能比你要求的更多,但我认为它不会妨碍你。)

https://github.com/wspringer/difr

答案 2 :(得分: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]) 

看看它。