【问题标题】:How to determine latest production release from a git master branch?如何从 git master 分支确定最新的生产版本?
【发布时间】:2015-01-06 03:24:21
【问题描述】:

我还是 git 的新手。当我对任何包执行 git clone ... 时,它主要从 master 分支下载。

我的理解是master分支应该同时包含开发和发布代码。
如果是这样,是否可以从下载的主分支中找到最新的(生产)发布版本?

【问题讨论】:

    标签: git


    【解决方案1】:

    如果每个版本都标有 annotated 标签,git describe 就是您所需要的(从手册页引用):

    git-describe - 显示可从提交中访问的最新标签

    如果您上次发布的版本是 2.6.9git describe 将为您提供以下输出:

    2.6.9-<NUMCOMMITS>-g<CURRENTREV>
    

    如果您当前的分支直接指向2.6.9NUMCOMMITSCURRENTREV 将不会被打印并且该命令只会产生2.6.9

    然而,如果你在2.6.9 之后做了一些提交(例如3),NUMCOMMITS 将是3CURRENTREV 将是最后提交哈希的7个字符(例如2597536):

    2.6.9-3-g2597536
    

    使用--tags 开关可以为未注释的标签实现同样的效果:

    git describe --tags 
    

    【讨论】:

      【解决方案2】:

      OP 指出 in the comments 的“发布版本”不是在 repo 中包含二进制文件(交付),而是获取用于生成交付的版本。

      git tag 本身并不适合,因为顺序并不总是相关的。

      但是,正如我在“How to sort git tags?”中解释的那样,这将给出正确的顺序(使用 git 2.0+)

      git tag -l --sort=refname "v*"
      # or
      git tag -l --sort=version:refname "v*"
      
      v17
      v16
      ...
      v9
      ...
      v1
      

      【讨论】:

      • 我只想补充一点,它是特定于项目的,虽然他的项目似乎没有使用一些项目使用的 "successful git branching model",但很可能有一些分支拥有所有在其第一父历史记录中带有发布标记的提交。
      • @jthill 我同意:Git 本身并没有强加任何东西。这更多地是关于您希望为您的项目遵循的约定和工作流程。
      • 也许,我问错了问题。为了说明,我将使用 kmod.git 包 [链接](git://git.kernel.org/pub/scm/utils/kernel/kmod/kmod.git)。克隆 repo 后,我做了一个 git tag 并转储标签列表(v1 v10 v11 v12 v13 v14 v15 v16 v17 v2 v3 v4 v5 v6 v7 v8 v9)。我想做的是能够从列表中获取最新的标签,即 v17。这样,我可以编写一个 Makefile 配方来克隆或检出基于最新标签的包源。我希望这能消除一些误解。
      • @user3767809 好的,我已经完全重写了答案。
      • 感谢您的更新。不幸的是,您的建议需要 git v2.0+。这可能会产生一些问题,因为不幸的是,目前并不是每个人都在使用 git v2.0+。 OTOH,您还提到了“git tag”。当我查看“git tag”时,我可以使用“sort + tail”实用程序来执行排序并获得我想要的最新版本,即 git tag -l |排序 --sort=版本 |尾 -1。但是,我不知道这是否是正确的方法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-22
      • 1970-01-01
      • 2012-08-27
      • 2020-12-02
      • 2021-08-09
      • 2018-04-15
      • 2018-09-08
      相关资源
      最近更新 更多