從 gogs 遷移到 gitea


官方支持文檔: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,不需要運行,有文件存在就行)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM