我正在编写一个 shell 脚本,并且希望查看最新版本的存储库。具体来说,我想将这个过程分成多个步骤。
Checking out version: XX
我见过类似的问题,但我不知道如何将标签的名称保存到变量中(可能是因为我是 shell 脚本的菜鸟)。
# 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
git describe --tags
应该给你信息。
bash/shell 脚本:
#!/bin/bash
...
latesttag=$(git describe --tags)
echo checking out ${latesttag}
git checkout ${latesttag}
在某些存储库中,
git describe --tags
不提供任何信息,简单的git tag | tail -1
可能会给你错误的标签,因为 git 以一种奇怪的方式对标签进行排序。
对我来说最好的命令是尾部命令的变体
VERSION=$(git tag | sort -V | tail -1)
git tag --contains | tail -1
git tag --contains
列出当前分支中的所有标签,tail -1
限制输出结果的个数为1,且为最新的一个。
为了将信息放入变量中,您需要对其进行赋值:
myvar=myvalue
但是,您想要计算要分配的值,而不仅仅是为变量分配一个常量。在您的情况下,您希望将命令的输出分配给变量。
首先,你必须弄清楚如何获取最后一个标签名称。我将把这个问题留给你,因为你还没有提到如何创建标签名称。
一旦你有一个给出最后一个标签名称的命令,你需要将该名称分配给一个变量。 Bash 通过“命令替换”来做到这一点。
例如:
thetagname=$( command_to_get_tag_name )
所以如果你只取 git 报告的最后一个标签,如下所示:
git tag | tail -1
然后你可以将它分配给这样的变量:
thetagname=$( git tag | tail -1)
您可以使用/查看这样的值:
echo $thetagname
或者正如用户1281385所说,像这样:
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
来获取可能的命令列表。
我希望这不是太基础。如果你以前没有见过,很难理解。