global / xdg文件'ignore'不存在:没有这样的文件或目录

时间:2015-08-07 15:55:02

标签: libgit2

我正在尝试使用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}成功了。可能是什么问题?

谢谢。

1 个答案:

答案 0 :(得分:2)

该错误消息是由于存储库启动而导致错误的原因。如果您在操作前致电giterr_clear(),则无法显示。

libgit2函数的返回值为int。如果你试图把它塞进一个布尔,任何事情都可能发生。

您还可以无条件地打印出错误消息。如果在结账期间没有错误,那么它将打印出错误字符串是有意义的。

是什么让你认为这段代码不起作用?这些函数中的任何一个都返回错误吗?如果您期望git_checkout_tree()切换分支,正如您的git checkout {branch}评论似乎暗示的那样,那么您将无法观察到该结果。 libgit2的checkout限制自己处理文件。如果您希望更改当前分支的内容,则需要将HEAD设置为git_repository_set_head()或类似。