gitpython:如何以人类可读的格式显示blob之间的差异,如gitk?

时间:2017-06-15 13:04:08

标签: gitpython

我必须遗漏一些非常基本的东西。鉴于此脚本:

public static void addPlayer(/*...*/)

我得到这样的东西:

import git
repo = git.Repo(r'C:/leo.repo/leo-editor') 
diff_index = repo.head.commit.diff('HEAD~1')
for d in diff_index:
    print('%s %9s %9s %s' % (
        d.change_type, id(d.a_blob), id(d.b_blob), d.a_path))

到目前为止,这么好。这与gitk显示的内容兼容,即对显示的三个文件进行修改。

但是现在,要访问每个文件的a_blob和b_blob对象,我如何获得这两个blob之间差异的人类可读差异?换句话说,我想重新创建gitk显示的内容。

我没有在与此相关的文档中看到任何内容。

爱德华

1 个答案:

答案 0 :(得分:0)

我的问题是this stack-overflow question的变体。

给定一个blob,blob.data_stream.read()返回其原始内容,即Python 2上的<str>对象和Python 3上的<bytes>对象。

不是阅读虚弱的api docs for Objects.Blob,而是阅读source code会更好。实际上,Objects.Blob是base.IndexObject的子类,它继承base.Object中的data_stream属性(不要与对象混淆)。