4

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

git log [第一次提交]..[第二次提交] --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];

    }
}
4

1 回答 1

5

这些revwalk功能是为这种用例设计的。用 推送新标签,用git_revwalk_push_ref隐藏旧标签git_revwalk_hide_ref。然后用 走过范围git_revwalk_next

于 2016-10-05T15:19:25.737 回答