CVS 轉換到 Git

下面是用某公司內部神秘專案 KKK 做例子的示範,將整個專案內容從 cvs 搬移到 github 上,不過也適用於其他 git hosting/server

由於 code 中 big5 與 utf-8 混雜,但是 comment log 又都是 big5,導致沒辦法直接用 git cvsimport 來處理(git cvsimport 無法處理這種混亂的編碼狀況)

原先 Izero 長輩提供的做法是 cvs to svn,svn to git,切成兩段來做。但是太麻煩了,這樣還得架 svn server 才能處理。

這邊提供一個經過測試後可行的簡單完美做法…

有幾件事情當然得先做
1. 註冊 github 帳號
2. 在要 access github 上資訊的電腦做 ssh2 key,把 public key 上傳到 github
3. 在 github 開個專案

確認已經可以存取 github 上的專案內容後
1. 取得 cvs server 上的 CVSROOT & KKK repository,解開丟到 /home/cvsroot 後切換到 /home/cvsroot
2. 裝 cvs2svn(cvs2svn),待會兒將透過 cvs2svn 中的 cvs2git 這個工具來做轉移
3. cvs2git –blobfile /tmp/cvs2git.blob –dumpfile /tmp/cvs2git.dump –fallback-encoding=utf-8 –encoding=big5 KKK –username gaod
(用 cvs 上的 gaod 身分把 KKK 專案在 cvs 上的東西 dump 到 /tmp/cvs2git.{blog,dump}。cvs 上程式碼編碼是 big5 & utf-8 混雜,comment log 則是 big5)
4. cd /tmp;git init KKK;cd KKK
(先 git init 建目錄後切換過去建出來的 KKK)
5. cat /tmp/cvs2git.{blob,dump} | git fast-import –force
(把 cvs 上的東西倒進去剛剛 git init 出來的目錄)
6. git remote add origin git@github.com:gaod/KKK.git
7. git push –force
(force push 到 remote)

本篇發表於 Computer, FreeBSD, Linux, Software。將永久鏈結加入書籤。

發表迴響