gitpython(或者在任何一个python git API中)是否提供了一种方法来从工作树中的文件中调出所选的帅哥,如git add -i
允许你这样做?
我想我可以通过在difflib
的{{1}}和git.diff.Diff
属性上使用a_blob
来了解如何获得可重复的可变更改,但之后如何我会举一个特别的大块头吗?
而且,对于奖励积分,是否有更好的方法来迭代文件中的更改而不是:
b_blob
我正在考虑比较流的内容,而不是将整个内容加载到内存中然后将其拆分成行。
答案 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
哈希。
似乎这不会对裸存储库起作用。