有沒有辦法git push
,但是,如果分支不存在於遠程,拋出一個錯誤或退出非零而不是創建一個新的分支上服務器?git推送到遠程,但不要創建新的分支
用例如下。我正在創建腳本來幫助自動化我公司的scm工作流程。如果有人意外錯誤地輸入了一個分支名稱作爲腳本的輸入,我不想在遠程創建一個新的分支。我已經可以手動檢查遠程分支的存在,但我想知道git是否支持這個功能。
有沒有辦法git push
,但是,如果分支不存在於遠程,拋出一個錯誤或退出非零而不是創建一個新的分支上服務器?git推送到遠程,但不要創建新的分支
用例如下。我正在創建腳本來幫助自動化我公司的scm工作流程。如果有人意外錯誤地輸入了一個分支名稱作爲腳本的輸入,我不想在遠程創建一個新的分支。我已經可以手動檢查遠程分支的存在,但我想知道git是否支持這個功能。
不,目前沒有辦法通過一個電話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 '[email protected]:some/repository.git'
如果你訪問服務器,你還可以創建一個pre-recieve
鉤來拒絕新的分支機構設立。
您需要更改git config中push.default的設置。查看git config documentation以完全按照您的需要進行配置(默認爲分支,推送等)。
不幸的是,這不適用於我,因爲我將提供多個分支refspecs在同一推,並不需要簽出多個分支,一個接一個,利用push.default –
爲什麼不重新命名拼寫錯誤的分支並再次刪除推送,然後刪除舊的分支? – ckruczek
我不希望腳本做出任何決定。我不希望腳本決定你打算擁有不同的分支名稱或分支被刪除。如果腳本的假設是無效的,我希望它只是中止 –