[ AWS ] SVN 轉移至 Git
05 Nov 2021目的
將 SVN 連同 commit 都轉移至 Git
難點
- 在更新時,不中斷 SVN 上正在開發的專案
- 準備一個中繼站,作為持續 Migrate 的角色。當 svn 被更新時,中繼站用
git svn rebase
更新 svn 最新的 commit ,再用git push
更新到 remote git repo,屆時,開發人員就可以改用git clone
migrate 好的 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 > .gitignore
git add .
git commit -m "convert ignore file"
-
Push to endpoint
git push -u origin master
狀況處理
- Migrate 完成後 SVN 再被更新,導致新的 Git repo 也要被更新
git svn rebase
git pull origin master --rebase
整線git push