git clone 太慢怎么办?

Git 和 GitHub 的出现打开了开源世界的另一扇大门,版本控制变得更强大(也更复杂),项目的管理变得更加容易,项目的开发也变得更容易进行多人协作。GitHub 无疑是程序员的 Facebook ,在这里汇聚了无数世界顶级的项目以及顶级的程序员,你可以为你感兴趣的项目加星(Star),可以关注任何人(Follow)以及他们的项目(Watch),而且更赞的是,你可以复制一份别人项目的副本(Fork),来进行自己的修改,如果你愿意的话,你还可以向项目的原作者发起请求(Pull Request),将你做的修改合并到原项目中。这样无论你是什么人,来自不同的国家,拥有不同的技能,都可以对所有开源的项目作出贡献。

尽管上面描述的开源世界如此美好,但是在大天朝,在墙内,你却完全无法领略。因为当你访问 GitHub 时,或者使用 git clone 兴致勃勃的下载你感兴趣的项目时,巨慢的速度将彻底击毁你的信心,最终只好放弃表示玩不起。

强大的长城技术对 GitHub 网开一面,没有像 Google 或 Facebook 这样直接斩尽杀绝,但是对它做了严格的限速,这种折磨比直接毙了更痛苦( 有网友表示,有些地区速度很快,有些地区速度很慢,也有可能是和网络运营商有关 )。如上图所示, git clone 的下载速度从来没有超过 10KiB/s ,这也就意味着一个 100MiB 的项目,需要近三个小时才能下完,而且由于网络的不稳定性,下载过程中偶尔会出现断开连接的情况,由于 git clone 不支持断点续传,这让几个小时的下载时间白白浪费掉,只能重新开始。

这篇文章将介绍几种方法来快速从 GitHub 上下载代码。

一、git shallow clone

git clone 默认会下载项目的完整历史版本,如果你只关心最新版的代码,而不关心之前的历史信息,可以使用 git 的浅复制功能:

$ git clone --depth=1 https://github.com/bcit-ci/CodeIgniter.git

--depth=1 表示只下载最近一次的版本,使用浅复制可以大大减少下载的数据量,例如, CodeIgniter 项目完整下载有近 100MiB ,而使用浅复制只有 5MiB 多,这样即使在恶劣的网络环境下,也可以快速的获得代码。如果之后又想获取完整历史信息,可以使用下面的命令:

$ git fetch --unshallow

或者,如果你只是想下载最新的代码看看,你也可以直接从 GitHub 上下载打包好的 ZIP 文件,这比浅复制更快,因为它只包含了最新的代码文件,而且是经过 ZIP 压缩的。但是很显然,浅复制要更灵活一点。

二、GUI 工具 + 代理

如果很有幸你正在使用代理,懂得如何FQ的话,那么访问 GitHub 对你来说应该不在话下。下载 GitHub 上项目的最简单的方法就是使用一款图形化界面(GUI)的 Git 工具,这样的工具现在比比皆是。使用 GUI 工具方便的地方在于,可以在设置中配置是否要使用代理,将你FQ所使用的代理 IP 拿过来配置上就 OK 了,或者更直接的,将代理配置为系统代理。

三、git + http.proxy

如果你跟我一样,喜欢使用原生的 git 命令,喜欢在命令行下操作的那种感觉,那么也可以在命令行下直接配置 git 使用代理,当然前提一样是,你懂得如何FQ。

$ git config --global http.proxy http://proxyuser:[email protected]:8080
$ git config --global https.proxy https://proxyuser:[email protected]:8080

使用上面的命令配置完之后,会在 ~/.gitconfig 文件中多出几行:

[http]
    proxy = http://proxyuser:[email protected]:8080
[https]
    proxy = https://proxyuser:[email protected]:8080

你也可以使用下面的命令检查配置是否生效:

$ git config --global --get http.proxy
$ git config --global --get https.proxy

另外,如果你想取消该设置,可以:

$ git config --global --unset http.proxy
$ git config --global --unset https.proxy

配置完成后,重新 clone 一遍,可以看到速度得到了极大的提升!

题外话:在命令行中如何使用代理?

要注意的是使用 git config --global 配置的代理只能供 git 程序使用,如果你希望让命令行中的其他命令也能自动使用代理,譬如 curl 和 wget 等,可以使用下面的方法:

$ export http_proxy=http://proxyuser:[email protected]:8080
$ export https_proxy=https://proxyuser:[email protected]:8080

这样配置完成后,所有命令行中的 HTTP 和 HTTPS 请求都会自动通过代理来访问了。如果要取消代理设置,可以:

$ unset http_proxy
$ unset https_proxy

还有一点要注意的是,使用 http_proxy 和 https_proxy 只对 HTTP 和 HTTPS 请求有效,所以当你 ping www.google.com 的时候如果 ping 不通的话,也就没什么大惊小怪的了。

题外话:如何使用 PAC 文件?

有时候我们会使用 git 访问不同的 git 仓库,譬如 GitHub,或者 [email protected], 或者你自建的 Git 服务器,但是只想访问 GitHub 的时候使用代理,访问其他的仓库不要使用代理。这时候我们似乎可以使用 PAC 来解决这个问题。 PAC (代理自动配置)正是用于浏览器来根据不同的 URL 自动采用不同的代理的一项技术,该文件包含一个 FindProxyForURL Javascript 函数,用于根据 URL 来返回不同的代理。

但是遗憾的是,目前 git 似乎还不支持 PAC 文件,但我们可以打开 PAC 文件找到代理的地址,然后通过上面的方法来配置或取消配置,只是有些繁琐。 也许可以写个脚本来解析 PAC 文件,并将 git 包装下,来实现自动切换代理,有机会尝试下。

四、其他方法

网上还提供了很多其他的方法,但是我暂未尝试过,且记录一下:

  • ssh tunnel 或者 shadowsocks
  • ss + proxychains
  • 使用境外的 VPS
  • powerpac
  • VPN

参考

时间: 2024-10-30 21:15:07

git clone 太慢怎么办?的相关文章

git clone速度太慢,使用python3.x改host

在git clone 的时候,最心烦的莫过于速度太慢,gitee的还好,要是github的速度就太慢了. 网上的方法大都是改host,但是每隔一段时间,git的ip就会变动,于是自己写了个脚本,爬取global-ssl.fastly.net这个ip,然后修改掉host的原有ip 先看一下速度300k还是很不错的 首先,需要改变一下host的权限,一定要选中自己当前登录的用户,点击编辑->完全控制 github代码:https://github.com/HumorZhang/host 下载后,py

git clone速度太慢的解决办法

思路: git clone特别慢是因为github.global.ssl.fastly.net域名被限制了.只要找到这个域名对应的ip地址,然后在hosts文件中加上ip–>域名的映射,刷新DNS缓存便可. 实施方法: 1.在网站 https://www.ipaddress.com/ 分别搜索: github.global.ssl.fastly.net github.com 2.在hosts文件末尾添加两行(对应上面查到的ip) 151.101.185.194 github.global-ssl

git clone 出现 RPC failed 错误的解决方案

今天使用git clone一个大型项目的时候出现了如下错误: 多试了几次依然如此,于是只好去万能的stackoverflow上面寻找答案,最后发现是git使用太多内存,需要先做GC才可以 使用完git gc命令再次跑git clone命令,果然可以下载项目了

我的Git教程 之 解决 git clone后无代码

解决 git clone 后无代码 前言:这个教程只适用于像我一样大致理解Git的原理,但是不太记得住Git命令的同学使用.所以具体原理只会提一下,具体可以参见Pro Git. 在另一篇 简明的教程 里提到获取Git库有两种方式,一种是直接在工作目录下创建一个新的Git库,另一种是从已有的库中克隆,即使用git clone. 其中使用第二种方法可能出现目录为空,即没有代码的现象. (1)分析原因 在Git Bash中,切换到目标目录.然后使用 $ ls -a 查看如果能看到.git目录,说明克隆

git clone 指定分支操作

服务器迁移,而且原来本地开发是在同一个目录中切换不同的分支,感觉有点挫,于是打算一个文件目录对应一个分支,这样不会有太大的文件差异. 记录下来本次操作,可能以后还会用到. git初始化一般是这样. git init git clone .git地址 之后重点来了,因为clone下来的一般为master分支,有可能不是想拉下来的分支.可以使用以下的方法 git branch -a 先查看当前远端分支情况 git  checkout origin/xxx  选择远端xxx分支 git branch

git clone 远程库到本地的步骤

从github远程库上clone到本地 当已有github 远程库时,从远程库上clone到本地的步骤 1.1 在本地新建文件夹git_clone 在git bash中,通过cd git_clone定位到本地文件夹 此时,可以使用git init 将本地的文件夹也加入到git 管理,如果加入后,则相当于本地文件夹也会有stage,后续的一切修改都要和stage进行比较.为了不必要的误会,这里不做这一步,相当于本地文件夹不进行git 管理. 1.2 使用git_clone 命令,从远程库clone

git报错git clone https://github.com/synfinatic/tcpreplay.git

一.背景说明 今天使用在Cygwin中git clone时报fatal: I don't handle protocol '?https',如下: 以为是Cygwin实现的git有点问题没太在意,换去cmd执行,但一样是报fatal: I don't handle protocol '?https' 而且有个Warning: Your console font probably doesn't support Unicode.又因此以为是字体问题 标题栏----右键----属性,将字体修改成仿宋

centos服务器上git clone下载加速

最近在服务器上直接git clone github上的仓库,下载速度只有十几KB,简直不要太慢! 网上搜了一些加速的,自己于是写了下面的总结. 1. nslookup命令 如果执行这个命令找不到,请先执行: yum -y install bind-utils 然后执行下面两条命令 nslookup github.global.ssl.fastly.Net nslookup github.com 如图: 2. 修改hosts文件 写上对应的IP X.X.X.X http://global-ssl.

git clone失败

git clone失败,提示输入的密码错误,执行以下两步 1. 重新生成ssh 在命令行执行命令:ssh-keygen -t rsa -C "[email protected]" 邮箱要输入自己的地址 2. 把生成的 ~/.ssh/id_rsa.pub 公共密钥添加到git网站上 记住要全部复制!