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, чтобы настроить его так, как вы этого хотите (по умолчанию для ветвления, проталкивания и т. Д.).