Git-diff 转为 HTML

7
我正在寻找一种方法,可以使用Python从git-diff输出生成HTML文件。我一直在查看http://docs.python.org/library/difflib.html,但无法弄清如何将git-diff输出用作输入。有什么提示吗?非常感谢。

3
与https://dev59.com/wnI-5IYBdhLWcg3wHUZB非常相似-可能对你有用。 - martin clayton
3个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
9
你可以使用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

谢谢,然而这并不是我正在寻找的。很抱歉我的问题表述不够清晰,也许它确实值得研究,但我担心Pygment只能用于语法高亮。常规的差异输出使用"ascii"来图形化显示两个文件之间的差异,我想要做的是以图形方式显示这些差异,可以通过将两个文件并排显示(像维基百科一样)或者例如使用CSS属性'overline'来显示删除的块。 - kifkif

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


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