【发布时间】:2013-11-11 22:33:55
【问题描述】:
我正在使用 TeamCity 和 Github 自动化语义版本控制,并且我正在尝试找到一种方法来计算直接影响 master 分支的提交。
这个来自 Git-Extensions 的带注释的屏幕截图可能是最好的解释。我想自动计算箭头中的版本号:
我在构建过程中使用 ruby 和 octokit 来查询 GitHub API。当提交或合并符合主要/次要版本时,主要和次要版本号会手动递增,因此伪代码基本上是:
- 找到major.minor.0对应的commit
- 计算自 major.minor.0 以来更改主分支状态的每个提交
- 将补丁版本设置为commits.count
我遇到的问题是,如果我只计算提交给 master 的次数,每次接受拉取请求时,提交计数都会增加 n+1,其中 n 是提交到分支的数量。这会起作用,但它......不优雅。是的,我知道当您接受拉取请求时,您实际上是在接受该分支的整个历史记录作为您的“主”历史记录的一部分,但对于版本控制而言,这并不重要。
有谁知道我如何通过 GitHub API 过滤提交,以查明提交是否在创建时直接影响 master,或者是否有某种原因这实际上是不可能的? p>
谢谢!
【问题讨论】:
-
这是个好问题。不确定最好的方法是什么,并且在某些情况下可能无法做到。例如,如果您在问题中拥有的那个提交图除了 master 之外没有任何分支引用 - 您将不知道在哪里放置版本箭头,因为您不知道哪些提交在 master 上。这种情况可能经常发生,因为在有人将分支合并到 master 之后 - 他们可能会删除它。所以你只剩下一个带有单个分支 (=master) 的大型复杂图。
-
所以,归根结底,问题在于 git 分支只不过是指向单个提交的指针。您不知道过去哪些分支指向了某个提交。您只能判断某个提交是否可以从某个分支 (=commit) 访问。
标签: git github github-api semantic-versioning octokit