说明下gogs的搭建和迁移,搭建过程比较简单,资料也很多,不作为本文的重点。重点是说明一下如何迁移gogs,可以解决一下几个业务场景的迁移工作
理解了迁移的过程,想怎么迁移就怎么迁移
参考官方文档即可
https://gogs.io/docs/installation/install_from_binary
wget https://gogs.io/docs/installation/install_from_binary
tar -zxvf gogs_0.11.91_linux_amd64.tar.gz
## 启动
./gogs web &
请查看log确认启动成功
2020/04/28 14:27:09 [ INFO] Gogs 0.11.91.0811
2020/04/28 14:27:09 [ INFO] Cache Service Enabled
2020/04/28 14:27:09 [ INFO] Session Service Enabled
2020/04/28 14:27:09 [ INFO] Git Version: 1.8.3.1
2020/04/28 14:27:09 [ INFO] SQLite3 Supported
2020/04/28 14:27:09 [ INFO] Run Mode: Production
2020/04/28 14:27:09 [ INFO] Listen: http://0.0.0.0:3000
./gogs backup --help
--config value, -c value 指定配置文件位置 path (default: "custom/conf/app.ini")
--verbose, -v 查看过程
--tempdir value, -t value 指定临时空间 (default: "/tmp")
--target value 备份文件存储位置 (default: "./")
--archive-name value 备份文件名字 (default: "gogs-backup-20200428143439.zip")
--database-only 是否只迁移数据库
--exclude-repos 不迁移那些仓库
./gogs restore --help
OPTIONS:
--config value, -c value 指定配置文件位置(default: "custom/conf/app.ini")
--verbose, -v 查看过程
--tempdir value, -t value 指定临时空间 (default: "/tmp")
--from value 指定数据源(必须)
--database-only 只迁移数据库文件
--exclude-repos 不迁移那些仓库
# 全部备份(常用)
./gogs bakcup
# 部分备份(数据太大时)
./gogs backup --exclude-repos
# 制定配置文件
./gogs backup --config=my/custom/conf/app.ini
# 全部导入
./gogs restore --config custom/conf/app.ini --from gogs-backup-20200428101740.zip
# 只导入数据库文件
./gogs restore --database-only --config custom/conf/app.ini --from gogs-backup-20200428101740.zip
–config custom/conf/app.ini 指定导入仓库用到的配置文件,否则使用压缩包中的默认配置文件
–database-only 只导入数据库
例如如何把mysql数据库迁移到pgsql
方案:修改配置文件后,直接指定新的配置文件导入数据库。然后启动gogs
## 只备份数据库
./gogs backup --database-only
## 只导入数据库,配置文件指定新的数据库连接
./gogs restore --database-only --config custom/conf/app.ini --from gogs-backup-20200428101740.zip
需求:我需要把其他git的仓库迁移到gogs中,源仓库可能是gogs也可能是github,这种场景可以通过下面方法解决
# 把旧仓库被分成本地git文件目录
git clone --mirror 旧的git地址
# 推动本地目录到新的地址
cd xxx.git
git push --mirror 新的git地址
以上就完成了单个仓库的迁移
[FATAL] Failed to import 'custom': rename /tmp/gogs-backup/custom /data/gogs/gogs/custom: invalid cross-device link
原因:回复过程需要用到临时文件夹,默认的临时文件在/tmp下,但是我的系统/tmp和/data是两个硬盘,不能建立硬链接
解决: 指定–tempdir参数–tempdir /data/tmp
./gogs restore --config app.ini --from gogs-backup-20200428101740.zip --tempdir /data/tmp
报错需要administrator用户,linux系统没有这个用户
原因:从windows导出数据时默认配置文件的用户是administrator
解决:自定义配置文件后,通过–config app.ini 指定配置文件导入,参考上面例子
还有一个场景暂时没找到合适的方法,就是如何直接合并两个gogs,暂时可以选择一个主仓库,把第二个仓库导入。如果实在需要可以考虑直接合并两个gogs的数据库文件,然后修改数据库的方式,这种方式有点风险,慎重选择