タグを含むリポジトリログを通過したい。これまでのところ、私はrevwalkでタグを含むすべてのコミットに対してすべてのSHAを出力できます。しかし、私はOIDコミット使用してタグ情報を引き出したいたびに私は、タグSHAが報告されたことがわかりますrevwalkコミットから注釈付きタグを取得
「を要求されたタイプは、ODBタイプと一致していません」というエラー
を取得しますrevwalkには、
git show-ref --tags
によって報告されたSHAが含まれているので、なぜタグの参照が機能しないのかわかりません。は、ここで私が使用して単純化されたコードです:
int error = 0; git_oid oid; git_revwalk *walk; error = git_revwalk_new(&walk, m_repo); git_revwalk_sorting(walk, GIT_SORT_TOPOLOGICAL | GIT_SORT_TIME); git_revwalk_push_head(walk); //git_revwalk_hide_glob(walk, "tags/*"); -- I want to see tags so I commented this one while(git_revwalk_next(&oid, walk) == 0) { git_commit *commit; char oidstr[10] = {0}; if(git_commit_lookup(&commit, m_repo, &oid)==0) { git_tag *tag = NULL; int error = git_tag_lookup(&tag, m_repo, &oid); if(error==0) { wxString tname(git_tag_name(tag)); data.push_back("["+tname+"] "+cltStr); } else { //It always land here with error no -3 and message: The requested type does not match the type in ODB } git_tag_free(tag); const git_signature *author = git_commit_author(commit); } git_commit_free(commit); } git_revwalk_free(walk);
TL; DR
私はターゲットがコミット私が得ることができるオブジェクトをgit_tagいる。今私は目標をコミットしているので、どのように私はそのコミットの下にタグを取得するのですか?カルロスと答えた後
git tag --points-at commit_SHA
UPDATE
に似た何かがここに私の新しいコードです。ここでの課題は、どのようにgit_tag *を取得するかです。あなたが見ることができるように私はgit_reference※(名前の参照を)持っているが、私は
git_reference_iterator *iter = NULL; git_reference *ref = NULL; git_reference_iterator_glob_new(&iter, m_repo, "refs/tags/*"); while(git_reference_next(&ref, iter) == 0) { git_object *target = NULL; git_object *obj; const git_oid *targetId = git_reference_target(ref); git_object_lookup(&obj, m_repo, targetId, GIT_OBJ_ANY); git_object_peel(&target, obj, GIT_OBJ_COMMIT); if(git_oid_equal(git_commit_id(commit), git_commit_id((git_commit*)target))==1) { //tag found //how do I get a git_tag* here? } git_object_free(obj); git_reference_free(ref); git_object_free(target); }
詳細な回答をいただきありがとうございます。今私は見ることができます。しかし、ピールが何をするのか説明できますか?私はドキュメントから理解しようとしましたが(私はこの問題を戦っていた頃でしたが)、私はそれを私の脳に取り込めませんでした。再びありがとう! –
私は優れた説明を理解しようとしましたが、今まで私はできませんでした。あなたのポイントを説明するためだけに簡単な例を書けますか?私はそれらを組み合わせて私が望むものを得ることはできません。 –
私は今あなたのコメントを適用しようとしました。新しいコードとチャレンジがあります。更新された投稿をご覧ください。ありがとう –