前言:git
最近公司須要將總體項目從svn遷移至gitlab上,通過幾天的研究,現記錄一下流程app
總體思路是進行一次導入:ssh
先經過subgit將svn整個import至本地,在與git上的項目進行合併.svn
1.硬件環境gitlab
git:git version 2.7.4
svn: 1.6.11post
subgit:3.2.2
2.下載subgit ui
官網下載subgit: https://subgit.com/url
將subgit解壓: spa
tar -zcvf subgit-3.2.2.zip
3.在gitlab上新建一個須要合併的項目code
進入gitlab管理界面,新建項目:lclctest
git@xx.xx.xx.xx:lclc/lclctest.git (我這邊新建了一個lclc的組)
建好以備用.
4.進入subgit-3.2.2/bin 目錄,使用configure
命令
./subgit configure http://ip:port/svn/lclctest lclctest
完成後會有一些提示:
1) Adjust Subversion to Git branches mapping if necessary: /root/lclctmp/tmp/subgit-3.2.2/bin/lclctest/subgit/config 2) Define at least one Subversion credentials in default SubGit passwd file at: /root/lclctmp/tmp/subgit-3.2.2/bin/lclctest/subgit/passwd OR configure SSH or SSL credentials in the [auth] section of: /root/lclctmp/tmp/subgit-3.2.2/bin/lclctest/subgit/config 3) Optionally, add custom authors mapping to the authors.txt file(s) at: /root/lclctmp/tmp/subgit-3.2.2/bin/lclctest/subgit/authors.txt 4) Run SubGit 'install' command: subgit install lclctest
意思是進行一些配置,而後進行install
配置config:因爲3.2.2默認是配置好的,能夠不進行配置
trunk = trunk:refs/heads/master branches = branches/*:refs/heads/* branches = branches/features/*:refs/heads/features/* branches = hotfixes/*:refs/heads/hotfixes/* tags = tags/*:refs/tags/* shelves = shelves/*:refs/shelves/*
配置用戶映射文件 author.txt 格式爲:svnUser = Git User <user@example.com> (也能夠不修改)
5.進行install
$ ./subgit install lclctest
此步將鏈接svn,須要耗時一段時間.
完成後就把svn代碼遷移到本地庫了,這時候就須要用git push到遠程庫中
6.clone版本
git clone ./lclctest lclctest.git
7.進入lclctest.git目錄
git remote set-url origin git@yourip:lclc/lclctest.git(以前建立的git項目)
git push origin master
在push的時候發現提示填寫密碼:
git@ip's password:
此時說明須要進行身份驗證,咱們給git添加一個keygen就好了
7.1:生成keygen
cd ~ ssh-keygen -t rsa -C "your_email@example.com"
生成的文件在 .ssh文件下有 id_rsa和id_rsa.pub文件
7.2:上傳keygen
打開gitlab的管理界面
將id_rsa.pub文件中的內容複製到Key的文本框裏.
再執行步驟7的git push origin master命令上傳master
8.上傳分支.
進入lclctest.git目錄,使用命令查看分支
git branch -a
結果:
* master remotes/origin/HEAD -> origin/master remotes/origin/bugfix remotes/origin/develop remotes/origin/feature remotes/origin/master
本項目一共有3個分支,分別是bugfix,develop,feature,分別進行上傳
git push origin remotes/origin/feature:refs/heads/feature
git push origin remotes/origin/bugfix:refs/heads/bugfix
git push origin remotes/origin/develop:refs/heads/develop
注意:冒號後面爲遠程庫中的地址,必須以refs/heads開頭.
9.上傳tags
git push --tags
參考資料:
http://lattecake.com/post/20051
http://stackoverflow.com/questions/23251394/subgit-import-and-multiple-branches-directories