Gogs迁移到Gitea不完全指南

Gogs迁移到Gitea不完全指南

大家如果有用过Gogs就会发现它已经很久没有啥版本更新了,相比较而言,Gitea的更新频率相对较高一些,社区文档也更完善。但有一点比较头疼的是老旧仓库迁移一是比较琐碎;二则commit activities 等等都消失了,今天就给大家分享一个野路子, 基本思路如下:

  • 从gogs 导出数据并解压、提取导出数据中的repositories.zip
  • 上传repositories.zip文件到Gitea容器并解压
  • 通过Gitea的管理页面识别并重新关联仓库

本文以两者环境均为docker容器为例,主要涉及容器版本:

  • gogs/gogs:latest
    • version: 0.14.0+
    • sha256: b9b164e0dc299185af6079adde3eed693da55b920887aee92eda19d36030d416
  • docker.gitea.com/gitea:1.25.1
    • version: 1.25.1
    • sha256: dbb4b148024bc4462c39332acbdeace8f12cee5646a4e46db75c1d16aa4eaf4b

Gogs数据导出

进入gogs容器后,默认情况下数据文件在 /data目录下,实际的文件结构如下

plaintext 复制代码
data
├── git
│   └── gogs-repositories
│       ├── gogs
│       │   ├── download.git
│       │   ├── electron-vite-vue.git
│       │   ├── gogs.git
│       └── nobody
├── gogs
│   ├── conf
│   │   └── app.ini
│   ├── custom
│   │   └── conf
│   │       └── app.ini
│   ├── data
│   │   ├── avatars
│   │   │   └── 3
│   │   └── sessions
│   └── log
│       ├── gogs.log
│       ├── gorm.log
│       ├── hooks
│       │   ├── post-receive.log
│       │   ├── pre-receive.log
│       │   ├── update.log
│       │   └── xorm.log
│       └── xorm.log
└── ssh
    ├── ssh_host_dsa_key
    ├── ssh_host_dsa_key.pub
    ├── ssh_host_ecdsa_key
    ├── ssh_host_ecdsa_key.pub
    ├── ssh_host_ed25519_key
    ├── ssh_host_ed25519_key.pub
    ├── ssh_host_rsa_key
    └── ssh_host_rsa_key.pub

43 directories, 18 files

通过 gogs的 backup 命令进行备份的话默认目录结构如下:

plaintext 复制代码
gogs-backup
├── custom
│   ├── conf
│   │   └── app.ini
│   ├── custom
│   │   └── conf
│   │       └── app.ini
│   └── log
│       ├── gogs.log
│       ├── gogs.log.2022-11-06
│       ├── gorm.log
│       ├── gorm.log.2022-11-06
│       ├── hooks
│       │   ├── post-receive.log
│       │   ├── pre-receive.log
│       │   ├── update.log
│       │   └── xorm.log
│       ├── xorm.log
│       ├── xorm.log.2022-11-06
├── data
│   └── avatars
│       └── 3
├── db
│   ├── TeamRepo.json
│   ├── TeamUser.json
├── metadata.ini
└── repositories.zip
10 directories, 49 files

如果指定了 command options ,则会删减部分内容,大致如下:

  • exclude-mirror-repos 不备份外部仓库
  • exclude-repos 完全不备份 仓库
  • database-only 只备份db数据
shell 复制代码
mkdir -p /backup/file
su git
cd /backup
c94803f5f8bf:/backup$ /app/gogs/gogs backup -v --tempdir ./tmp --target ./file 
# exclude-mirror-repos
# c94803f5f8bf:/backup$ /app/gogs/gogs backup -v --tempdir ./tmp --target ./file --exclude-mirror-repos

导出文件的命名格式为: gogs-backup-20251111070003.zip ,我们解压文件后可以看到两种备份方式的主要区别是有无ssh密钥配置,建议备份数据后通过此方式再次进行备份,避免数据丢失

shell 复制代码
cd /backup/file
tar -cf tar_data_20251111.tar /data

完成备份之后退出容器,并通过 docker cp 复制文件到宿主机即可

Gitea数据导入

创建容器后首次进入页面需要配置Gitea,注册Gitea账号时建议使用gogs的管理员账号,导入数据后可任意添加

通过docker cp 复制gogs-backup-20251111070003.zip 文件中的 repositories.zip 登录gitea容器并切换到/app/gitea 或者 /tmp目录下

  • 解压缩repositories.zip文件
    • unzip repositories.zip
  • 修改文件权限
    • chown -R git:git gogs-repositories
  • 挪动文件到/data/git/repositories目录
    • 一定要确认目录下是否为空,避免覆盖数据

通过Gitea管理页面添加仓库

  • 通过ip或者配置的域名登录管理员账号,按图示进入gitea 仓库管理面板-未收录仓库

  • 搜索指定账号(即为repositories.zip下的一级文件夹名称),逐个添加仓库

  • 随意进入其中一个仓库验证

  • 随意下载仓库验证

相关推荐
panbook18 小时前
从0到1实现一个分布式时序数据库(三):主从复制、故障检测与切换
后端
上线再说18 小时前
图片从 8.2MB 压到 296KB:我把小程序图片链路的账单拆了一遍
后端
dpharness18 小时前
我原以为 MCP 装完就能用,直到工具列表是空的
后端
dpharness18 小时前
153 个 MCP 服务,我把工具数一个个数了一遍
后端
打工仔折腾 AI21 小时前
Changedetection.io 网页变动监控:Docker 部署、通知配置与公网暴露实践
运维·人工智能·后端·python·docker·容器·性能优化
SomeOtherTime21 小时前
Rust 闭包语法和原理(AI回答)
开发语言·后端·rust
初学AI的小高1 天前
Agent 工具太多怎么办:BM25 检索、依赖补全与按需加载实战
后端·agent
用户6602676118791 天前
AI 代码上线前的第 24 道门禁:上线失败时,怎样在 10 分钟内退回?
后端·架构
NishikiAsumi07211 天前
一次170万行的导出:sql优化远没有加索引这么简单
后端