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

gue*_*tli 8 git http

在我们的持续集成环境中,我们非常重视git clone和使用git update.

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

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

例:

访问https时出现 500内部服务器错误:https: //example.com/repos/foo_bar/info/refs ? service = git- upload- package

Vor*_*ung 8

您可以运行这样的脚本,而不是直接调用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
Run Code Online (Sandbox Code Playgroud)


Von*_*onC 7

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

没有git本身,它本身不支持该功能.

但有趣的是,包装git命令以重试其执行的想法之前已经完成:请参阅" git-retry(1)手册页 ",depot_tools的一部分,一系列用于处理Chromium开发的工具.

该外壳包装git-retry调用python脚本git_retry.py使用下列选项:

'-v', '--verbose', default=0,
Run Code Online (Sandbox Code Playgroud)

增加冗长; 可以多次指定

'-c', '--retry-count', default=GitRetry.DEFAULT_RETRY_COUNT (5),
Run Code Online (Sandbox Code Playgroud)

重试次数(默认= 5)

'-d', '--delay', default=GitRetry.DEFAULT_DELAY_SECS (3.0)
Run Code Online (Sandbox Code Playgroud)

指定连续重试之间等待的时间(以秒为单位)(默认值= 3秒).这可以是零.

'-D', '--delay-factor', default=2
Run Code Online (Sandbox Code Playgroud)

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


注意:带子模块的repo的git clone总是尝试克隆子模块两次(一次重试).请参阅" 有没有办法从失败的地方继续Git克隆? ".


phi*_*gun 5

这是git命令的包装,它识别命令何时失败并重试

git retry [-v] [-c COUNT] [-d DELAY] [-e]?—?<git_subcommand>
Run Code Online (Sandbox Code Playgroud)

有关此的更多信息,请参见此处。