代码托管平台 是开发代码不可或缺的一个支撑工具,统一保存代码,方便查看,在不同电脑上方便拉取,进而开发或者部署。
Gitea
Gitea 是一个开源的、轻量级的代码托管平台,专为开发者和小型团队设计,简单、高效、功能齐全且资源占用低。
- 基于 MIT 许可证,社区驱动开发,代码托管在 GitHub 上。
- 使用 Go 语言编写,跨平台支持(Windows、Linux、macOS 等),部署简单,资源占用低(适合单核 CPU + 1GB 内存的服务器)。数据库默认使用 SQLite,也支持 MySQL、PostgreSQL。
Gitea 其实是 Gogs 的孪生兄弟,因为这是从 Gogs 源码的基础上开发的,算是分叉。原因基本上就是有一部分开发者认为 Gogs 的开发者效率比较慢,而且不接受他人加入开发,所有修改和 PR 都需要经过他一个人的审核,这对 Gogs 的发展很不利。因而部分开发者决定基于 Gogs 重开一个项目。
官网: Gitea – Lightweight DevOps Platform
服务端安装: 代码托管平台 Gitea 的安装步骤 – 技焉洲 [[Gitea]]
Gitea 由于成立了商业公司,导致社区分裂。一部分开发者出走,创立了 Forgejo 这个项目: Forgejo – Beyond coding. We forge. 。不过由于我早就在用 Gitea,也就继续用了。
使用说明
使用 curl 获取 Gitea 私有仓库的原始文件
生成 Personal Access Token
- 登录 Gitea,进入 Settings → Applications。
- 生成一个 Token,勾选
repo权限(确保能访问私有仓库)。
将 Token 放在请求头中:
curl -H "Authorization: token YOUR_ACCESS_TOKEN" \
"https://gitea.example.com/owner/repo/raw/branch/path/to/file.txt"
镜像仓库
其实 Gitea 内置了很多包管理,比如 debian、docker、go、pypi、cargo、rpm: https://docs.gitea.com/usage/packages/overview ,也就是说,如果你需要一个私有的 docker 镜像仓库或者 Python 的包管理仓库,Gitea 本身就能做到。
特别要注意,软件包的关联是在某个用户或组织下面,而不是某个具体的仓库下,软件包的可见性同用户的可见性。因此,如果你的用户是公开的,而你又上传了一个镜像,则任何人都是可以读取这个镜像的。
所有软件包默认都是可用的,无须额外去开启。
下面以 docker 镜像为例,说明如何上传镜像和拉取镜像。文档: https://docs.gitea.com/usage/packages/container
首先进行登录,如果这个仓库所属的用户是公开的,则不需要登录就能拉取。
docker login gitea.vfly2.com
上传。镜像名称必须包含这四个元素 {registry}/{owner}/{image}:{tag}
docker push gitea.vfly2.com/testuser/my_image:latest
下载
docker pull gitea.vfly2.com/testuser/my_image:latest
镜像是分层的,每个镜像都是一层一层叠加而成,镜像仓库存储的其实是层,因此,不用太担心上传太多版本的镜像会导致存储空间占用过多,因为同一个项目的镜像,其底层的层往往是共用的,只需要存一份。
还有,每一次上传镜像,最好上传两次,每次的 tag 不同,一个具体的版本号,一个 latest ,这样,在用这些镜像时,指定 latest 就不用每次更新还要改版本号了。(虽然上传了两次,但由于这两个镜像一模一样,所以占据的空间只有一份)
CICD
让 Gitea 集成 Woodpecker 这个引擎:自托管 Gitea 集成 Woodpecker CI/CD | Dejavu’s Blog [[Woodpecker]]
访问 Woodpecker 域名,进入 Gitea 应用授权页面,即可完成最终授权
https://woodpecker.cufah.cloud/authorize
最后,简单测试下 CI 是否正常工作。
在 Woodpecker 添加一个仓库,然后在这个仓库添加 CI 脚本 .woodpecker/ci-test.yaml
when:
- event: push
branch: main
steps:
- name: node-build
image: node:20-alpine
commands:
- echo "Running Node.js test..."
- node -e 'console.log("Hello, world! from Node.js")'
- echo "CI test success! Dejavu Moe says hello to you"
推送后,查看 Woodpecker 里对应仓库的流水线日志,如有输出以上内容,则代表运行正常。
通过 SSH 把仓库推到远程服务器
Git 默认支持两种传输协议:SSH 和 HTTP/HTTPS ,Linux 服务器一般都自带 SSH,因此只要在远程服务器上,建立同名的 Git 仓库,服务器就搭建好了
执行下面这条命令以后,一个最简易的 Git 服务器就诞生了。后面,可以通过 SSH 连接,把本地代码推送到这个远程 Git 仓库了。
git init --bare [仓库名].git
git init:初始化一个 Git 仓库。--bare:表示新仓库不需要工作目录,只建立 Git 数据目录。[仓库名].git:指定仓库名,比如仓库名是example,那么就要建立一个叫做example.git的 Git 数据目录。
其他平台
最知名的同性交友网站:GitHub
国内:Gitee
跨多个代码平台(GitHub、GitLab、Gitea 或 Gerrit)为所有存储库和分支编制索引,并使用极快的界面搜索它们: sourcebot-dev/sourcebot: The open source Sourcegraph alternative. Sourcebot gives you a powerful interface to search though all your repos and branches across multiple code hosts. 。
原文链接: https://yanh.tech/2025/04/19/code_hosting_services
版权声明:本博客所有文章除特別声明外,均为 AhFei 原创,采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 技焉洲 (yanh.tech) 。
保持更新 ٩(•̤̀ᵕ•̤́๑)ᵒᵏᵎᵎᵎᵎ 清晰恒益的实用技能,欢迎使用 RSS 订阅,如果能留言互动就更好了。
可在 Telegram 群组 https://t.me/vfly2 交流依文章步骤遇到的问题。
评论