【问题标题】:Get all commits before/in a tag for using Git cmd or GitHub API获取标签之前/中的所有提交以使用 Git cmd 或 GitHub API
【发布时间】:2020-06-25 01:18:42
【问题描述】:

我们正在构建一个与 Github 集成的部署管道。我们使用提交 sha 来确定要部署的代码。

但在部署之前,我们希望确保提交 sha 确实存在于已发布的版本中。为此,我需要知道该版本的所有提交(不仅仅是先前版本和当前版本之间的提交,而是所有提交)。

根据我的研究,我只发现 answers 用于发现两个版本之间的提交。

有没有办法获得 所有 提交以进行发布?到目前为止,我能想到的唯一方法是使用上述答案并进行递归搜索以遍历所有版本。

问这个问题的另一种方法是,有没有办法在当前分支中的特定提交之前获取所有提交?

【问题讨论】:

    标签: git api github


    【解决方案1】:

    如果您只想询问某个提交是否在特定修订的历史记录中,那么您可以这样写:

    $ git merge-base --is-ancestor <historical-commit> <release-commit>
    

    如果历史提交是发布提交的祖先(在历史中),则退出 0(成功),否则退出 1(失败)。

    如果您只想知道是否可以从 any 标记访问提交,则可以使用:

    $ git describe --contains <historical-revision>
    

    如果它是标签的祖先,它将退出 0(并描述修订),如果不是,则退出 128。您可以使用--tags 来包含轻量级(未注释)标签,并使用--match--exclude 来限制正在使用的标签。

    如果您想添加更多修订选项并更多地限制提交列表,那么您需要这样写:

    $ git rev-list <release-commit> | grep -qsF <historical-commit>
    

    这将类似于git merge-base 退出。

    请注意,您可能不需要--first-parent,除非您绝对确定不想考虑从侧分支合并的任何提交。如果包含它,您将无法查询作为功能分支的一部分合并的提交。

    GitHub API 不提供此功能,一般而言,使用 GitHub API 的遍历历史效率低且缓慢,因为它不是为此而设计的。

    【讨论】:

      【解决方案2】:

      我找到了使用 git 的方法:

      git rev-list HEAD/<commit>/<release_tag> --first-parent
      

      这将为您提供HEAD&lt;commit&gt; 之前的所有合并(--first-parent:没有来自合并分支的提交)提交。

      但仍然很想知道使用 GitHub API 的方法。

      仅供参考:我发现唯一应该具有此功能的 API 是 https://developer.github.com/v3/repos/commits/#list-commits,但它不能仅显示提交和仅显示第一父级,因此数据会很大。

      【讨论】:

        猜你喜欢
        • 2017-03-10
        • 2015-01-31
        • 2021-02-11
        • 2020-08-05
        • 1970-01-01
        • 2022-08-19
        • 2011-08-17
        • 2017-04-22
        • 1970-01-01
        相关资源
        最近更新 更多