Как получить имя файла ветки отказавшего коммутатора в libgit2? - PullRequest
0 голосов
/ 04 августа 2020

Я могу вызвать интерфейс ветвления коммутатора обычным образом, но когда ветвь коммутатора дает сбой, я не могу получить конкретный c файл с ошибкой текущей ветки. При просмотре информации об ошибке отображается только «один или несколько конфликтов предотвращают проверку». Если я хочу получить подробное имя файла с ошибкой, как получить подробную информацию об ошибке из функции обратного вызова или возвращаемого значения? (также включают: Слияние 、 Сброс ...)

// 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(); 
}

Ответы [ 2 ]

2 голосов
/ 04 августа 2020

Вам нужно будет установить notify_cb в вашем git_checkout_options и установить notify_flags , чтобы включить GIT_CHECKOUT_NOTIFY_CONFLICT .

Ваш обратный вызов уведомления, который вы предоставляете, будет вызываться с файлами, которые были изменены в вашем рабочем каталоге, что предотвратит выполнение проверки.

1 голос
/ 04 августа 2020

Я не очень знаком с libgit2, но похоже, что вам придется решать конфликт вручную. Ошибка, которую вы получаете:

1 конфликт предотвращает проверку

Сообщает вам, что существует файл с конфликтом, но вам придется выполнить итерацию по дереву, чтобы найдите, какой из них, и решите его.

Пример статуса из libgit2.org , безусловно, будет хорошей отправной точкой для вас.

...