官方支持文檔:https://docs.gitea.io/zh-cn/upgrade-from-gogs/
0、一開始因為 gogs 很輕量,部署很方便選擇了它,但是因為最近 gogs 已經有段時間不更新了,使用過程中發現很多想要功能都沒有,用起來很不方便。最近發現還有 gitea 這么個項目,是 gogs 的分支,更新一直很活躍,並且還支持從 gogs 遷移,所以准備更換一下。但我使用的 gogs 版本:0.11.86.0130,並不是官方支持的遷移版本,所以遷移過程似乎有些曲折。
1、寫此文章時,最新的 gitea 版本為 1.12.1,該版本似乎以及不支持從 gogs 遷移了,遷移需要先使用舊版本(好像要:1.6.4,不過似乎只要是低於1.12 的都可以)遷移完成,再使用該版本。
2、官方是支持 0.9 以下版本,0.11 已經不能順利的遷移過來了,基本都是數據庫的問題,所以遷移過程中,報錯信息會具體指出缺少了哪個表,缺少了哪個字段,手動打開數據庫補上就可以了。
3、開始遷移以后,一定不要再運行 gogs 了,因為再次運行 gogs 可能會把數據庫搞亂,運行 gogs 后再運行 gitea 會導致重新進行遷移,會遇到很多問題(都是淚/(ㄒoㄒ)/~~),可以考慮做個備份移到其它地方,以免手欠。
4、遷移完成后,可能打開任何項目都是 404 頁面,應該是遷移過程中執行的不完整,在官方 issue 里有一個類似問題的解決方案,我試了下很管用:
https://github.com/go-gitea/gitea/issues/2906
insert into repo_unit ("repo_id", "type", "index", "config") select repository.id, types.*, '{}' from repository left join repo_unit on repository.id=repo_id left join ( select 1,1 UNION ALL select 2,2 UNION ALL select 3,3 UNION ALL select 4,4 UNION ALL select 5,5) as types on (1=1) where repo_id is null;
5、還有一個坑,在原來的 repositories 的各個 .git 文件夾中,有一個 hooks 文件夾,里面有兩個文件:
hooks\post-receive.d\post-receive
hooks\pre-receive.d\pre-receive
這兩個保留了 gogs 的 hook,但是 gogs 已經被刪除了,路徑找不到推送就會報錯,gitea 在執行任務時重新創建了一個叫 gitea 的文件,並沒有覆蓋掉原來 gogs 創建的文件,所以所有 git 庫中的這兩個文件都需要刪除一下(如果不想刪除,就不要刪除原來的 gogs,不需要運行,有文件存在就行)。