libgit2:查找两个标签之间的所有提交?

时间:2016-10-05 02:56:34

标签: c git libgit2 objective-git

我想知道如何使用C-API在Git中找到两个标签之间的所有提交?我知道这可以通过CLI工具轻松完成:

git log [first commit] .. [second commit] --pretty = oneline

但是,我似乎无法弄清楚如何使用C API。我遇到的问题是当图表中出现一个循环时。

以下是我在Objective-Git中使用的一些Objective-C代码,但是由于大多数人都不了解Objective-C,我很高兴在C API或其他一些Git API中得到答案。我想象一下,我必须保留以前遍历的提交词典或其他内容吗?

- (void)traverseCommits: (GTCommit *)start withGoal: (GTCommit *)goal withHistory: (NSMutableDictionary *)history{
    NSLog(@"%@", start.shortSHA);
    if ([start.SHA isEqualToString:goal.SHA]) {
        return;
    }
    for (GTCommit *c in start.parents) {
        //[history setObject:c forKey:c.SHA];
        if(![c.SHA isEqualToString:goal.SHA])
            [self traverseCommits:c withGoal:goal withHistory:history];

    }
}

1 个答案:

答案 0 :(得分:4)

revwalk函数是为这种用例而设计的。使用git_revwalk_push_ref推送较新的代码,并使用git_revwalk_hide_ref隐藏旧代码。然后使用git_revwalk_next遍历范围。