Bash/Shell脚本函数验证Git标记或提交存在并已被推送到远程存储库

Fre*_*die 7 git bash

我想在那里得到这个问题,看看我是否做得对.以下脚本工作,除了检查提交是否已被推送到远程仓库,我找不到正确的命令:

#!/bin/bash
set -e  # fail on first error    
verify_git_ref() {
        log "Verifying git tag or commit: \"$1\" ...."
        if git show-ref --tags --quiet --verify -- "refs/tags/$1"
        then
            log_success "Git tag \"$1\" verified...."
            GIT_TAG_OR_REF=$1
            return 0
        elif git rev-list $1>/dev/null 2>&1
        then
            log_success "Git commit \"$1\" verified...."
            GIT_TAG_OR_REF=$1
            return 0
        else
            log_error "\"$1\" is not a valid tag or commit, you must use a valid tag or commit in order for this script to continue"
            return 1
        fi
    }
Run Code Online (Sandbox Code Playgroud)

相关: 列表Git提交尚未推送到原点

Cas*_*bel 6

检查遥控器是否具有给定标签非常简单 - 您只需要解析输出git ls-remote --tags以查看它是否包含您的标签.

检查给定的提交是否有点棘手.一切都是以ref为基础的.你知道它应该可以从哪个参考?如果你这样做,你应该只是获取那个ref并在本地检查提交是否是它的祖先.也就是说,从origin获取master并查看提交是否在origin/master上.

您也可以尝试使用git push -n将该提交推送到该分支的干运行,并查看会发生什么 - 如果它是无操作,则提交已经在分支上.

如果你不知道它应该是什么分支...你可能只需要获取并检查它们.