最近須要將項目從svn遷移到git,至於緣由請忽略,至於svn與git區別優劣請自行百度。一共有兩種方式可行:git
第一種方式較爲常見,可是會丟失以前svn版本提交記錄,就是將svn checkout到本地而後上傳到git上vim
詳情參見:http://blog.csdn.net/hanhailong726188/article/details/46738929服務器
第二種方式較爲複雜,可是能夠保留以前svn版本提交記錄,執行命令以下:ssh
git svn clone https://172.16.0.241:8443/svn/wsgjp/ -r 76896:HEAD --no-metadata --authors-file=user.txt -s cp -Rf .git/refs/remotes/origin/* .git/refs/heads/ rm -Rf .git/refs/remotes git remote add origin ssh://git@git.china.netease.com/welkin/batchserver.git git push origin --all
知識點:分佈式
若是svn上的commit次數很是多, git svn clone 就會很是慢,通常超過幾百個版本就要大概十分鐘。此時能夠在clone的時候只下載部分版本,
命令:git svn clone -r<開始版本號>:<結束版本號> <svn項目地址> [其餘參數]
說明:其中76896爲svn版本號,HEAD表明最新版本號,就是隻下載svn服務器上版本76896到最新的版本的代碼.svn
no-metadata:阻止git導出SVN包含的一些無用信息gitlab
authors-file:必須指定svn賬號在git中的映射佈局
user.txt:存儲svn帳號與gitlab上帳號的關聯性,以下:spa
生成命令:svn log --xml | grep author | sort -u | perl -pe 's/.*>(.*?)<.*/$1 = /' > user.txt
剩下的須要本身去vim user.txt手動去更改
VisualSVN Server = wssf2014<zqhym***@gmail.com> yqdong = yqdong<×××@163.com>
......
格式: svn用戶名 = git用戶名<git用戶對應的郵箱賬號>
-s 告訴 Git 該 Subversion 倉庫遵循了基本的分支和標籤命名法則,也就是標準佈局。
若是你的主幹(trunk,至關於非分佈式版本控制裏的master分支,表明開發的主線),分支(branches)或者標籤(tags)以不一樣的方式命名,則應作出相應改變。
-s參數實際上是-T trunk -b branches -t tags的縮寫,這些參數告訴git這些文件夾與git分支、tag、master的對應關係。.net
若是不是上述這種命名法則,那你須要使用 --tags
, --branches
, --trunk
參數(請經過 git svn help
自行了解)
HELP:
經常使用git命令清單:http://blog.jobbole.com/95979/
參考git教程:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
常見git命令關聯:
svn文件標識圖