git push to remote, но не создавайте новую ветку

Есть ли способ git push, но, если ветка не существует на удаленном компьютере, выдать ошибку или выйти из ненулевого значения вместо создания новой ветки на сервере?

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

2 ответа

Решение

Нет, в настоящее время нет способа сделать это с помощью одного звонка git-push ,


Возможные обходные пути:

Наличие удаленной ветки можно проверить так:

#!/bin/bash
if ! git ls-remote --exit-code $remote /refs/heads/$branch
then
    echo >&2 "Error: Remote branch does not exist"
    exit 1
fi
exit 0

Который может быть включен в pre-push крючок, а при желании. Как то так (место в .git/hooks/pre-push):

#!/bin/sh
remote="$1"
url="$2"
while read local_ref local_sha remote_ref remote_sha
do
  if ! git ls-remote --exit-code $url $remote_ref
  then
    echo >&2 "Remote branch does not exist, not pushing"
    exit 1
  fi
done
exit 0

Что вызовет желаемое поведение:

$ git push origin master:branch_that_does_not_exist
Remote branch does not exist, not pushing
error: failed to push some refs to 'git@github.com:some/repository.git'

Если у вас есть доступ к серверу, вы также можете создать pre-recieve зацепить, чтобы отклонить создание новых веток.

Вам нужно изменить настройки на push.default в git config. Изучите документацию по git config, чтобы настроить его так, как вы этого хотите (по умолчанию для ветвления, проталкивания и т. Д.).

Другие вопросы по тегам