轉:http://beginor.github.io/2013/03/12/migrate-from-svn-to-git.html

準備工作

確認所有用戶的本地修改都簽入到服務器, 將 SVN 源代碼的分支盡可能的合并到主干, 已經發布的做好歸檔信息, 并備份 SVN 庫。 雖然遷移到 Git 的風險不大, 但是備份一下總是好的。

安裝 Git , 這看起來是廢話, 不裝 Git 怎么遷移?

將用戶映射到 Git

創建一個用戶映射文件, 將 SVN 用戶映射到 Git 用戶, 這樣可以保留用戶的簽入歷史信息, 比如用戶輸入的修改記錄等, 這個文件看起來是這樣子的:

svnuser1 = gituser1 <gituser1@yourcompany.com> svnuser2 = gituser2 <gituser2@yourcompany.com> 

這樣, 用戶 svnuser1 簽入的歷史信息在遷移之后就會映射成 gituser1 , svnuser2 映射程 gituser2 。

編輯好用戶映射文件之后, 保存為 users.txt 。

克隆 SVN 庫

假設 svn 庫的布局是標準的 trunk 、 branches 以及 tags , 運行下面的命令開始克隆 svn 庫:

git svn clone <svn repo url> --no-metadata -A users.txt -t tags -b branches -T trunk <destination dir name> 

Git 會克隆 svn 完整的歷史記錄, 可能會需要很長的時間, 視 svn 庫的歷史而定。

轉換分支及歸檔

克隆完成之后, 所有的 svn 歸檔在 git 看來都是遠程分支 (remote tags) , 不是真正的 git 歸檔, 需要將他們手工轉換為 git 歸檔, 然后再刪除遠程分支, 對于每一個分支或歸檔, 做如下操作(以 v1.0.1 歸檔為例):

git tag v1.0.1 tags/v1.0.1 git branch -r -d tags/v1.0.1 

所有的歸檔信息處理完成之后, git 本地庫就有了完整的歷史記錄。

提交到 Git 庫

現在可以放心的將代碼提交到自己的 git 服務器了, 命令如下:

git remote add origin git@github.com:userid/project.git git push origin master --tags 

總的來說, 從 svn 遷移到 git 還是很容易的。