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

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

  • 随意下载仓库验证

相关推荐
子兮曰3 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰3 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
爱勇宝3 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
Winlifes3 天前
我给 Codex 做了一个 Git 面板:分支树、提交历史和工作区操作
git
胡写代码3 天前
别再前后端各写一套表单校验了
java·后端
大勇前进3 天前
原生 PHP 还是 Laravel?小项目到底要不要上框架
后端
yuzhi_liu3 天前
我用 LangGraph4j 实现 Multi-Agent Supervisor
后端
alsmile3 天前
Node-RED 之外,国产规则引擎的新方案:基于标准语法,Go 先行实现
后端·开源·go
大白803 天前
PHP 内存溢出排查思路:看懂报错日志,精准定位问题
后端
二月龙3 天前
PHP 接口返回统一响应封装,让前后端对接更省心
后端