如何讓公司從SVN改到Git?


把公司的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&gt》

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技能。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM