Функция сценария Bash / Shell для проверки наличия Git-тега или фиксации и его отправки в удаленное хранилище - PullRequest
7 голосов
/ 05 августа 2010

Я хотел получить этот вопрос, чтобы узнать, правильно ли я это делаю.Следующий скрипт работает , за исключением проверки того, была ли отправлена ​​фиксация в удаленное хранилище , для которого я не могу найти нужную команду:

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

Связано: Коммиты со списком Git, которые еще не отправлены на место происхождения

Ответы [ 2 ]

6 голосов
/ 06 августа 2010

Проверить, есть ли у данного тега заданный тег, довольно просто - вам просто нужно проанализировать вывод git ls-remote --tags, чтобы увидеть, содержит ли он ваш тег.

Проверка наличия данного коммита немного сложнее. Все на основе ссылок. Знаете ли вы, с какой ссылки он должен быть доступен? Если вы это сделаете, вам, вероятно, следует просто получить этот ref и проверить локально, является ли его предок. То есть, получить master из источника и посмотреть, находится ли коммит в origin / master.

Вы также можете попробовать использовать git push -n, чтобы выполнить пробный запуск отправки коммита в эту ветку, и посмотреть, что произойдет - если это неоперация, коммит уже находится в ветке.

Если вы не знаете, в какой ветке он должен быть ... вам, вероятно, придется просто выбрать и проверить их все.

3 голосов
/ 06 августа 2010

Я получил это на работу - что вы думаете?

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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...