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
挂钩来拒绝创建新分支。
有没有办法 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
挂钩来拒绝创建新分支。