2013年4月8日 星期一

如何轉移 SVN 專案為 GIT 管控

我有一個既有的專案由 SVN 管控(遠端 server 1), 因為(*)我想要以後改用 GIT 管控(遠端 server 2), 但仍希望在 GIT 裡面還能看到舊有 SVN 版本的歷史紀錄.

NOTE: (*) 任何理由, 我猜大部分是因為有某人堅持 ^^


其實這個的需求跟之前我發表的 SVN 與 GIT 協同工作是同一回事, 只是改另外一種 "不回頭" 的說法, 把原有的紀錄搬過來後, 原有的 SVN 庫不要了, 而且會以為一開始就是 GIT 管控...

所以不再詳細寫下步驟, 快速的紀錄一下重點 

Converting a Subversion repository to Git
-----------------------------------------

by TortoiseGit and TortoiseSVN

1. 原有的 SVN 庫, 必須要能用 URL 方式 like svn://xx.xx.xx.xx/oo 
   或 http://...方式存取, 而不是 file:///x:/xx/oo 這種檔案路徑方式, 
   如果 SVN 庫是放在本電腦用 file:// 方式, 請設置正確的 svn service 並
   啟動, 改用 SVN://...

2. 建立一個新的 folder A, 操作 TortoiseGit clone, URL 填 SVN://..., 
   下面 'From SVN Repository' 勾選, 把整個 SVN clone 至這個 folder,
   此時 folder A 為 GIT 管控, 但還與 SVN 庫連結著.

   這個(folder A as GIT)可以查到全部的 SVN 歷史紀錄

3. a) GIT 庫仍在本機: 建立另一個新的 folder B, 操作 TortoiseGit 在這裡

      建立一個新的 bare git 庫
   b) GIT 庫放在他機: 遠端放 Git 庫的 server, 建立好一個新的 bare git 庫

   此 git 庫就是以後你要送交的地方(remote).

4. 在 folder A 處開啟 TortoiseGit, settings -> Git -> Remote 新增
   一個 remote 為 step 3 的位置.

5. 把 folder A 全部的文件, push 至 step 4 新增 remote 的位置.

6. (**)建立另一個新的 folder C, 操作 TortoiseGit clone 自 step 4 的
   位置, 此 folder C 就是你最後要的工作路徑.

   NOTE: (**) 我後來想到, 如果直接在 folder A 裡的 remote 設置
          (as step 4 處), 把 original 的 SVN 的位置刪去, 不就好了?
          那就不需要在弄一個 folder C, 需再測試看看此法, 但建立
          folder C 新的 clone 也有順便測試以別人角色抓此 GIT 庫的好處.

7. 砍掉 folder A, 砍掉 SVN 庫....

8. 以後就在 folder C 工作, 可以提交本地端也可以 push 至遠端(***)...

   P.S. (***) 對啦, 堅持的人總是說這個理由啦...:)

參考: http://john.albin.net/git/convert-subversion-to-git

P.S. 上面參考是用 git 指令操作, 感覺很複雜, 也許我的方法缺陷沒測到, 先這樣以後再說...


沒有留言:

張貼留言