零依赖自建 Git 服务 Gogs:双平台单文件 93MB,SQLite 免配置数据库,推拉仓库开箱即用
不少小团队的合作方式还停留在「压缩包发来发去」:改一份代码要靠文件名带 v2、v3、最终版区分,谁动过哪一行全靠口头说。想上专业的代码托管,主流平台要么按人头收费,要么把私有仓库的数量和协作人数卡在免费额度上;直接把代码传到别人的服务器上,很多公司因为合规要求又根本不允许。其实这个问题的解法很朴素——自己找台内网机器或低配服务器,跑一个轻量的 Git 服务,数据完全握在自己手里。
Gogs 就是冲着这个需求来的:用 Go 语言写的自建 Git 服务,整个服务就一个可执行文件。Windows 侧实测 gogs.exe 93.2MB、Linux 侧 92.3MB,依赖只有系统里装好的 Git 本身。数据库支持 SQLite,我实测建库后的 gogs.db 只有 385KB,也就是说从解压到拥有一个能建仓库、能推代码的完整 Git 服务,全程不需要装 MySQL、不需要 Docker、不需要配置环境。它自带的 Web 界面覆盖了仓库浏览、提交历史、工单、Pull Request、Wiki 和管理后台,日常团队协作需要的都在。
发布前我把它在 Windows 11 和 WSL2 两个平台上各完整跑了一遍:启动、初始化管理员、建仓库、git clone、commit、push、页面访问全部成功,两侧产物结构和版本一致。文章里会给出真实测到的启动耗时、建仓耗时和推送耗时,也会讲清楚它不适合哪几类人,以及我实际踩到的一个推送被拒的坑。
它是什么 / 和别的自建方案差在哪
Gogs 是一个可以在自己机器上运行的 Git 托管服务:网页端管理仓库和用户,底层走标准 Git 协议,clone、push、pull 和操作普通仓库没有任何区别。它的核心卖点有三条:
- 单文件。一个可执行文件加系统里的 Git 就是全部,实测 Windows 版 93.2MB。备份就是把数据目录打包,迁移就是拷走再启动。
- 数据库可选 SQLite。个人或小团队直接用 SQLite,零安装零配置;人多之后也随时能切到 MySQL 或 PostgreSQL,配置文件改几行。
- 资源占用低。我在 2 核 1.6GB 的低配环境里也跑得动。我的实测环境里,建仓库加首次提交用了 1.89 秒,git push 一次 1.44 秒,这对 1 核 1G 的最低配 VPS 来说完全够用。
和同类自建方案比:大型的一体化平台功能全但要跑一堆服务、吃 2G 以上内存,小机器装不动;轻量脚本级的方案只有最简单的 Web 预览,没有工单、PR 和用户体系。Gogs 卡在中间这个位置——功能覆盖团队协作的主干,同时保持单文件的部署成本。如果你后面想要更丰富的插件生态和持续集成,可以先用 Gogs 起步,数据都是标准 Git 裸仓库,迁移成本很低。
我的测试环境
- Windows 11,gogs.exe 版本 0.14.3(93,170,688 字节),系统 Git。
- WSL2 Debian,gogs Linux 版本 0.14.3(92,318,473 字节)。
- 数据库两侧都用 SQLite。
- 客户端操作用系统自带 git 命令行。
安装:Windows
下载包里的压缩包解压,0.47 秒解完,得到 17 个文件:gogs.exe、LICENSE、两份 README 和 scripts 目录(systemd、Windows 服务等启动脚本都在里面)。
首次启动在解压目录执行:
./gogs.exe web默认监听 3000 端口,浏览器打开会进入安装引导页。我实测首次启动到首页返回 200 只用了 0.42 秒。
安装页里把数据库类型选 SQLite3,仓库根目录、日志目录建议直接写绝对路径,再注册一个管理员账号,提交后就能用。想跳过引导页的话,直接在 custom/conf/app.ini 里写完整配置并把 INSTALL_LOCK 设为 true 也可以,两种方式我各走了一遍,结果一致。
跳过引导的话,配置文件里这几段是关键:
[database]
DB_TYPE = sqlite3
PATH = D:/gogs/data/gogs.db
[security]
INSTALL_LOCK = true
[repository]
SCRIPT_TYPE = sh
ROOT = D:/gogs/git-repo安装:Linux
Linux 侧拿到 tar.gz 后三步:
tar -xzf gogs_linux_amd64.tar.gz
cd gogs
./gogs webWSL2 实测启动到首页 200 耗时 1159 毫秒。生产环境建议用包里 scripts 目录自带的 systemd 服务文件托管,开机自启;注册管理员用自带的命令行:
./gogs admin create-user --name admin --password 你的密码 --admin --email admin@example.com建仓库到推代码:4 步上手
- 登录后右上角新建仓库,填名字即可,我实测带 initial commit 的建仓耗时 1.89 秒。
- 本地 clone:git clone 指向服务地址的仓库 URL,实测 1.73 秒完成。
- 改文件后 commit,然后 git push,实测推送 1.44 秒,日志显示 HEAD -> master 成功。
- 网页上刷新仓库页,提交历史、代码浏览、README 渲染全部就位。
私仓权限是它做得细的地方:未登录访问私有仓库直接返回 404,不是 403——对搜索引擎和陌生探测来说,这个仓库等于不存在。
实测数据
- 解压耗时(Windows):0.47 秒,17 个文件
- 可执行文件体积:Windows 93.2MB / Linux 92.3MB
- 首次启动到首页 200:Windows 0.42 秒 / WSL2 1.16 秒
- 建仓库(含 initial commit):1.89 秒
- git clone:1.73 秒;git push:1.44 秒
- SQLite 建库后体积:385,024 字节(两侧完全一致)
- 页面访问:首页 / 探索 / 仓库页 / 提交历史 / 工单 / 设置全部 200
- 截图过程 0 个 4xx/5xx 响应、0 个 JS 报错
界面长什么样






界面是经典的深色顶栏 + 白底内容区布局,信息密度高但不花哨,操作路径都符合 Git 托管工具的通用习惯。手机端排版正常,仓库页在 390 宽的屏幕上代码块没有横向溢出。
一个真实的坑:push 全部被拒绝
第一次配完仓库我 push 时被拒,报错指向钩子脚本。排查后发现是 Windows 配置里 SCRIPT_TYPE 的锅:它必须写 sh(走 Git 自带的 bash 执行钩子),我照着直觉写了 windows,结果 Gogs 生成的钩子第一行变成一个不存在的解释器路径,所有推送直接失败。把这一项改回 sh、重新保存设置后推送立刻正常。这个坑的根源是钩子脚本要靠 Git 自带的 bash 来跑,而不是 Windows 的 cmd。如果你在 Windows 上遇到 push 秒拒,先检查这一项。
顺带一个次一级的坑:INSTALL_LOCK 这种开关必须和完整配置一起写,只写一个开关会导致启动时数据库类型识别失败。配置文件要一次写全。
上线 / 部署建议
- 小团队内网:一台常开机器跑 gogs web,数据目录定期打包备份即可。
- 公网 VPS:用 systemd 托管 + Nginx 反代 3000 端口,建议把注册功能关掉或开管理员审批,避免被陌生人占用资源。
- 备份很简单:停服务后打包 data 目录、git-repo 目录和 custom 目录三处,恢复就是解压回原路径再启动。
这几类人适合,这几类不适合
适合:想在自己服务器上放私有仓库的小团队;公司内网需要合规自托管的环境;给低配 VPS / 树莓派找轻量 Git 服务的个人开发者;教学或实验室里需要学生各自提交代码的场景。
不适合:需要内置 CI/CD 流水线的团队(它不含持续集成,要自己外挂);重度依赖插件生态和第三方应用的团队;多人协作超过几百人、需要精细权限矩阵的组织,这类建议直接上更重的平台。
常见问题
{collapse-item label="一定要装 MySQL 吗?"}A:不用。个人和小团队直接选 SQLite3,建库文件实测 385KB,零配置。数据量大了再切 MySQL / PostgreSQL。{/collapse-item}
{collapse-item label="没有公网 IP,家里能自建吗?"}A:可以,内网机器 + 内网穿透就能让外网伙伴 push。数据在你自己机器上,服务端不经过第三方托管。{/collapse-item}
{collapse-item label="升级版本麻烦吗?"}A:单文件的升级就是替换可执行文件,数据目录不动。升级前照例备份一次 data 和 custom 目录。{/collapse-item}
{collapse-item label="和用 Git 裸仓库 + SSH 有什么区别?"}A:裸仓库方案没有网页界面,权限靠系统账号管理。Gogs 提供网页浏览、工单、PR、Wiki、用户与组织体系,协作体验完全不同。{/collapse-item}
{collapse-item label="默认端口可以改吗?"}A:可以,配置文件的 server 段改 PORT 即可;公网部署建议前面挂 Nginx 反代并配 HTTPS。{/collapse-item}
源码获取
本次整理的 Windows 与 Linux 双平台包已上传到网盘:
下载后建议先转存到自己的网盘账号,防止分享链接后续失效。