我正在尝试在pygit2中实现git add -p
,所以我可以为它做一个替代前端。所以我需要能够首先表现出个人背景。
我可以使用索引中的diff_to_workdir
来找到帅哥,如下所示:
index.diff_to_workdir(0,1,1)[0].hunks
但我不确定如何从那里开始。事实上,我的直觉告诉我,我根本不会进行任何事情,而是自己组织一个提交,然后将其交给回购。
我感觉我最终需要能够从块中创建一个blob,然后使用TreeBuilder来创建一个提交。但我无法到达那里!好像我只能从文件中创建blob。任何人都可以提供一点指导吗?
答案 0 :(得分:1)
为了暂存文件,不需要接近提交,甚至是树。您所需要的只是将新版本的文件放在磁盘索引中。
首先,您在索引
中获取该文件的当前版本path = 'src/somefile.py'
repo = Repository('.')
index = Repository.index
id = index[path].id
contents = repo[id].data
将diff应用于文件的分阶段版本后,您可以将这些修补内容写入对象db并使用
创建树新索引条目new_contents = my_favourite_patch_lib.patch(contents, hunk)
new_id = repo.write(new_contents, GIT_OBJ_BLOB)
new_entry = IndexEntry(path, new_id, GIT_FILEMODE_BLOB)
现在您可以更新索引并将其写入磁盘,以便系统的其余部分可以将其取出
index.add(new_entry)
index.write()
现在,您可以在存储库中获得该文件的新内容,并且索引会将这些新内容视为该文件的状态。