适合个人用的代码托管平台

代码托管平台 是开发代码不可或缺的一个支撑工具,统一保存代码,方便查看,在不同电脑上方便拉取,进而开发或者部署。

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

  1. 登录 Gitea,进入 Settings → Applications
  2. 生成一个 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
  1. git init:初始化一个 Git 仓库。
  2. --bare:表示新仓库不需要工作目录,只建立 Git 数据目录。
  3. [仓库名].git:指定仓库名,比如仓库名是example,那么就要建立一个叫做example.git的 Git 数据目录。

其他平台

最知名的同性交友网站:GitHub

国内:Gitee

其他:GitlabBitbucketCodeberg

跨多个代码平台(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 交流依文章步骤遇到的问题。

评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇