2017-04-04 6 views
1

プログラムを以前のバージョンにダウングレードしたいと考えています。それはlibgit2で可能ですか?HEADをlibgit2の指定された参照またはタグにチェックアウトする方法は?

私のコード

string path = "C://Local//Path//to//my//repo"; 

string tag = "refs/tags/v0.0.4"; 

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"); 

git_reference *new_ref; 

git_reference_symbolic_set_target(&new_ref, ref,tag.c_str(),"message"); 


git_checkout_options opts = GIT_CHECKOUT_OPTIONS_INIT; 

// how to specify options to use ref or tag? 

git_checkout_head(repo, &opts); 

git_repository_free(repo); 
git_libgit2_shutdown(); 

答えて

0

がありますが、私はそれを

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, "message"); 

    git_checkout_options opts = GIT_CHECKOUT_OPTIONS_INIT; 

    if (0!=git_repository_set_head_detached(repo,&id)) cerr<<"problem occured while detaching head"<< endl; 

    if (0 != git_checkout_head(repo, &opts)) cerr << "problem checkout head" << endl; 

    git_revwalk_free(walker); 
    git_repository_free(repo); 
    git_libgit2_shutdown(); 
+0

を得た私は、この http://stackoverflow.com/questions/43342676/how-to-に接続されている別の問題があると思います指定されたバージョンを使用するlibgit2に切り替える –

関連する問題