把公司的SVN遷移到GitLab CE(GitLab社區版)原因主要有下面幾個:
- 年青的新人進來,喜歡用git的越來越多
- GitLab CE提供了優美的 web 界面,圖形化分支結構,更直觀的代碼審查,統計、issue 系統、wiki 等功能全面集成
- Git 比SVN commit和push更快,Git庫就在本地,commit是本地提交,回家照樣干活。push的時候是push一個壓縮的文件,而不是一個個文件的push.
- Git數據庫是分布式的,每個用戶都有一個本地庫,數據更安全。
- 因為是本地commit,Git即使在公網環境下,也可以順暢使用,如果要跨地域跨國(分公司在美國)做開發,可以方便國外公司人員快速訪問,共用同一個版本管理軟件。
基於以上幾點,我們決定把當前正在使用的SVN庫遷移到GitLab CE上。一、服務器系統配置如下:DELL PowerEdge R630 CPU 20core MEM 400G Disk 300G *8 RAID 10系統 :Ubuntu 16.04.1 LTS
二、GitLab CE 的安裝方法如下:
安裝非常簡單,可以直接用官方文檔安裝並啟動。建議把/opt/gitlab(程序配置) /var/log/gitlab(日志) /var/opt(數據) 目錄放到獨立的大的分區上去,並定時備份。
GitLab CE 在ubuntu16.04上安裝官方文檔
apt-get update
apt-get install curl openssh-server ca-certificates postfix
curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
apt-get install gitlab-ce
gitlab-ctl reconfigure
三、遷移SVN庫到GitLab CE
1、安裝遷移工具git-svn
apt-get install git-svn
2、生成SVN用戶文件,格式如下:
可以把SVN庫中的用戶cp出來,在最后加一列郵件地址
root@DEV70:/data/git# cat auth.txt
vr = xxxxx 《guanjianming@xxx.com.cn》 #請自己把《》換成半角 :)
vr_view = xxxx 《liuchenxin@xxx.com.cn》
vr_01 = xxxxx 《zhangrongwang@xxx.com.cn》
vr_02 = xxxxx 《getaiming@xxx.com.cn》
vr_red = xxxx 《alex@xxx.com>》
3、使用git svn clone命令把SVN庫轉換為本地git庫
###在服務器上,把一個遠程SVN庫轉為一個git本地庫
git svn clone –username vr -s -A auth.txt svn://172.18.194.181:9999/vr_new/ vr/
#-s 同 –stdlayout 參數表示你的項目在 SVN 中是常見的 “trunk/branches/tags” 目錄結構,如果不是,那你需要使用 –tags, –branches, –trunk 參數
#-A –authors-file auth.txt 上面的SVN用戶認證文件
#–username 訪問SVN 庫的用戶名
###查看git 本地庫的情況
git branch -a #下面為命令顯示,一個master庫,和多個包括branch及tag的分支
master
remotes/origin/tags/t1.01
remotes/origin/tags/v1.0
remotes/origin/tags/v1.01
remotes/origin/tags/v1.02
remotes/origin/tags/v1.03
remotes/origin/tags/v1.04
remotes/origin/tags/v2.0
remotes/origin/tags/v2.01
remotes/origin/tags/v2.02
remotes/origin/tags/v2.03
remotes/origin/tags/v2.04
remotes/origin/tags/v2.05
remotes/origin/tags/v2.06
remotes/origin/tags/v2.07
remotes/origin/tags/v2.07@459
remotes/origin/tags/v2.08
remotes/origin/tags/v2.09
remotes/origin/tags/v2.10
remotes/origin/tags/v2.11
remotes/origin/tags/v2.12
remotes/origin/trunk
remotes/origin/v1.0_fix
4、在本地的git庫上處理branch和tags
#先同步數據有條件把SVN的關掉,不要讓用戶再向SVN做遞交
cd /data/git/vr
git svn fetch
#轉換所有branchs
for i in git branch -r | grep -v trunk | grep -v tags | awk -F/ '{print $2}'; do git checkout -b $i origin/$i; done
#轉換所有tags
for i in git branch -r | grep tags | awk -F/ '{print $3}'; do git checkout -b $i origin/tags/$i; git checkout master; git tag $i $i; git branch -D $i; done
#再次同步,並把master與remotes/origin/trunk 合並,保證master上是最新的commit
git svn fetch
git checkout master
git svn rebase #或是git merge remotes/origin/trunk ,其實就是把remotes/origin/trunk分支的SVN最新的commit應用到git 的 master分支上
git log #查看是否是最新的commit
#clone 一個新的本地庫
cd ..
git clone vr vr_new
#再做一次branch的轉換
cd vr_new
for i in git branch -r | grep -v trunk | grep -v tags | awk -F/ '{print $2}'; do git checkout -b $i origin/$i; done
5、在GitLab上新建一個vr_new庫(具體操作就不描述了)
6、把剛才轉換好的git本地庫push到GitLab的vr_new庫上
git remote rm origin
git remote add origin git@gitlab:vr/vr_new.git
git push -u origin –all
git push origin –tags
7、來GitLab上查看push上來的庫
8、最后給一個找到的非常好的git 中文文檔鏈接:https://github.com/geeeeeeeeek/git-recipes/wiki
我假設你是一個技術人員,或者說是程序員。
從你的角度來說git比svn更好用,更適合敏捷開發,也許更流行。
但是站在你的老板的角度上,你的給出這種轉換帶來的好處,如果你的老板不是技術人員出身這種說服或者證明變得非常困難。
畢竟,git也好,SVN也好,都只是一個管理工具,不是最終產品,不是帶來收益的東西,你的老板可能對此並不熱心。
而且轉換帶來的成本你要如何計算,git服務器,備份服務器,要不要買入第三方產品如bitbucket。
轉換后的開發流程的影響多大,什么code review 工具,怎么CI, CD。
建議你把這些問題想一下,列個清單和計划,然后去找老板,讓老板同意你在部分項目上進行實驗,然后積累遷移經驗和數據,也在公司內部普遍git技能。