1

我正在尝试git add -p在 pygit2 中实现,所以我可以为它制作一个替代前端。所以我首先需要能够上演个人帅哥。

我可以通过使用diff_to_workdir索引找到帅哥,如下所示:

index.diff_to_workdir(0,1,1)[0].hunks

但我不确定如何从那里开始。事实上,我的直觉告诉我,我根本不做任何事情,而是自己整理一个提交,然后把它交给 repo。

我有一种感觉,我最终需要能够从大块中创建一个 blob,然后使用 TreeBuilder 创建一个提交。但我就是无法到达那里!似乎我只能从文件创建 blob。谁能给一点指导?

4

1 回答 1

1

为了暂存文件,不需要靠近提交,甚至不需要靠近树。您只需将文件的新版本放入磁盘索引中。

首先,您在索引中获取文件的当前版本

path = 'src/somefile.py'
repo = Repository('.')
index = Repository.index
id = index[path].id
contents = repo[id].data

将差异应用到文件的暂存版本后,您可以将这些修补内容写入对象数据库并创建树新索引条目

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()

现在您在存储库中获得了文件的新内容,并且索引将这些新内容视为文件的状态。

于 2014-03-27T04:44:33.723 回答