不過在開發專案時,難免還是會碰到,許多專案必須使用 SVN 的困境,還好先進的 Git 提供 git-svn 的橋接工具,讓你可以在自己的電腦上使用 Git 管理,但是專案的遠端版本管理仍繼續維持 SVN 伺服器。
我們就別談 Git 哪邊比 SVN 好,先來看看使用 git-svn 有哪些好處吧?
- 使用 Git 做 diff / merge 比較輕鬆容易又方便
- 在 Local 端可以多次 Commit,不必每次的 Commit 都要 Push 到伺服器
- 離線狀態仍然可以繼續 Commit... Commit...
- 和支援 Git 的 IDE 完美合體
- 在 Local 端可以輕鬆開 Branch 做實驗性的程式修改
- 除了發佈到一份 SVN Repository,還可以同時 Push 到其他"多份" Git Repository 分散式保存(備份!)
- ... 以及更多的好處請自行體驗。
以下是我自己使用 git-svn 的 SOP,目前用了兩個月過程還算沒啥大問題。
新建專案
在建立 Local Repository 的時候,建議是以 SVN 為主,利用 git svn 從 SVN 主機取出程式碼。
git svn clone https://SVNSERVER/svn/trunk/ git-svn-test-only
如果是已經很老的陳年 Repository,上面的指令可能執行到天荒地老還沒跑完,可以指定只取出最後的 Revision。
git svn clone -r HEAD https://SVNSERVER/svn/trunk/ git-svn-test-only
進入專案資料夾(不解釋)。
cd git-svn-test-only
新建一個檔案(測試ONLY)。
echo hello > readme.md
加入新檔案(測試ONLY)。
git add readme.md
建立一個新的 Commit(只是在 Local 做 Commit,不會送出給 Server,事後還可以反悔)。
git commit -a -m 'first commit'
每次 Commit 到 SVN 之前,要先做 rebase 保平安。
git svn rebase
看到以下的訊息就可以鬆一口氣。
Current branch master is up to date.
放心地將 Commit 發送到 SVN 伺服器,這個指令會真的做 Push 喔(不能反悔)!!!
git svn dcommit
增加遠端 Git 伺服器
只靠 SVN 伺服器,萬一哪天好死不死 Local 資料誤刪,然後伺服器也剛好掛點,程式碼就會從地球上消失。
增加多個遠端 Git 伺服器,除了在大型的多團隊協作專案可能會有需要外,也可以拿來當專案程式碼的異地備援,求個永保安康。
以 GitHub 建立的 Git Repository 為例,利用 git remote add 加入專案中。
git remote add github git@github.com:GITUSER/git-svn-test-only.git
先從遠端取得已經存在的資料(如果有)。
git fetch github
先在 Local 端做一次 Merge 合併 SVN 和 Git Repository 兩邊的檔案。
git merge github/master
將異動提交給 SVN。
git svn rebase
git svn dcommit
也送一份到 Git。
git push github master
每次改程式的事後指令
就像平常使用 Git 一樣加入新增的檔案。
git add src/*
就像平常使用 Git 一樣先做 Commit。
git commit -a -m 'some comments'
記得先做 svn rebase。
git svn rebase
將 Commit(s) 送給 SVN 伺服器。
git svn dcommit
將 Commit(s) 送給 Git 伺服器。
git push github master