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

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

  • 随意下载仓库验证

相关推荐
洛卡卡了2 小时前
当上传不再只是 /upload,我们是怎么设计大文件上传的
后端·面试·架构
oak隔壁找我2 小时前
Spring AI 实现MCP简单案例
java·人工智能·后端
吴祖贤2 小时前
5.2 Spring AI OpenAI 嵌入模型
后端
爱叫啥叫啥2 小时前
C语言核心概念详解:指针的解引用,基本指针运算`*p++` 和 `(*p)++` 的区别
后端
申阳2 小时前
Day 9:07. 基于Nuxt开发博客项目-工具箱整理
前端·后端·程序员
jtymyxmz3 小时前
1.1.4 Spring的下载及目录结构
java·后端·spring
robch3 小时前
Spring 的 DelegatingFilterProxy 用法
java·后端·spring
CodeSheep3 小时前
稚晖君公司的最新工资和招人标准
前端·后端·程序员
ashane13143 小时前
Springboot 启动过程及源码分析
java·spring boot·后端