2016-10-05 66 views
1

我想知道如何在Git中使用C-API找到两个标签之间的所有提交?我知道这可以很容易地与CLI工具来完成:libgit2:查找两个标签之间的所有提交?

git的日志[第一承诺]。[第二承诺] --pretty = ONELINE

不过,我似乎无法弄清楚如何做它与C API。我坚持的问题是,当最终成为图中的一个循环时。

这是Objective-C的一些代码,我使用Objective-Git,但是由于大多数人不知道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]; 

    } 
} 

回答

2

revwalk函数是为这种用例设计的。用git_revwalk_push_ref推新标签,并用git_revwalk_hide_ref隐藏旧标签。然后走过git_revwalk_next

+0

太好了,完美无缺! – jaredjones