如果在执行“git 签出$tag”命令之前存在标签,如何签入间隔循环



在 bash 脚本中,我正在等待释放特定的远程 git 标签,然后再在我的脚本中使用它。

在执行 git checkout $tag 命令之前,如何检查间隔循环中是否存在标签?

前任:

 while sleep 3; do git fetch && git rev-parse --verify <tag> && break; done

编辑

我创建了以下 bash 函数:


function wait_for_tag() {
  tag=v${1#v}
  interval=${2:-20}
    while :; do
        echo "Waiting for tag ${tag}..."
        git remote update > /dev/null 2>&1
        git rev-parse --verify --quiet "${tag}" && break
        sleep ${interval}
    done
}
function git_checkout() {
  tag=v${1#v}
    is_release && wait_for_tag "${tag}"
    git checkout ${tag} || echo "testing"
    npm install
}

我希望当我git_checkout v2.0.13-bs-redux-saga-router-dom-intl签出标签时,如果它已经存在,否则,获取新标签并稍后重试。

这在本地环境中似乎工作得很好,但是当我在 Gitlab-CI 中执行此操作时,并行管道永远不会看到新标记,即使它们被标记并存在于 Gitlab UI 上。

如何确保 wait_for_tag 函数确实检索标签,为什么git remote update无法做到这一点?

您可以使用

git rev-parse来检查标签是否存在的天气:

git rev-parse -q --verify "refs/tags/$tag" >/dev/null

在您提到的循环中,结合git checkout它可能看起来像这样:

tag="foo"
while true; do
    git fetch --all
    if git rev-parse -q --verify "refs/tags/$tag" >/dev/null; then
        git checkout "$tag" && break
    fi
    sleep 5
done

在这种情况下,您确实必须传递一个标签名称作为$tag - 没有提交哈希或分支。

您可以使用

git rev-parse来检查标签是否存在。 像这样:

while :; do
  git remote update
  git rev-parse --verify --quiet SomeInterestingTag && break
  # the tag did not exist
  sleep 10
done

最新更新