libgit2 C APIを使用して2つのgitリポジトリ(repoとmoduleという名前)をコードに作成しましたが、リポジトリをサブポールとして "repo"リポジトリに追加します。私はこれを行うにはlibgit2 git_submodule_add_setup C APIを使用しようとしています。 https://libgit2.github.com/libgit2/#HEAD/group/submodule/git_submodule_add_setupを参照してください。libgit2を使用してスーパープロジェクトにgitサブモジュールを追加する方法
ドキュメント以下の言葉:
git_submodule_add_setup: これはフェッチおよびサブモジュールの内容のチェックアウトまでの「gitのサブモジュールを追加」ん。新しいサブモジュールを準備し、.gitmodulesにエントリを作成し、作業ディレクトリの指定されたパスに、または作業ディレクトリから新しいリポジトリへのgitlinkを持つ.git/modulesに空の初期化リポジトリを作成します。
"git submodule add"を完全にエミュレートするには、この関数を呼び出し、サブモジュールrepoを開き、必要に応じてクローンステップを実行します。最後に、git_submodule_add_finalize()を呼び出して、新しいサブモジュールと.gitモジュールを追加して、インデックスにコミットする準備をまとめます。
私の質問は、git_submodule_add_setupの呼び出しで、初期化された空のサブモジュール(その内部に.gitディレクトリを持つ)が作成されていることを前提にして、上記のクローン操作をどの程度正確に実行しますか?私はすでにgit_submodule_openとgit_cloneのC APIを使ってクローンを行ういくつかの試みを行ってきましたが、無駄です。サブモジュールが空のフォルダーではないため、クローンは失敗します。私はgit_clone C APIのドキュメントを読んで、https://libgit2.github.com/docs/guides/101-samples/#repositories_clone_simpleなどのサンプルコードに慣れてきましたが、私はまだ賢明ではありません。知っている人の助けを借りて大いに感謝します。
私はこれまでのものを味わうために、以下にコードスニペットを含めました。
namespace bfs = boost::filesystem;
git_repository * repo = NULL;
bfs::path const repo_path = bfs::current_path()/"repo";
std::string const repo_url = repo_path.string();
git_repository_init(&repo, repo_url.c_str(), 0);
//Add various files to repo index, and commit them...
git_repository * module = NULL;
bfs::path const module_path = bfs::current_path()/"module";
std::string const module_url = module_path.string();
git_repository_init(&module, module_url.c_str(), 0);
//Add various files to moduleindex, and commit them...
git_submodule * submodule = NULL;
git_submodule_add_setup(&submodule, repo, module_url.c_str(), "module", 0);
//What do I need to do in here to clone the module into position??
git_submodule_add_finalize(submodule);
git_submodule_free(submodule);
git_repository_free(module);
git_repository_free(repo);
私はひどく答えが必要です; –