【发布时间】:2014-03-18 01:19:07
【问题描述】:
你知道找到包含某个提交的最近标记的合理方法是什么吗?
git describe --contains my-commit-hash
工作正常,但我没有看到用 LibGit2Sharp 做同样的方法
我正在尝试做类似的事情
foreach (var childCommit in GetChildrenOrSelf(commit))
{
var tag = repo.Tags[childCommit];
if (tag != null)
return tag;
}
但我找不到实现 GetChildrenOrSelf
的简单方法根据这个How to find all commits having a particular parent? - 这不是一个简单的任务。
你有什么建议吗?
【问题讨论】:
-
您正在询问包含您的提交的标签,该答案将 all 提交作为候选。标签列表要短得多,并且会有一个 API 调用。从那里向后搜索。因为合并会导致拆分路径向后移动,所以您需要维护一个提交队列,您接下来要测试其父级的提交,将父级添加到队列中,然后从一开始就以最少的步骤将提交出列。排队的项目应该知道它们的原始标签,以便在您达到目标时读取。这只是带有单位重量的en.wikipedia.org/wiki/Dijkstra's_algorithm。
-
@bazzargh 我们正在使用标签来自动设置 TeamCity 的构建版本。目前我们有 9955 个标签。无论如何,我认为遍历所有标签并不是一个好主意,这很慢
-
您可以立即消除任何指向早于目标提交的标签,并按日期顺序尝试标签。这将为您提供与上述不同的答案(时间最接近,而不是提交计数最接近)。在这种情况下,过多的标签是一种帮助,因为它将时间分成更小的块,因此要搜索的提交更少。
标签: git libgit2sharp