[ AWS ] SVN 轉移至 Git
05 Nov 2021
目的
將 SVN 連同 commit 都轉移至 Git
難點
- 在更新時,不中斷 SVN 上正在開發的專案
- 準備一個中繼站,作為持續 Migrate 的角色。當 svn 被更新時,中繼站用
git svn rebase更新 svn 最新的 commit ,再用git push更新到 remote git repo,屆時,開發人員就可以改用git clonemigrate 好的 Git,把原本的 svn project 刪除,其他開發的 member 也可以透過git pull更新最新版本的 Git,該 member 原有的 svn 就立即停止使用。中繼站也是作為這個媒介直至所有 repo 都轉移完成為止。
- 準備一個中繼站,作為持續 Migrate 的角色。當 svn 被更新時,中繼站用
- 到了 Git 後還要保有,SVN commit 紀錄
- 基本
git svn clone就可以保有 commit 紀錄,再藉svn log -q透過awk編輯器將 svn 上的作者都整理成一份清單,在git svn clone時,將對應的作者與 commit 串連
- 基本
中繼站準備
- 安裝 Git
- 取得作者清單
svn checkout svn://....svn log -q | awk -F '|' '/^r/ {gsub(/ /, "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > users.txt
Migrate 步驟
-
Clone Repo
git svn clone --trunk=/Trunk --tags=/Tag --branches=/Branch --authors-file=authors.txt [http://svn/url/www](http://<svn-remote>) www -
Create Git Remote endpoint origin
git remote add origin <repository-url> -
Convert ignore file
git svn show-ignore > .gitignoregit add .git commit -m "convert ignore file" -
Push to endpoint
git push -u origin master
狀況處理
- Migrate 完成後 SVN 再被更新,導致新的 Git repo 也要被更新
git svn rebasegit pull origin master --rebase整線git push