我正在做一个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();
答案 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();