如何正确设置git_clone?

时间:2019-06-03 07:58:49

标签: c++ git git-clone libgit2

我正在做一个C ++程序,应该使用libgit2克隆几个存储库。 问题是,当我克隆存储库时,它会将整个内容克隆到路径中,但不会创建子文件,这与我使用git bash相同的命令将其克隆到子文件时不同。

git_libgit2_init();
git_repository *repo = NULL;


    error = git_clone(&repo, url, path, NULL);

    git_repository_free(repo);
    git_libgit2_shutdown();

2 个答案:

答案 0 :(得分:0)

让我们将存储库命名为 Foo

bash 书写时:

$ git clone url

使用您的 libgit2 示例等同于:

error = git_clone(&repo, url, "./Foo", NULL);

实际上,这意味着git_clone()的第三个参数不是克隆存储库的目录的路径,而是本地存储库本身的路径(因此,您也必须提供存储库名称,当然您可以更改它。)

知道这一点,如果我再次使用您的示例并编写以下内容:

error = git_clone(&repo, url ,"/path_to_somewhere/Bar", NULL);

这就像我用 bash 编写的一样:

$ git clone url /path_to_somewhere/Bar

远程 Foo 存储库将重命名为 Bar (当然,仅在我的本地存储库中)。


因此,给您一个具体的答案:)您只需将存储库名称附加到目标路径,即可按预期的方式创建它。

答案 1 :(得分:0)

什么是错误消息。 git_clone做这样的事情:

git_libgit2_init();
git_repository *repo = NULL;
git_clone_options clone_options;//the struct is clone credential.and other info.
error = git_clone(&repo, url, path, &clone_options);

git_repository_free(repo);
git_libgit2_shutdown();