【发布时间】:2013-07-29 00:18:08
【问题描述】:
如何使用 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 标志编译。从根提交开始,是否可以快速遍历所有提交?
更新 新代码如下所示:
#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'
【问题讨论】:
-
确保您使用的是最新的库并查看该版本的文档。
git_repository_database不存在。大概你想要git_repository_odb,虽然你不应该需要它来记录日志。git_revparse_single是在 0.18 版本中引入的,这表明您的系统上安装了一个古老的库。 -
接受的答案似乎并不局限于单个分支,例如
master。也许git_revwalk不是为此而设计的?