星期一, 2月 09, 2015

搬家,從 Subverion 到 Git

Git - Git 与 Subversion 整理出來的步驟,Git 本身就有可以從 Subversion 簽出程式的功能:git-svn,應用 git-svn 就可以成功的搬家:
  1. 先 到原 svn 專案下,執行 svn log ^/ --xml | grep -P "^(.*?)<\/author>/$1 = /' > users.txt ,產生 users.txt,編輯裏面 svn user 跟 git user 的對照。
  2. 接著用 git-svn 重新簽出 svn repository: git svn clone your_svn_url -T trunk -b branches -t tags -s your_project -git -Ausers.txt --no-metadata
    在 Subversion 裡,是以目錄 trunk/branches/tags 來區分主枝、分枝跟標籤,-T, -b, -t 就是告訴 Git 這些事情。
    -Ausers.txt 就是告訴 Git-svn 要參考前個步驟所產生的 users.txt 去做使用者的對照。
    --no-metadata 是處理掉一些 git-svn 加上的附加訊息,這可以用 git log 比較得知,沒有加的話,git log 結果會有 git-svn-id: .... 的訊息。
  3. 如 果有 tags 的話,會需要處理:git for-each-ref refs/remotes/tags | cut -d / -f 4- | grep -v @ | while read tagname; do git tag "$tagname" "tags/$tagname"; git branch -r -d "tags/$tagname"; done
  4. 如果有 branch 的話,也需要處理:git for-each-ref refs/remotes | cut -d / -f 3- | grep -v @ | while read branchname; do git branch "$branchname" "refs/remotes/$branchname"; git branch -r -d "$branchname"; done
  5. 接著加入 git remote repository :git remote add origin your_git_remote_repository ,再用 git push origin --all 推上去。
  6. 最後把 tags 也推上去: git push origin --tags

沒有留言: