轉換你的 Subversion 到 Git

轉換你的 Subversion 到 Git
當我發現我很感興趣的項目都被其作者託管在Github的時候,讓我萌生了對Git的好奇。雖然我已是如此的奧特曼,但是還是有必要寫出來分享給其他還未接觸 Git 的人的。之前我有介紹過《在Google Code上用 Mercurial 取代 Subversion 管理你的項目》,其實就是教大家如何把 SVN 轉換到 Mercurial 且保留全部的歷史記錄。本文講的則是另外一則,是教大家如何轉換 SVN 到 Git,網上其實有不少的教程,但是都沒有從 SVN 的 tags 到 Git 的 tags,本文提供了另外一則轉換的指南,如果有不妥的地方,望請 Git 高手指教並指正。

1.安裝 Git

首先,你需要安裝帶有 git-svn 的 Git(git-svn 可以讓你 SVN 和 Git並用,如果你打算使用 Git 又不想轉變你的 SVN版本庫,這會是一種很好的解決方案,不過本文只是利用git-svn來一次性轉換你的 SVN版本庫 為 Git。)

你可以在這裡下載安裝Git:http://git-scm.com/download。最新版似乎都有集成git-svn,至少我安裝完以上地址提供的編譯好的版本,在 Terminal 里輸入 git svn會有提示”Not a git repository”。

如果你正在使用MAC OS X,你應該已經用過 MacPorts了吧,那麼:

prompt> sudo port install git-core +svn

Ubuntu 或者 Debian Linux用戶:

prompt> sudo apt-get install git-svn

2.創建作者文件

下一步,創建一個文本文件來映射 Subversion 的提交者到 Git 的作者使歷史記錄里的名字和email地址正確顯示。保存成authors.txt:

guaniu = Leeiio <xxx@xxx.com>

3.克隆(clone)版本庫

現在來運行命令導入你的svn版本庫為一個本地的Git版本庫。
我假定你的 svn 版本庫有標準的 /trunk,/tags 以及/branches。

prompt> git svn clone <SVN版本庫地址> --no-metadata -A authors.txt -t tags -b branches -T trunk <轉換的目的目錄名>

比如以我的google code上的svn為例:

prompt> git svn clone http://leeiio.googlecode.com/svn/ --no-metadata -A authors.txt -t tags -b branches -T trunk Leeiio

現在,你可以運行 git log 命令,你將會看到你全部的提交歷史記錄以及正確顯示的提交者作者名。

4.轉換branches 為 tags

現在還需要做一步處理。目前你全部的 tags 在 Git 的版本庫里都成了 branches(分支),並不是 tags。所以你需要手動轉換它們。對於每一個 svn 的 tag你都將轉換為 Git 的 tag,然後刪除全部的 branch。用以下的命令列出:

promp> git branch -r

然後列出所有的tag:

prompt> git tag tagname tags/tagname
prompt> git branch -r -d tags/tagname

現在,你就有了一個本地的 Git 版本庫了,包含了所有的歷史記錄以及 tags。

5.Push(推送)到一個公共的版本庫

當然如果你並不想在網上分享你的 Git 版本庫,這一步的操作你大可不必了。
以 github 為例:

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

Well Done!一切搞定了。開始你的 Git 之旅吧。

最後,附送一個為 SVN用戶過渡到Git的使用手冊

Via. How to convert from Subversion to Git

16 Responses to 轉換你的 Subversion 到 Git

  1. 橡筋 says:

    做第一個火星人?

  2. ❗ 哈哈,那額就是第二個火星人啦!
    沒有用過git,用過一下svn

  3. Jutoy says:

    唔,這個太專業了看不懂

  4. inly says:

    小李子..挺上進的麽. 😈

  5. chisdy says:

    你研究還挺多的,看不懂

  6. zwwooooo says:

    呃~我簡單用用Subversion即可,所以這個就看不懂了了

  7. vt says:

    還是 mercurial 好,主要是 google code 免費,github 要錢 😈

  8. Burgess says:

    文章不錯,有機會也換過去試試看

  9. zaky_da says:

    無意間走進小站,很漂亮 !

  10. Bruce Yang says:

    guaniu = Leeiio
    這個是什麼含義?

  11. Pingback: 轉換你的 Subversion 到 Git - IT牛人博客聚合

  12. Pingback: NeWorldiOS自動構建套件 – flow.ci + fir.im + Coding | | NeWorld

Leave a Reply

Your email address will not be published. Required fields are marked *