git:如果http请求失败则重试

时间:2016-01-26 12:36:04

标签: git http

在我们的持续集成环境中,我们大量使用git clonegit update

有时网络或中央git服务器不可靠。

如果http请求失败,有没有办法告诉git重试?

示例:

  访问时

500内部服务器错误   https://example.com/repos/foo_bar/info/refs?service=git-upload-pack

4 个答案:

答案 0 :(得分:7)

您可以运行这样的脚本,而不是直接调用git。

#!/bin/bash

REALGIT=/usr/bin/git

RETRIES=3
DELAY=10
COUNT=1
while [ $COUNT -lt $RETRIES ]; do
  $REALGIT $*
  if [ $? -eq 0 ]; then
    RETRIES=0
    break
  fi
  let COUNT=$COUNT+1
  sleep $DELAY
done

答案 1 :(得分:6)

  

如果http请求失败,有没有办法告诉git重试?

没有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
  

应用于连续失败之间延迟的指数因子(默认值=%default)。如果为零,延迟将线性增加。将其设置为1以具有恒定(非增加)延迟。

注意:带子模块的repo的git clone总是会尝试克隆子模块两次(一次重试)。请参阅" Is there any way to continue Git clone from the point where it failed?"。

答案 2 :(得分:3)

This是git命令的包装器,它可以识别命令何时失败并重试

git retry [-v] [-c COUNT] [-d DELAY] [-e] — <git_subcommand>

可以找到有关此内容的更多信息here

答案 3 :(得分:0)

运行以下命令

  

同时! git push;睡7完成