1

私はgit add -ppygit2に実装しようとしているので、それに代わるフロントエンドを作ることができます。そのため、何よりもまず、個々のハンクをステージングできる必要があります。

diff_to_workdir次のように、インデックスから使用してハンクを見つけることができます。

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

しかし、そこから先に進む方法が正確にはわかりません。実際、私の直感では、私は何もステージングするのではなく、自分でコミットをまとめてレポに渡します。

最終的には、ハンクからブロブを作成し、TreeBuilder を使用してコミットを作成できるようにする必要があると感じています。しかし、私はそこに着くことができません!ファイルからのみブロブを作成できるようです。誰でも少し指導できますか?

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 に答える