如何检查 if/else 中是否存在标签

Den*_*boy 7 git bash if-statement

如何检查我的 GIT 存储库中是否存在标签。我得到一些标记名作为输入,我必须检查它是否是带有if else statement. TAG="tagname"的有效标记

我试过:

if [ git rev-parse ${TAG} >/dev/null 2>&1 ]; then
  echo "tag exists";
else
  echo "tag does not exist";
Run Code Online (Sandbox Code Playgroud)

但它没有用

Eri*_*ouf 12

您可以使用if不带test(或同义词[)的if命令,该命令会将退出状态视为条件。如果它以“成功”(即0)退出,则为真,否则为假:

if git rev-parse "$TAG" >/dev/null 2>&1; then
  echo "tag exists";
else
  echo "tag does not exist"
fi
Run Code Online (Sandbox Code Playgroud)


Dom*_*nik 12

更简单、更清洁的解决方案

if git show-ref --tags tag1 --quiet; then
  echo "tag exists"
else 
  echo "tag doesn't exist or error in command"
fi
Run Code Online (Sandbox Code Playgroud)

git show-ref如果未找到标签,则以退出代码 1 退出(请参阅Git 代码,未找到相关文档)。不过,还有其他 if 结构来检查退出代码(参见例如这个问题)。

仅限git rev-parse标签

git rev-parse --tags=$TAG只查找标签(这=是必要的),而git rev-parse $REF查找所有类型的修订(即还有分支和 SHA)。