7

libgit2 を使用してブランチのすべてのコミットを確認するにはどうすればよいですか?

私はすでに次のコードを持っていますが、コンパイルしません。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <git2.h>

int main(int argc, char *argv[]){
    git_repository *repo;
    git_repository_open(&repo, ".");

    git_odb *obj_db;
    obj_db = git_repository_database(repo);

    git_object commit;
    git_revparse_single(&commit, repo, "HEAD");


    git_repository_free(repo);
    return 0;
}

GCC レポート:

log.c: In function ‘main’:
log.c:11:9: warning: assignment makes pointer from integer without a cast [enabled by default]
log.c:13:13: error: storage size of ‘commit’ isn’t known

-lgit2フラグでコンパイルしました。root-commit から始めて、すべてのコミットをすばやく確認できる可能性はありますか?

更新 新しいコードは次のようになります。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <git2.h>

int main(int argc, char *argv[]){
    git_repository *repo;
    git_repository_open(&repo, ".");

    git_odb *obj_db;
    obj_db = git_repository_database(repo);

    git_object *commit;
    git_revparse_single(&commit, repo, "HEAD");


    git_repository_free(repo);
    return 0;
}

次のエラー メッセージが表示されます。

log.c:11: undefined reference to `git_repository_database'
log.c:14: undefined reference to `git_revparse_single'
4

3 に答える 3

3

私はすでに次のコードを持っていますが、コンパイルされません

Agit_commitは不透明な型です。つまり、コンパイラはそれが何であるかを認識せず、存在することだけを認識します。git_commitしたがって、スタックに a を割り当てることはできません。ライブラリはそれをヒープに割り当てます。

コード内でポインターを使用し、そのポインターへのポインターをライブラリーの関数に渡す必要があります。これは、そのドキュメントリンク先の例で確認できます。

root-commit から始めて、すべてのコミットをすばやく確認できる可能性はありますか?

これらのrevwalk テストは、さまざまな歩行戦略を示しており、役立つ場合があります。

于 2013-07-29T03:20:58.107 に答える