如果git fetch被取消,它会恢复一半吗?

时间:2015-03-22 08:57:16

标签: git resume

有时提取任何git存储库(通过执行“git fetch repository_URL”)可能需要数小时,具体取决于存储库大小和网络速度。

如果出于某种原因,用户取消了中途获取然后尝试获取相同的存储库,在他/她取消最后一次获取的完全相同的环境中,获取将如何工作?

它会从中断处继续取回吗?

1 个答案:

答案 0 :(得分:5)

否(2015年)或者很快(2018年第4季度),git clone/fetch/pull运营没有"简历"能力。

此后:


2015:

唯一的选择mentioned in this thread gitolite (这是一个管理ACM的perl脚本 - 您的回购的访问控制级别,以及提供其他实用程序git access)

  

gitolite可以配置为更新" Git捆绑" (见   git-bundle manual)然后可以通过rsync或者下载   HTTP协议然后可以使用a的rsync客户端下载   支持恢复的HTTP客户端。

     

使用这种技术可以使"下载所有内容"和#34;从下载的东西中回购#34;步骤不同,第一步可以使用任意次数的尝试进行。

     

缺点很明显:

     
      
  1. 这需要在服务器端进行特殊设置。
  2.   
  3. 目前还不清楚如果有人设法更新存储库会发生什么   有人正在下载其捆绑包,或者更新发生   相邻的下载尝试之间。
  4.   

关于git clone / fetch的可恢复功能(在" How to complete a git clone for a big project on an unstable connection?"中提到),最近有一个关于{{{2016}的讨论(2016年3月) 3}}

  • 一种方法是服务器生成捆绑包,可以加载(使用wget -c恢复!)并添加到本地仓库(因为捆绑包是一个文件,你可以克隆,好像是一个git repo) 请参阅" git mailing list"

那是:

wget -c https://cdn.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/clone.bundle
git bundle verify clone.bundle
...
clone.bundle is okay
git clone clone.bundle linux
#Now, point the origin to the live git repository and get the latest changes:
cd linux
git remote remove origin
git remote add origin https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
git pull origin master
  

我们可以通过制作一点混合来实现可恢复克隆   智能和愚蠢的HTTP协议。

     
      
  1. git clone最终会调用传输层,并且   git-remote-curl将探测info / clone网址;如果资源   无法加载,一切都通过传统的代码路径。

  2.   
  3. git-remote-curl检测到哑巴克隆的支持时,它会执行   "重试,直到成功完全下载包数据"舞蹈   在内部,暂时更新远程跟踪引用,然后   假装好像被要求进行增量提取。如果这   没有任何die()成功,每个人都很高兴。

  4.   
  5. 如果上述步骤3.由于某种原因必须die()(包括   急躁 CTRL C ),保留$GIT_DIR,下载的.info文件和部分下载的.pack文件。
      告诉用户可以恢复克隆以及如何进行克隆。

  6.   

请注意,这是针对可恢复的克隆discussed in this thread

  

最初的"克隆"以及随后的增量" fetch"是正交问题

     

因为建议更新"克隆"有比这更大的回报   建议改为" fetch",即

     
      
  • 传输的数据量要大得多   在糟糕的网络环境中网络超时的可能性是   更高,需要恢复更大。
  •   
  • 这种方法不仅可以克隆"克隆"可以恢复和帮助   客户端,它可以帮助服务器卸载批量转移到CDN。
  •   
     

它对现有代码的损害要小得多,即

     
      
  • 我们不必对包装过程感到悲观,只是放弃   生成的大部分字节,就像提出的方法一样   for" fetch"。
  •   
  • 需要的区域新代码很好地隔离并切换到   新协议在交换的早期就发生而不共享   代码到现有的代码路径;这些属性使其风险较小   介绍回归。
  •   

为避免新协议中仅支持HTTP的功能,建议使用" v2"在裁判广告之前让双方交换能力的协议。然后,客户端看到服务器的可恢复URL,知道是否继续进行广告 请参阅2017年7月的not a resumable fetch

相关问题