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 分钟前
我用 NestJS + Vue3 + Prisma + PostgreSQL 打造了一个企业级 sass 多租户平台
前端·vue.js·后端
用户8356290780512 分钟前
Python 操作 Excel:从基础公式到动态函数生成
后端·python
开心猴爷5 分钟前
uni-app 项目在 iOS 上架过程中常见的问题与应对方式
后端
AntoineGriezmann8 分钟前
Git:新建功能分支并解决 Merge 冲突
git
大学生资源网26 分钟前
基于springboot的乡村信息化管理系统的研究与实现(源码+文档)
java·spring boot·后端
马卡巴卡1 小时前
Java线程协作工具:CountDownLatch 、CyclicBarrier、Phaser、Semaphore 、Exchanger
后端
Java水解1 小时前
Spring Bean生命周期深度剖析:从创建到销毁的完整旅程
spring boot·后端
Json_1 小时前
springboot框架对接物联网,配置TCP协议依赖,与设备通信,让TCP变的如此简单
java·后端·tcp/ip
+VX:Fegn08951 小时前
计算机毕业设计|基于springboot + vue职位管理推荐系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
王中阳Go1 小时前
06 Go Eino AI应用开发实战 | Eino 框架核心架构
人工智能·后端·go