1. 为什么你需要一个Git下载加速器
如果你经常从GitHub等平台下载代码仓库或者发布文件,一定遇到过下载速度慢到让人抓狂的情况。国内访问国外Git服务时,网络延迟和带宽限制常常把本应几分钟完成的下载变成几小时的煎熬。特别是当你需要拉取大型仓库(比如包含机器学习模型或者前端框架源码)时,这种体验简直让人崩溃。
我去年参与一个开源项目时,每次git clone都要等上半小时,严重影响了开发效率。后来发现Cloudflare Workers这个神器,它提供的免费额度完全够个人开发者使用,而且配置简单到令人发指。实测下来,原本需要30分钟的下载现在3分钟就能搞定,速度提升近10倍。
Cloudflare Workers本质上是一个边缘计算平台,在全球拥有200多个数据中心节点。当你通过它访问Git资源时,请求会自动路由到最优节点,避开拥堵的国际线路。更重要的是,它免费套餐每天提供10万次请求额度,对个人用户来说绰绰有余。
2. 准备工作:注册Cloudflare账号
2.1 访问官网注册
首先打开Cloudflare官网(https://dash.cloudflare.com),点击右上角的"Sign Up"按钮。注册只需要邮箱和密码,不需要信用卡信息。建议使用常用邮箱,因为后续需要验证。
我当初注册时尝试用临时邮箱,结果发现收不到验证邮件耽误了半天时间。后来换成Gmail秒收验证码,所以强烈建议使用主流邮箱服务商。
2.2 验证邮箱
注册完成后,去邮箱找到Cloudflare发来的验证邮件(可能在垃圾箱)。点击验证链接后,你会看到一个欢迎页面。别急着关掉,注意左侧菜单栏有个"Workers"选项,这就是我们接下来要用到的核心功能。
有个小技巧:如果你之前用过Cloudflare的CDN服务,可能需要先退出当前账户再重新登录,才能看到完整的Workers功能入口。我帮同事配置时就遇到过这个坑,明明注册了却找不到Workers菜单。
3. 开启Workers服务
3.1 初始化Workers
点击左侧菜单的"Workers",系统会提示你设置一个子域名。这个域名将作为你加速服务的访问入口,比如git.yourname.workers.dev。取名要慎重,因为之后不能修改。
我建议用简短易记的名字,比如直接用git或者gh作为前缀。之前有个朋友设了个复杂名字,每次使用都要翻笔记查找,后来不得不重新注册账号。
3.2 选择免费套餐
在订阅页面选择"Free"计划,这个套餐提供:
- 每天10万次请求
- 每次请求最长10ms CPU时间
- 全球200+边缘节点
对于Git加速这种简单场景完全够用。我连续使用三个月从没触发过限额,除非你要做持续集成这类高频请求,否则没必要升级付费计划。
4. 创建你的第一个Worker
4.1 新建服务
回到Workers面板,点击"Create a Service"。服务名称可以随意,比如git-accelerator。运行时选择默认的"HTTP handler"即可,其他设置保持不动。
这里有个细节要注意:创建页面有个"Compatibility Date"选项,务必选择最新日期。我有次选了旧版本导致部分ES6语法不支持,调试了半天才发现问题。
4.2 部署代理代码
将以下代码完整复制到Worker编辑器中:
'use strict' const PREFIX = '/' const Config = { jsdelivr: 1 } const PREFLIGHT_INIT = { status: 204, headers: new Headers({ 'access-control-allow-origin': '*', 'access-control-allow-methods': 'GET,POST,PUT,PATCH,TRACE,DELETE,HEAD,OPTIONS', 'access-control-max-age': '1728000', }), } const githubPatterns = [ /^(?:https?:\/\/)?github\.com\/.+?\/.+?\/(?:releases|archive)\/.*$/i, /^(?:https?:\/\/)?github\.com\/.+?\/.+?\/(?:blob|raw)\/.*$/i, /^(?:https?:\/\/)?github\.com\/.+?\/.+?\/(?:info|git-).*$/i, /^(?:https?:\/\/)?raw\.(?:githubusercontent|github)\.com\/.+?\/.+?\/.+?\/.+$/i, /^(?:https?:\/\/)?gist\.(?:githubusercontent|github)\.com\/.+?\/.+?\/.+$/i, /^(?:https?:\/\/)?github\.com\/.+?\/.+?\/tags.*$/i ] function checkUrl(url) { return githubPatterns.some(pattern => pattern.test(url)) } addEventListener('fetch', e => { e.respondWith(handleRequest(e.request)) }) async function handleRequest(request) { const url = new URL(request.url) let targetUrl = url.searchParams.get('q') if (!targetUrl) { const path = url.pathname.replace(PREFIX, '') targetUrl = path.startsWith('http') ? path : `https://${path}` } if (!checkUrl(targetUrl)) { return new Response('Invalid GitHub URL', { status: 400 }) } if (targetUrl.includes('/blob/') && Config.jsdelivr) { const newUrl = targetUrl.replace('/blob/', '@') .replace(/^(?:https?:\/\/)?github\.com/, 'https://cdn.jsdelivr.net/gh') return Response.redirect(newUrl, 302) } const newRequest = new Request(targetUrl, { method: request.method, headers: request.headers, redirect: 'follow' }) try { const response = await fetch(newRequest) const modifiedResponse = new Response(response.body, response) modifiedResponse.headers.set('access-control-allow-origin', '*') return modifiedResponse } catch (error) { return new Response(error.stack, { status: 502 }) } }点击"Save and Deploy"按钮部署代码。如果一切顺利,你会看到绿色的部署成功提示。整个过程不到30秒,比配置传统代理服务器简单多了。
5. 使用你的加速服务
5.1 基础使用方法
你的加速服务地址格式为:https://[你的服务名称].[你的子域名].workers.dev。使用时只需在GitHub原始链接前加上这个地址即可。
比如要加速下载:
https://github.com/vuejs/vue.git改为:
https://git.yourname.workers.dev/https://github.com/vuejs/vue.git实测下来,原本100KB/s的速度可以提升到2MB/s以上。我最近下载一个1.2GB的AI模型仓库,从原来的3小时缩短到8分钟。
5.2 进阶技巧
对于常用仓库,可以创建bash别名简化操作。在.bashrc或.zshrc中添加:
alias gitclone='function _gitclone(){ git clone https://git.yourname.workers.dev/https://github.com/$1.git ${2:-${1##*/}} };_gitclone'之后就可以直接用gitclone 用户名/仓库名来高速下载了。
如果你使用Git GUI工具(如Sourcetree),可以在仓库URL处直接使用加速地址。不过要注意,推送(push)操作还是建议用原始地址,因为Worker目前只优化了下载流量。
6. 常见问题排查
6.1 403禁止访问错误
这通常是因为GitHub限制了爬虫请求。解决方法是在Worker代码中添加User-Agent头:
const newRequest = new Request(targetUrl, { headers: { 'User-Agent': 'Mozilla/5.0' } })6.2 大文件下载中断
对于超过100MB的文件,建议使用git clone的分块传输特性。如果直接下载zip可能会超时。可以在Worker代码中调整超时设置:
const response = await fetch(newRequest, { cf: { fetchTimeout: 60000 // 60秒超时 } })6.3 速度提升不明显
这种情况通常是因为你所在的地区到Cloudflare节点也不理想。可以尝试在Worker代码中指定优选数据中心:
const response = await fetch(newRequest, { cf: { colo: 'HKG' // 香港节点 } })其他可选节点包括SIN(新加坡)、NRT(东京)等,需要根据实际网络情况测试。我写了个简单的测速脚本,可以快速找到最适合你网络的节点。
7. 安全注意事项
虽然这个方案很方便,但要注意几个安全要点:
- 不要公开你的Worker服务地址,避免被他人滥用导致额度耗尽
- 定期检查Cloudflare控制台的用量统计
- 重要项目的推送操作还是应该使用原始Git地址
- 如果发现异常流量,及时在Worker设置中开启验证码挑战
我自己的做法是为Worker添加简单的Basic Auth验证,虽然多了一步认证,但能有效防止爬虫滥用。实现方法是在Worker代码开头添加:
const BASIC_AUTH = 'username:password' const AUTH_HEADER = 'Basic ' + btoa(BASIC_AUTH) if (request.headers.get('Authorization') !== AUTH_HEADER) { return new Response('Unauthorized', { status: 401, headers: { 'WWW-Authenticate': 'Basic realm="Secure Area"' } }) }这样使用时需要在URL中带上认证信息,如:
https://username:password@git.yourname.workers.dev/https://github.com/...