特定のテキストを部分文字列として含む行のみをステージングできるようにする Mac アプリケーションを作成しています。基本的に、ソースツリーがユーザーに提供する機能を構築しようとしています。選択した行をハンクにステージングします。私の選択ロジックは、特定のテキストを部分文字列として含む行を選択することです。しかし、libgit2 でこれを実現する方法がわかりませんでした。
このようにレポを初期化しました
int error = git_repository_open(&repo, gitRepoString.UTF8String);
次に、以下のような作業ディレクトリへの差分インデックスを作成しています。
error = git_diff_index_to_workdir(&diff, repo, NULL, NULL);
その後、以下のようなコールバック関数を使用して、ハンクと各ハンクの行を反復処理できます。
error = git_diff_foreach(diff, each_file_cb,
each_binary_cb,
each_hunk_cb,
each_line_cb,
&d);
ハンクの各行に対してコールバックが呼び出されます。
int each_line_cb(const git_diff_delta *delta,
const git_diff_hunk *hunk,
const git_diff_line *line,
void *payload)
{
return 0;
}
今、どうにかしてパッチを作成し、差分に必要な行だけをパッチに追加する必要があることに気付きました。
誰でも正しい方向に導くことができますか? libgit2がまだこれを許可していない場合、これを許可できる他のライブラリはありますか? また、アトラシアンのソース ツリーは内部で libgit2 を使用しているようです。彼らはどのようにこれを実装できたでしょうか?
ところで、git CLI では、この回答に示されているように、パッチを適用してそれを行うことができます。 https://stackoverflow.com/a/32311872/569497