[英]How can I check in interval loop if the tags exist before doing the `git checkout $tag` command?
在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
來檢查標簽是否存在。 像這樣:
while :; do
git remote update
git rev-parse --verify --quiet SomeInterestingTag && break
# the tag did not exist
sleep 10
done
您可以使用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
傳遞-沒有提交哈希或分支。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.