【问题标题】:How do I get Git's latest stable release version number?如何获取 Git 最新的稳定版本号?
【发布时间】:2011-02-25 19:31:49
【问题描述】:

我正在编写一个 git-install.sh 脚本: http://gist.github.com/419201

要获取 Git 最新的稳定版本号,我这样做:

LSR_NUM=$(curl -silent http://git-scm.com/ | sed -n '/id="ver"/ s/.*v\([0-9].*\)<.*/\1/p')

2 个问题:

  1. 重构我的代码:有没有更好的编程方式来做到这一点?

  2. 现在可以了,但它很脆弱:如果 网页http://git-scm.com/ 变化,上面的行可能会停止 工作。

    PHP 有一个可靠的 URL 用于获取 最新发布版本: Is there a site which simply outputs the latest stable version numbers of php and mysql?

    有没有这样的 吉特?这很接近:http://www.kernel.org/pub/software/scm/git/

【问题讨论】:

  • 您可以继续您当前的策略,但也可以通过解析 http://www.kernel.org/pub/software/scm/git/ 和/或 http://git.kernel.org/?p=git/git.git;a=summary 那里的最高数字并检查是否匹配来进行理智检查。

标签: git bash sed awk grep


【解决方案1】:

由于 kernel.org 响应不稳定,我使用 github.com 并删除“-rc”版本。

curl -s https://github.com/git/git/tags | grep -P "/git/git/releases/tag/v\d" | grep -v rc | awk -F'[v\"]' '{print $3}' | head -1

如果你想在 bash 中检查结果;

GIT_INSTALL=$(curl -s https://github.com/git/git/tags | grep -P "/git/git/releases/tag/v\d" | grep -v rc  |  awk -F'[v\"]' '{print $3}' | head -1)

if [[ "$GIT_INSTALL" =~ ^[0-9]*?\.[0-9]*?\.[0-9] ]]
then
  echo GIT_INSTALL=$GIT_INSTALL
else
  echo "Failed to get the latest stable git version. Quit." 
  exit
fi

【讨论】:

  • 因为 kernel.org 不稳定,改成 github.com。
【解决方案2】:

我在 freebsd/bash 上使用这个:

git ls-remote --tags https://github.com/user/testpro.git | tail -n 1 | sed 's/.*refs\/tags\///g'

【讨论】:

    【解决方案3】:

    我为此使用 git-scm.com

    latest_git_version=$(curl -s http://git-scm.com/ | grep "class='version'" | perl -pe 's/.*?([0-9\.]+)<.*/$1/')
    echo $latest_git_version 
    

    当你在一个新机器上并且想像这样安装最新的稳定 git 时非常有用:

    cd /tmp
    wget http://git-core.googlecode.com/files/git-${latest_git_version}.tar.gz
    tar xzf git-${latest_git_version}.tar.gz
    cd git-${latest_git_version}
    ./configure && make && sudo make install
    

    也许这也是 kernel.org 的一个很好的后备方案,反之亦然。

    【讨论】:

    【解决方案4】:

    我会这样做:

    git ls-remote --tags git://git.kernel.org/pub/scm/git/git.git | ...
    

    公共存储库的位置几乎可以保证保持不变,所以我不会真的认为它很脆弱。 git-ls-remote 的输出也绝对不会改变。

    版本号应该是最后一个标签;你可以用这样的东西抓住它:

    git ls-remote ... | tail -n 1 | sed 's@.*refs/tags/\(.*\)\^{}@\1@'
    

    【讨论】:

    • 很酷,但是运行这个脚本的人很可能还没有安装 Git。 :) 也许我可以改用这个 URL:kernel.org/pub/scm/git/git.git/refs/tags 并找到丹尼斯威廉姆森建议的最高数字。或者,也许更好,这个 URL 首先列出了最新的版本号:kernel.org/pub/software/scm/git/docs 我认为我现在的做法很好。它有效,快速且简单,而且我认为它非常可靠。
    • @MattDiPasquale:哦,呵呵。嗯......是的,我想你可以从许多显示信息的地方中挑选出来,比如丹尼斯建议的 gitweb 页面。这些与存储库的位置密切相关,我怀疑 gitweb 将永远停止显示标签。
    • @VictorSanchez:是的,我想它不能正确处理两位数的版本号。 (我认为在我写答案时从未发生过这种情况;在那之前他们往往会翻身。)如果你愿意,可以通过适当的排序来管道它。
    【解决方案5】:

    我一般只使用maint 分支。它只获取在其他分支(如punext)中经过严格测试的提交。它通常非常稳定,并且在任何给定时间实际上都可能比最新的官方版本包含更少个错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-19
      • 2023-03-20
      • 2017-04-10
      • 2016-04-26
      • 2010-10-15
      • 1970-01-01
      • 2010-11-15
      相关资源
      最近更新 更多