【问题标题】:using bash to get revision number from subversion使用 bash 从 subversion 获取修订号
【发布时间】:2010-02-19 21:12:09
【问题描述】:

我想在 bash 中编写一个 shell 脚本来从 svn 存储库部署网站。当我部署一个网站时,我将导出的目录命名为 website_name-Rrevision_number。我希望 bash 脚本自动重命名导出的目录,因此它需要从导出目录中学习当前的修订号。如果我运行

$> svn info http://svn-repository/trunk

Path: trunk
URL: http://svn-repository/mystery/trunk
Repository Root: http://svn-repository/mystery
Repository UUID: b809e6ab-5153-0410-a985-ac99030dffe6
Revision: 624
Node Kind: directory
Last Changed Author: author
Last Changed Rev: 624
Last Changed Date: 2010-02-19 15:48:16 -0500 (Fri, 19 Feb 2010)

字符串Revision:后面的数字就是我想要的。如何将其放入 bash 变量中?我是否对svn info 命令的输出进行字符串解析?

【问题讨论】:

    标签: bash shell


    【解决方案1】:

    使用svnversion。这将以最少的额外内容输出修订号/范围

    【讨论】:

    • 这应该是我认为的答案。
    • 这似乎只适用于本地工作副本。当我尝试使用远程 URL 时(如原始问题中所示),我收到一条错误消息,指出它不存在。另请参阅stackoverflow.com/questions/623378/…
    • 是服务器端,不是客户端
    【解决方案2】:
    REVISION=`svn info http://svn-repository/trunk |grep '^Revision:' | sed -e 's/^Revision: //'`
    

    这很简单,如果不优雅。

    【讨论】:

    • 更简洁地说:REVISION=svn info http://svn-repository/trunk | sed -ne 's/^Revision: //p'
    • 是的,我总是忘记 sed 的 -n 选项。
    • 这不仅仅对修订号有用;我只是用它来获取存储库 URL。
    • REVISION=`svn info http://svn-repository/trunk | sed -ne 's/^Revision: //p'` - 您需要使用退格符来转义文字反引号。
    • 请记住在此命令之前设置输出语言:LANG=C LC_MESSAGES=C
    【解决方案3】:

    解析“修订”字符串不能跨不同的语言环境移植。 例如。在我的语言环境中是这样的:

    ...
    Wersja: 6583
    Rodzaj obiektu: katalog
    Zlecenie: normalne
    Autor ostatniej zmiany: ...
    Ostatnio zmieniona wersja: 6583
    Data ostatniej zmiany: 2013-03-21 11:33:44 +0100 (czw)
    ...

    你不想解析那个:)

    因此,最好的方法是按照 oefe 的建议使用“svnversion”。这是为此目的而提到的工具。

    【讨论】:

      【解决方案4】:

      只需使用一个 awk 命令。也简单得多。

      var=$(svn info http://svn-repository/trunk | awk '/^Revision:/{print $2}')
      

      【讨论】:

      • 使用 awk 进行在线搜索...火箭筒样式
      【解决方案5】:

      不使用 sed、grep 或 awk:

      REVISION=`svn info --show-item=revision --no-newline`
      

      【讨论】:

      • REVISION=svn info --show-item=revision --no-newline -r HEAD 在服务器上获取最新版本
      • 请注意,这是您签出的修订版。当您结帐 head 时,这可能包括来自其他分支的版本。因此,这不是您签出路径的修订版。
      【解决方案6】:
      svn info http://svn-repository/trunk | grep Revision | tr -d 'Revison: '
      

      吐出修订版 在你的 shell 脚本中使用反引号来执行它并将结果分配给一个变量:

      REVISION=`svn info http://svn-repository/trunk | grep Revision | tr -d 'Revison: '`
      

      【讨论】:

        【解决方案7】:

        可能有十几种不同的方法可以做到这一点,但我会选择一些简单的方法,例如:

        revision="$(svn info http://svn-repository/trunk | grep "^Revision:" | cut -c 11-)"

        【讨论】:

          【解决方案8】:

          这将为您提供头部修订号

          svn info -r 'HEAD' | grep Revision | egrep -o "[0-9]+"
          

          egrep 是 grep 的扩展。

          【讨论】:

            【解决方案9】:
            REVISION=$(svn info http://svn-repository/trunk |grep '^Revision:' | sed -e 's/^Revision: //p')
            echo $REVISION
            

            【讨论】:

              猜你喜欢
              • 2010-10-13
              • 1970-01-01
              • 2010-09-11
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多