由于一些不可描述的原因,有时候我们需要通过 git 从一些网站(Github or Kernel.org) clone 代码的时候,速度非常的慢。
如上图所示,我想从 Kernel.org clone 各个 stable 版本的 Linux Kernel,但是这个网速非常的捉急,10 KB/s,整个 Git 仓库大概有 2GB 左右大小,以这个网速不知道要下载到后年马月了。
但是我们还有一种方法来加速这个过程:有那么一群热情而又极富责任感的有志之士,他们在国内搭建了一批稳定高效的镜像网站,比如中科大的 USTC Mirror,清华的 Tuna Mirror,它们镜像了各大知名的开源项目,比如 Linux Kernel、Android、Debian、Ubuntu 以及各种基础开发工具。通过这些网站去下载的话速度非常快。
如果你需要的某个软件版本,这些镜像网站上有的话,那么事情就简单了,你直接通过这些网站去下载就是了。
如果你需要的软件版本和镜像网站上镜像的版本有差异,那也没关系,Git 的代码同步机制可以帮助我们—— Git 从一个仓库同步代码的时候,并不是直接就把这个完整的仓库全部同步下来,而且先确定我们本地的仓库和远端仓库之间的差异,然后只同步差异部分,这样只需要同步很小的数据量!
比如我想 clone Kernel.org 上各个 stable 版本的 Linux Kernel,直接从 Kernel.org 同步的话,网速非常慢,但是我发现清华的 Tuna 镜像上有一个 Linux next 分支 !
任意一个 Linux Kernel 分支仓库都包含有 Linux kernel 的绝大部分代码,所以我只要通过这个快速的 Tuna 镜像把 Linux-next 这个分支下载下来,我就在本地拥有了一个 Linux Kernel 的基础版本,然后我在通过 Kernel.org 去同步 Stable 仓库,就只需要同步很小的数据量了,这样即使慢一点,但是因为数据量小,也用不了多少时间。
可以看到从这个镜像下载内核还是很快的,2 MB /s, 其实中间有时候速度能上到 4~5 MB/s,所以 1.3G 的数据很快就下下来了。
通过 git branch-ar
这个命令,我们可以看到,这个代码仓库只有一个 master 分支,和其他几个分支,并没有各个发布的 stable 版本。
git remode add name url
命令把原来我们要下载的仓库作为远程仓库添加到本地仓库git remote add upstream https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
name 的名字可以按照自己的喜好随便取,url 就是你想同步的 git 仓库地址。
git fetch name
命令抓取远程仓库。可以看到现在有了前面从 Tuna 镜像上拉取的基础仓库,这次只需要下载 167MB 的数据即可,虽然网速还是很慢,但是数据量小,这个时间还是可以忍受的。
同步完成后,再用 git branch-ar
命令查看,各个 stable 分支都被同步下来了。
这篇文章以 Kernel.org 的同步为例,给大家介绍了一种 git 下载加速的方法,其实不仅仅是 Kerne.org, 其他任何的 Linux Kernel 版本,或者 git 仓库,只要在国内能找到一个比较快速的镜像网站,都能用类似的方法。