git 推送到远程,但不创建新分支

git push to remote, but don't create new branch

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

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

您需要更改 git 配置中 push.default 的设置。查看 git config documentation 以完全按照您想要的方式配置它(分支、推送等的默认值)。

不,目前无法通过一次调用 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=""
url=""
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 挂钩来拒绝创建新分支。