2015-06-11 128 views
2

有沒有辦法git push,但是,如果分支不存在於遠程,拋出一個錯誤或退出非零而不是創建一個新的分支上服務器?git推送到遠程,但不要創建新的分支

用例如下。我正在創建腳本來幫助自動化我公司的scm工作流程。如果有人意外錯誤地輸入了一個分支名稱作爲腳本的輸入,我不想在遠程創建一個新的分支。我已經可以手動檢查遠程分支的存在,但我想知道git是否支持這個功能。

+0

爲什麼不重新命名拼寫錯誤的分支並再次刪除推送,然後刪除舊的分支? – ckruczek

+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 '[email protected]:some/repository.git' 

如果你訪問服務器,你還可以創建一個pre-recieve鉤來拒絕新的分支機構設立。

0

您需要更改git config中push.default的設置。查看git config documentation以完全按照您的需要進行配置(默認爲分支,推送等)。

+0

不幸的是,這不適用於我,因爲我將提供多個分支refspecs在同一推,並不需要簽出多個分支,一個接一個,利用push.default –