libgit2:查找两个标签之间的所有提交?
libgit2: Finding all commits between two tags?
我想知道如何使用 C-API 查找 Git 中两个标签之间的所有提交?我知道这可以使用 CLI 工具轻松完成:
git 日志[第一次提交]..[第二次提交] --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];
}
}
revwalk
函数专为此类用例而设计。使用 git_revwalk_push_ref
推送较新的标签并使用 git_revwalk_hide_ref
隐藏较旧的标签。然后用 git_revwalk_next
.
遍历范围
我想知道如何使用 C-API 查找 Git 中两个标签之间的所有提交?我知道这可以使用 CLI 工具轻松完成:
git 日志[第一次提交]..[第二次提交] --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];
}
}
revwalk
函数专为此类用例而设计。使用 git_revwalk_push_ref
推送较新的标签并使用 git_revwalk_hide_ref
隐藏较旧的标签。然后用 git_revwalk_next
.