65

我正在编写一个 shell 脚本,我正在寻找最新版本的 repo。具体来说,我想把这个过程分成多个步骤。

  1. 我想将存储库最新标签保存到变量中
  2. 打印出Checking out version: XX
  3. 查看最新标签

我见过类似的问题,但我没有看到如何将标签的名称保存到变量中(可能是因为我是一个使用 shell 脚本的菜鸟)。

4

5 回答 5

122
# Get new tags from remote
git fetch --tags

# Get latest tag name
latestTag=$(git describe --tags `git rev-list --tags --max-count=1`)

# Checkout latest tag
git checkout $latestTag
于 2014-04-04T08:20:42.007 回答
35

git describe --tags应该给你信息。

bash/shell 脚本:

#!/bin/bash
...
latesttag=$(git describe --tags)
echo checking out ${latesttag}
git checkout ${latesttag}
于 2013-07-01T21:40:16.463 回答
15

在某些存储库中,git describe --tags不提供任何信息,并且简单的git tag | tail -1可能会给您错误的标签,因为 git 以一种奇怪的方式对标签进行排序。

对我来说,最好的命令是 tail one 的变体

版本=$(git标签|排序-V|尾-1)

于 2013-08-06T15:58:50.753 回答
4
git tag --contains | tail -1

git tag --contains列出当前分支中的所有标签,将tail -1输出结果的计数限制为1,它将是最新的。

于 2014-12-26T09:32:42.050 回答
2

为了将信息放入变量中,您可以对其进行赋值:

myvar=myvalue

但是,您要计算要分配的值,而不仅仅是将常量分配给变量。在您的情况下,您希望将命令的输出分配给变量。

首先,您必须弄清楚如何获取最后一个标签名称。我将把它留给你,因为你没有说任何关于标签名称是如何创建的。

然后,一旦您有一个给出最后一个标签名称的命令,您就需要将该名称分配给一个变量。Bash 通过“命令替换”来做到这一点。

例如: thetagname=$( command_to_get_tag_name )

因此,如果您只使用 git 报告的最后一个标签,如下所示:

git tag | tail -1

然后你可以将它分配给这样的变量:

thetagname=$( git tag | tail -1)

你可以使用/查看这样的值:

echo $thetagname

或者正如 user1281385 所说,像这样:

echo ${thetagname}

这两种方法是相同的,除了第二种方法允许您将文字文本与变量值结合起来:

echo ${thetagname}ing

这会将“ing”附加到 $thetagname 的内容中。大括号是必要的,以防止 bash 认为“thetagnameing”是变量。

bash 手册页有一个名为 EXPANSION 的部分,其中解释了 7 种扩展。命令替换就是其中之一。bash 手册页相当大,而且确实多次重复所有有趣的关键字,因此在其中搜索内容真的很烦人。这里有一些关于如何找到 EXPANSION 部分的提示(并了解一些关于寻呼机“less”的知识):

启动手动阅读器阅读 bash 手册页,如下所示:

man bash

/^EXPANSION进入阅读器后,通过在显示屏中键入内容,在行首搜索“EXPANSION”一词。键入/后,您将在屏幕底部看到 /,但手册页仍然存在。这是搜索模式的命令。然后你输入^EXPANSION,你也会在屏幕底部看到它。^ 表示“在行首搜索内容”,EXPANSION 表示“查找文字字符串“EXPANSION”。然后键入<enter>- ,您应该是第一次出现在行首的 EXPANSION 一词。在这里,它描述了 bash shell 在您键入之后和执行转换后的命令之前在您的行上执行的所有类型的扩展。

在寻呼机中,您可以键入h以获取可能的命令列表。

我希望这不是太基本。如果你以前没有见过,很难弄清楚。

于 2013-07-02T01:35:52.853 回答