如何使用gitpython暂存文件

时间:2018-02-20 11:19:40

标签: python git gitpython git-stage

gitpython(或者在任何一个python git API中)是否提供了一种方法来从工作树中的文件中调出所选的帅哥,如git add -i允许你这样做?

我想我可以通过在difflib的{​​{1}}和git.diff.Diff属性上使用a_blob来了解如何获得可重复的可变更改,但之后如何我会举一个特别的大块头吗?

而且,对于奖励积分,是否有更好的方法来迭代文件中的更改而不是:

b_blob

我正在考虑比较流的内容,而不是将整个内容加载到内存中然后将其拆分成行。

1 个答案:

答案 0 :(得分:0)

我还没有找到一种更好的方法来构建迭代器而不是文件中的更改。但这就是你如何登录该文件的内存版本:

new_version = '........'.encode('utf-8') # Or whatever encoding you use
istream = repo.odb.store(gitdb.IStream(git.Blob.type, len(new_version), BytesIO(new_version)))
file_mode = ... # eg os.stat(file_path).st_mode
entry = git.BaseIndexEntry((file_mode, istream.binsha, 0, file_path))
repo.index.add([entry])

repo.odb.store调用将该版本存储在git数据库中,但此时它并未链接到任何内容。创建BaseIndexEntry对象并将其添加到索引然后将存储的版本链接到索引中 - 链接是通过文件路径和binsha哈希。

似乎这不会对裸存储库起作用。