正文之前,說幾句關於svn和git的閑話。
之前用的版本控制工具主要都是svn,隨着時間的推移,git以其強大靈活的分支管理功能受到大眾喜愛。尤其是多人同時開發時同一項目,且不同部分功能時,git的分支管理功能顯得尤為強大。並且git代碼庫的分布式管理,使得各個客戶端代碼庫對服務器代碼庫的依賴大大減弱,代碼管理靈活而又強大。
上一個公司的項目類型就是那種,同一個項目多人開發不同模塊功能,並且上線時間各個不同。版本控制工具一直在用git,對於公司項目的情況,還是充分發揮了git的多分支管理功能,項目開發也算是有條不紊。后期空降到公司一個cto,cto之前是用的svn,沒有用過git,然后要求我們都統一改換svn作為版本控制工作。項目開發感覺捉襟見肘。=_=!。
當然今天寫這個博客跟以上沒有什么必然聯系。小伙伴們自己買了個服務器,之前在上面搭建了個svn。后來系統崩了,重裝了系統,svn也沒了。有個小伙伴最近要做東西,讓我再搭一下。上次搭過一次,感覺不費什么事。然而操作起來也是各種google和百度,好多也記不住了。所以這次寫個博客權作筆記了。當然只是svn最基本代碼管理功能。
1.先看看服務器上是不是已經安裝svn了。
svnserve --version //或者 svn --version
如果已經安裝了svn了,那么會顯示svn的版本信息。

如果提示是錯誤命令,那就是服務器還未安裝svn。需要你來安裝svn了。當然如果已經安裝了,你也可以卸載掉舊版本(yum remove subversion),來安裝新版本的svn。
yum install subversion
2.svn安裝完成后,就可以創建版本庫了。
svnadmin create /opt/svn/repository
可能出現的問題,不存在相應的目錄結構。opt是服務器根目錄是存在的,而svn這個目錄結構可能是不存在的。

這個解決方法,只需在opt目錄下創建svn目錄就可以了(mkdir svn)。
3.svn代碼庫創建成功后,查看repository目錄下。 已經conf, db, format, hooks, locks, README.txt等文件。進入conf目錄,代碼庫的配置文件在該目錄下。有以下幾個文件authz, passwd, svnserve.conf。其中authz是權限控制,可以設置哪些用戶可以訪問哪些目錄,passwd是設置用戶和密碼的,svnserve.conf是設置svn相關操作的。
a. svnserve.conf文件
[general] #匿名訪問的權限,可為none,read,write anon-access = none #授權用戶的權限,可為none,read,write auth-access = write #密碼數據文件的路徑,如不以/開頭,則為相對路徑 password-db = passwd #訪問控制文件的路徑,如不以/開頭,則為相對路徑 authz-db = authz #認證命名空間,subversion會在認證提示里顯示,並且作為憑證緩存的關鍵字,不同的代碼庫需要不同的realm #我們之前創建的倉庫repository,此處為此倉庫名 realm = repository
b.passwd文件
[users] #用來設置賬戶及密碼,此處我們建立三個賬戶 admin = 123456 xiaohua = 123465 xiaopeng = 123456
c.authz文件,該文件用來控制不同用戶對不同目錄的訪問權限。
#可以將passwd中建立的賬戶,划分到不同組中,組名由自己定義。此處我們定義兩個組admin(管理員)和developer(開發人員組)。 [groups] admin = admin developer = xiaohua,xiaopeng #定義不同目錄的訪問權限,設置我們之前創建的repository根目錄權限。 [repository:/]
#設置admin組中成員,對本目錄有讀(r)和寫(w)權限 @admin = rw
#設置developer組中的成員,對本目錄只有讀(r)權限 @developer = r #設置其他訪問者,對本目錄無任何權限 * = #設置repository目錄下,test目錄(test后不要加/)權限。 [repository:/test] @developer = rw * =
此處的@表示組名([groups]),當然去掉@符號,也可以直接賬號來限制權限。xiaohua = rw,表示只對xiaohua這個賬戶具有讀寫權限。
4.配置文件設置好以后,需要確定下,防火牆對svn默認的端口3690是打開的。
vi /etc/sysconfig/iptables
添加以下內容:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3690 -j ACCEPT
保存后重啟防火牆
service iptables restart
5.svn的啟動與停止。
啟動svn服務
svnserve -d -r /opt/svn/repository
-d:守護進程 -r:svn根目錄。啟動時可以設置啟動的端口,svnserve -d -r /opt/svn/repository --listen-port 3691。如果不設置則默認為3690。
如果要停止svn服務,可以通過kill進程id的方式來實現。
ps aux|grep svn #找到svnserve服務pid kill -9 pid #結束進程
6.客戶端(比如我們本地的計算機)安裝svn工具(比如 TortoiseSVN)后,就可以在本地checkout出我們在服務器上搭建的代碼庫了,地址:svn://服務器ip/repository。
以上。歡迎指正交流。
相關參考:http://www.centoscn.com/CentosServer/ftp/2015/0115/4504.html
http://www.jianshu.com/p/0a5e59e4532f
http://www.cnblogs.com/terryglp/articles/2451398.html
