0
複製されたリポジトリを特定のバージョンに切り替える必要があります。私はこのコードを実行すると、私が望むように動作しません。それは、私がマスターの後ろまたは上にどれくらいのコミットがあるかを認識しますが、実際にプロジェクトを切り替えるわけではありません。指定されたバージョンに切り替える方法
たとえば、あるtxtドキュメントを含むバージョン1.0と、このtxtドキュメントのないバージョン1.1があるとします。マスターがバージョン1.1を指しています
まず、リポジトリ全体をクローンします(コピー先のフォルダにはtxtドキュメントが含まれていません)。
次に、このコードを実行して、宛先フォルダにtxtドキュメントを表示します。
私はこれ試してみてください。
Download a specific tag with Git
その作業をし、私は私のコードは、同じことをやりたい、
git_libgit2_init();
const char * REPO_PATH = path.c_str();
git_repository * repo = nullptr;
git_repository_open(&repo, REPO_PATH);
git_reference *ref;
git_reference_lookup(&ref, repo, "refs/heads/master"); // "refs/remotes/origin/HEAD"
git_reference *new_ref;
git_reference_lookup(&new_ref, repo, tag.c_str());
git_revwalk *walker;
git_revwalk_new(&walker, repo);
git_revwalk_push_ref(walker, tag.c_str());
git_oid id;
git_revwalk_next(&id, walker);
git_reference_set_target(&new_ref, ref, &id, NULL);
if (0 != git_repository_set_head_detached(repo, &id)) cerr << "problem occured while detaching head" << endl;
git_revwalk_free(walker);
git_repository_free(repo);
git_libgit2_shutdown();
(私はまた、このような何かを試してみましたが、これはgit_annotated_commit_from_refで失敗)
私の2番目の実装があります:
git_libgit2_init();
const char * REPO_PATH = path.c_str();
git_repository * repo = nullptr;
git_repository_open(&repo, REPO_PATH);
git_reference *ref;
git_reference_lookup(&ref, repo, tag.c_str());
git_annotated_commit *out;
if (0 != git_annotated_commit_from_ref(&out,repo,ref)) cerr << "error creating annotated commit" << endl;
if (0 != git_repository_set_head_detached_from_annotated(repo, out)) cerr << "problem occured while detaching head" << endl;
git_repository_free(repo);
git_libgit2_shutdown();