如何在 libgit2 中获取失败的 switch 分支的文件名?

How to get the file name of the failed switch branch in libgit2?

我可以正常调用switch分支接口,但是当switch分支失败时,无法获取到当前分支失败的具体文件。查看错误信息只显示“one or multiple conflict prevents checkout”,如果想获取详细的错误文件名,如何从回调函数或return值中获取详细的错误信息? (还有include:Merge、重置...)

// code

git_checkout_options opts = GIT_CHECKOUT_OPTIONS_INIT;
opts.checkout_strategy = GIT_CHECKOUT_SAFE;

git_branch_lookup(&lookup, repo, branchname, GIT_BRANCH_LOCAL);

git_revparse_single(&treeish, repo, branchbane);

if(git_checkout_tree(repo, treeish, &opts)<0)

{
   /*
     just return "1 conflict prevents checkout",
     But I want to know which files is wrong
   */
   const git_error* error = giterr_last(); 
}

我不太熟悉 libgit2 但看起来你必须手动解决冲突。您得到的错误:

1 conflict prevents checkout

告诉您有一个文件存在冲突,但您必须遍历树以找到并解决冲突。

status example from libgit2.org 对您来说肯定是一个很好的起点。

您需要设置 notify_cb in your git_checkout_options, and set your notify_flags to include GIT_CHECKOUT_NOTIFY_CONFLICT

您提供的通知回调将通过您的工作目录中更改的文件被调用,并阻止签出发生。