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下的一级文件夹名称),逐个添加仓库

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

  • 随意下载仓库验证

相关推荐
小周在成长10 小时前
Java 静态变量(Static Variables)指南
后端
加瓦点灯10 小时前
我用 AI,一天就把一个桌面提醒插件撸完了
后端
红色石头本尊10 小时前
27-集成swagger接口文档
后端
嘻哈baby10 小时前
Linux系统性能排查实战指南:从定位到解决
后端
开心就好202510 小时前
使用开心上架上架 App Store,一次跨平台团队的完整发布流程调度记录
后端
南囝coding10 小时前
《独立开发者精选工具》第 023 期
前端·后端·开源
文心快码BaiduComate11 小时前
Agent如何重塑跨角色协作的AI提效新范式
前端·后端·程序员
C***u17611 小时前
Spring Boot 实战篇(四):实现用户登录与注册功能
java·spring boot·后端
摇滚侠11 小时前
零基础小白自学 Git_Github 教程,分支合并,笔记13
笔记·git·github
Java水解11 小时前
# SpringBoot权限认证-Sa-Token的使用与详解
spring boot·后端