代码之家  ›  专栏  ›  技术社区  ›  Freddie

Bash/Shell脚本函数,用于验证Git标记或提交是否存在,以及是否已推送到远程存储库

  •  7
  • Freddie  · 技术社区  · 15 年前

    我想把这个问题提出来看看我做得对不对。下面的脚本有效 除了检查提交是否已推送到远程repo 我找不到正确的命令:

    #!/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
        }
    

    List Git commits not pushed to the origin yet

    2 回复  |  直到 8 年前
        1
  •  7
  •   Cascabel    15 年前

    检查远程设备是否有给定的标记非常简单—您只需要解析 git ls-remote --tags 看看里面有没有你的标签。

    检查一个给定的提交是否存在有点棘手。一切都是基于参考的。你知道应该从哪个参考号到达吗?如果您这样做了,您可能只需要获取该ref并在本地检查commit是否是它的祖先。也就是说,从origin获取master并查看提交是否在origin/master上。

    你也可以尝试使用 git push -n 做一个将提交推到该分支的试运行,看看会发生什么-如果是no-op,那么提交已经在该分支上了。

    如果你不知道它应该在哪个分支上。。。你可能只需要把它们都拿来检查一下。

        2
  •  3
  •   Freddie    15 年前

    我要做这个-你觉得呢?

    verify_git_ref() {
        log "Verifying git tag or commit: \"$1\" ...."
        if git branch -r --contains $(git rev-parse $1) | grep origin>/dev/null 2>&1
        then
            log_success "Git tag or commit \"$1\" verified...."
            GIT_TAG_OR_REF=$1
            return 0
        else
            log_error "\"$1\" is not a valid tag or commit that has been pushed, you must use a valid tag or commit in order for this script to continue"
            return 1
        fi
    }
    
    推荐文章