将git推送到远程仓库,但不要创建新分支。

3
有没有一种方法可以进行git push,但是如果远程不存在该分支,则抛出错误或退出非零,而不是在服务器上创建一个新的分支?
使用情况如下。我正在创建脚本来帮助自动化公司的scm工作流程。如果有人在脚本中意外地将分支名称输入错误,我不希望在远程创建一个新的分支。我已经可以手动检查远程分支是否存在,但我想知道git是否支持此功能。

为什么不将拼写错误的分支重命名,再次推送并删除它,然后再删除旧的分支呢? - ckruczek
我不希望脚本做出任何决定。我不希望脚本决定你想要一个不同的分支名称或删除一个分支。如果脚本的假设是无效的,我希望它只是中止。 - Alexander Bird
2个回答

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钩子来拒绝创建新分支。

0

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


很不幸,这对我来说行不通,因为我将在同一次推送中提供多个分支 refspecs,并且不需要一个接一个地检出多个分支,以利用 push.default。 - Alexander Bird

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接