興趣部落的 Git 遷移實踐

​由於歷史緣由,剛進小組時,組內主要利用 SVN 做爲興趣部落的代碼託管工具,最近組裏從新定義了一套代碼 Review 規範,而 SVN 不能知足咱們的需求,再加上公司的 Git 平臺已經成熟可用,咱們便萌生了將興趣部落的代碼從 SVN 遷移到 Git 上的念頭。通過幾天的努力,如今代碼已遷移完成,下面就把過程與總結寫下來供你們參考。git

方法1

​先介紹一個簡單粗暴的方法,TortoiseSVN 有自帶的 Export 功能,能夠將 SVN 的代碼所有導出到一個新的文件夾下。下面簡單描述下步驟,以 Github 爲例。bash

​先在 Github 上建一個 repository,並將之 clone 到本地,假設文件夾叫 A。而後找到你要遷移的 SVN 項目,右擊選擇 TortoiseSVN -> Export,選擇 A 文件夾,肯定後 SVN 項目中的代碼便到了 A 文件夾中,下面就能夠將這個項目當作通常的 Git 項目來對待了。svn

​說這個方法簡單粗暴,是由於這個方法其實跟將整個 SVN 項目的代碼直接複製粘貼到 Git 項目文件夾下沒多大差異,而且此次到 Github 上的提交會被當成整個項目的第一次提交,也就是之前的提交記錄沒有被遷移過來。工具

方法2

​若是你想作的完美一點,不只遷移代碼,還要遷移之前的提交記錄,那應該怎麼作呢?那就要用到 git-svn 了,詳細文檔請參考:git-svnurl

​使用 git svn clone your-svn-url your-target-folder 能夠將 SVN 的主幹代碼以及提交記錄拉取到了本地目標文件夾 your-target-folder 中。這種方式只能遷移一個特定文件夾的代碼(通常遷移 trunk)。但若是你不只想遷移主幹代碼,還想將 branch 和 tag 的代碼一併遷移,你可使用: git svn clone root-path --trunk="trunk/project" --branches=「branches」 --tags="tags"。須要注意的是,trunk、branches 以及 tags 的路徑是相對的。若是你的項目很龐大而且有很長的歷史,那麼遷移過程將會很是漫長(以天爲單位)。若是你遷移過程當中很幸運沒碰見程序出錯、電腦崩潰而最終成功的話,你能夠執行 git branch -a 看看分支狀況。由於咱們沒有遷移 branch 和 tag,因此不瞭解有什麼坑。spa

​新的文件夾是沒有 .gitignore 文件的,因此須要新建一個。code

​當準備工做都作好後,下面能夠將代碼提交到遠程倉庫中:xml

git remote add origin your-git-repository
git push -u origin master

用戶對應

​若是 SVN 的帳號和 Git 的帳號名稱不同,而且 SVN 中的帳戶就是一個 ID,而 Git 中的帳號是 username 和 email,SVN 的 ID 能夠和 Git 的 username 和 email 在遷移過程當中對應起來,具體作法以下:rem

// 在 SVN 項目根目錄:
svn log --xml | grep author | sort -u | perl -pe 's/.>(.?)<./$1 = /'

輸出一列 SVN 用戶列表,將之保存到 users.txt 中,而且修改帳號對應關係,格式以下:文檔

zhangsan = 張三 <zhangsan@tencent.com>
...
wangwu = 王五 <wangwu@tencent.com>

上面的 zhangsan 就是 SVN 的 ID,後面對應的就是 username 和 email。有了 users.txt 的帳號對應信息,下面能夠遷移了:

git svn clone your-svn-url --authors-file=users.txt your-target-folder

也就是在遷移命令中加入 --authors-file 參數。

​總體來看,遷移過程很順利,沒有很複雜的步驟。若是你在遷移中有什麼困惑,能夠去官網上瞧瞧。

相關文章
相關標籤/搜索