我正在尝试使用git checkout {branch}
。
代码如下:
bool GitHandler::checkoutBranch(std::string branchName){
bool error = 0;
git_checkout_options opts;
git_checkout_init_options(&opts, GIT_CHECKOUT_OPTIONS_VERSION);
opts.checkout_strategy = GIT_CHECKOUT_SAFE;
git_object *treeish = NULL;
error = error || git_revparse_single(&treeish, repo, branchName.c_str());
assert(treeish != NULL); // The branch exists
error = error || git_checkout_tree(repo, treeish, &opts);
printf("%s\n", giterr_last()->message);
git_object_free(treeish);
return !error;
}
问题在于,每当我尝试运行此代码时,都会从该printf语句中打印出以下异常The global/xdg file 'ignore' doesn't exist: No such file or directory
。但是git checkout {branch}
成功了。可能是什么问题?
谢谢。
答案 0 :(得分:2)
该错误消息是由于存储库启动而导致错误的原因。如果您在操作前致电giterr_clear()
,则无法显示。
libgit2函数的返回值为int
。如果你试图把它塞进一个布尔,任何事情都可能发生。
您还可以无条件地打印出错误消息。如果在结账期间没有错误,那么它将打印出错误字符串是有意义的。
是什么让你认为这段代码不起作用?这些函数中的任何一个都返回错误吗?如果您期望git_checkout_tree()
切换分支,正如您的git checkout {branch}
评论似乎暗示的那样,那么您将无法观察到该结果。 libgit2的checkout限制自己处理文件。如果您希望更改当前分支的内容,则需要将HEAD设置为git_repository_set_head()
或类似。