在我們的持續集成環境中,我們的使用量非常大,爲git clone
和。git:如果http請求失敗,則重試
有時網絡或中央git服務器不可靠。
如果http請求失敗,是否有辦法告訴git重試?
例子:
500內部服務器錯誤,同時訪問 https://example.com/repos/foo_bar/info/refs?service=git-upload-pack
在我們的持續集成環境中,我們的使用量非常大,爲git clone
和。git:如果http請求失敗,則重試
有時網絡或中央git服務器不可靠。
如果http請求失敗,是否有辦法告訴git重試?
例子:
500內部服務器錯誤,同時訪問 https://example.com/repos/foo_bar/info/refs?service=git-upload-pack
有沒有辦法告訴git的重試如果HTTP請求失敗?
沒有git本身,它本身不支持該功能。
但有趣的是,包裝git命令以重試其執行的想法已經完成:請參閱「git-retry
(1) Manual Page」,depot_tools, a collection of tools for dealing with Chromium development的一部分。
的shell wrapper git-retry
用下列選項調用python腳本git_retry.py
:
'-v', '--verbose', default=0,
增加詳細程度;可以多次指定
'-c', '--retry-count', default=GitRetry.DEFAULT_RETRY_COUNT (5),
次重試次數(缺省= 5)
'-d', '--delay', default=GitRetry.DEFAULT_DELAY_SECS (3.0)
指定的時間量(以秒計)連續之間的等待重試(默認= 3秒)。這可以是零。
'-D', '--delay-factor', default=2
的指數因子應用到延遲在連續失敗(默認=%默認值)之間。如果這是零,則延遲將線性增加。將其設置爲1以具有恆定(不增加)的延遲。
注:一個git克隆與子模塊回購將始終嘗試克隆一個子模塊兩次(一個重試)。參見「Is there any way to continue Git clone from the point where it failed?」。
此解決方案不會執行任何簡單的shell腳本,但會增加對外部庫的依賴性 – Vorsprung
Git命令應返回一個正確的[退出代碼](https://en.wikipedia.org/wiki/Exit_status),您可以檢查該命令是否成功。如果沒有成功,則在中止前重試N次。 – poke