在版本控制系統(tǒng)的選型上,是選擇Git還是SVN?
對(duì)于開源項(xiàng)目來說這不算問題。使用Git極大地提高了開發(fā)效率、擴(kuò)大了開源項(xiàng)目的參與度、 增強(qiáng)了版本控制系統(tǒng)的安全性,選擇Git早已是大勢所趨。
但對(duì)于企業(yè)用戶來說這個(gè)決心不太好下。部分原因是出于對(duì)Git的誤解,部分原因是尚不了解 Git到底能給項(xiàng)目管理帶來什么好處。希望本文能對(duì)您項(xiàng)目的版本控制系統(tǒng)選型提供幫助。
對(duì)SVN的迷信和對(duì)Git的誤解
誤解1:SVN只能檢出(checkout)一個(gè)版本(revision)的代碼,而Git卻可以脫庫!
這個(gè)誤解是如此普遍,簡直成了SVN在企業(yè)市場中封殺Git的尚方寶劍。其實(shí)稍微思考一下 這個(gè)謠言很難傳播。既然SVN能夠讀取授權(quán)訪問的文件的每一個(gè)版本,那么能夠重組這些版本, 進(jìn)而實(shí)現(xiàn)對(duì)版本庫的完整復(fù)制。即SVN也可以脫庫。
SVN脫庫的工具SVN本身提供: svnsync 。這個(gè)工具主要用于SVN的版本庫鏡像。 例如將版本庫http://host.name/svn/repo 脫庫到本地的 dump 目錄,命令如下:
$ svnadmin create dump
$ printf '#!/bin/sh
exit 0
' > dump/hooks/pre-revprop-change
$ chmod a+x dump/hooks/pre-revprop-change
$ svnsync init file://$(pwd)/dump http://host.name/svn/repo
$ svnsync sync file://$(pwd)/dump
如果使用 git-svn 則為SVN“脫庫”更簡便。
$ git svn clone -s http://host.name/svn/repo dump
有人認(rèn)為SVN可以對(duì)目錄授權(quán),從而阻止對(duì)整個(gè)版本庫進(jìn)行脫庫操作。 下面來看看SVN的授權(quán)究竟是否可靠。
誤解2:SVN能對(duì)目錄進(jìn)行精細(xì)授權(quán),而Git太不安全
SVN的目錄授權(quán)對(duì)管理員來說是災(zāi)難,管理負(fù)擔(dān)相當(dāng)重,在分支或里程碑眾多的時(shí)候很難作對(duì)。 這是因?yàn)镾VN的分支和里程碑(tags)本身是一個(gè)目錄(使用目錄拷貝實(shí)現(xiàn)的)。
例如管理員為名為demo的SVN版本庫授權(quán)。一個(gè)并不太復(fù)雜的主線(/trunk)授權(quán)如下:
[demo:/trunk]
@demo-admin = rw
@leaders = r
[demo:/trunk/doc]
@demo-dev = rw
@designers = rw
[demo:/trunk/src/apps]
@demo-dev = rw
[demo:/trunk/src/common]
@demo-dev = rw
[demo:/trunk/src/html]
@designers = rw
[demo:/trunk/src/secret]
* =
@demo-admin = rw
jiangxin = rw