git push to remote,但是不要创建新的分支

时间:2015-06-11 17:12:13

标签: git git-branch git-push

有没有办法git push,但是,如果遥控器中不存在分支,则抛出错误或退出非零而不是在服务器上创建新分支?

用例如下。我正在创建脚本来帮助自动化我公司的scm工作流程。如果有人意外错误地将分支名称输入到脚本中,我不希望在远程上创建新分支。我已经可以手动检查远程分支的存在,但我想知道git是否支持这个功能。

2 个答案:

答案 0 :(得分: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挂钩以拒绝创建新分支。

答案 1 :(得分:0)

您需要在git config中更改push.default上的设置。查看git config documentation以完全按照您的需要进行配置(分支,推送等的默认设置)。