Linux 下 SVN 的安裝和配置
本文轉(zhuǎn)載自微信公眾號(hào)「Linux開發(fā)那些事兒」,作者LinuxThings。轉(zhuǎn)載本文請(qǐng)聯(lián)系Linux開發(fā)那些事兒公眾號(hào)。
SVN 是一個(gè)自由開源的版本管理系統(tǒng),它可以按照時(shí)間的順序去管理文件、目錄以及對(duì)其進(jìn)行的修改。于今,它被廣泛的用于互聯(lián)網(wǎng)公司的項(xiàng)目版本管理中。
工作原理
它的工作原理如下圖所示
它是由一個(gè)SVN服務(wù)器和許多的SVN客戶端組成
數(shù)據(jù)統(tǒng)一存儲(chǔ)在SVN服務(wù)器上
客戶端 從服務(wù)器檢出(checkout)指定路徑上的版本文件到本地,修改了之后再提交(commit)到服務(wù)器上,當(dāng)其他的客戶端再次檢出或更新的時(shí)候,就能獲取得到之前客戶端提交的修改
這樣,多個(gè)客戶端就可以互不干擾的工作,實(shí)現(xiàn)了多人的協(xié)作
SVN已經(jīng)是一個(gè)非常成熟且能快速實(shí)現(xiàn)項(xiàng)目版本管理的工具了,很多中小團(tuán)隊(duì)中都在使用,下面介紹下SVN服務(wù)器的安裝和配置
安裝
- yum install -y subversion
安裝完成之后,執(zhí)行 svn --version 查看是否安裝成功,如果有類似下面的輸出則表示安裝成功
- [root@cghost21 ~]# svn --version
- svn, version 1.7.14 (r1542130)
- compiled Sep 30 2020, 17:44:04
- Copyright (C) 2013 The Apache Software Foundation.
- This software consists of contributions made by many people; see the NOTICE
- file for more information.
- Subversion is open source software, see http://subversion.apache.org/
- The following repository access (RA) modules are available:
- * ra_neon : Module for accessing a repository via WebDAV protocol using Neon.
- - handles 'http' scheme
- - handles 'https' scheme
- * ra_svn : Module for accessing a repository using the svn network protocol.
- - with Cyrus SASL authentication
- - handles 'svn' scheme
- * ra_local : Module for accessing a repository on local disk.
- - handles 'file' scheme
- [root@cghost21 ~]#
默認(rèn)目錄
- svnserve 安裝目錄
svnserve 默認(rèn)安裝在 /usr/bin 目錄下,可通過 which svnserve 命令查看
- [root@ecs-centos-7 ~]# which svnserve
- /usr/bin/svnserve
- 倉庫地址
svnserve 默認(rèn)的倉庫地址是 /var/svn , 通過 /etc/sysconfig/svnserve 配置文件可以修改
- [root@ecs-centos-7 ~]# cat /etc/sysconfig/svnserve
- # OPTIONS is used to pass command-line arguments to svnserve.
- #
- # Specify the repository location in -r parameter:
- OPTIONS="-r /var/svn"
- svnserve 端口
svnserve 啟動(dòng)之后,默認(rèn)使用 3690 端口
- [root@ecs-centos-7 test_a]# netstat -anpt | grep svnserve
- tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 28347/svnserve
配置
- 創(chuàng)建倉庫
安裝完成之后,使用 svnadmin create 倉庫目錄 來創(chuàng)建一個(gè)新倉庫
我們?cè)?/home/tt 目錄下建立一個(gè)名為svn的倉庫,以后所有的項(xiàng)目文件都放在這個(gè)目錄下,創(chuàng)建成功之后在svn目錄下多了幾個(gè)子目錄
- [root@ecs-centos-7 tt]# svnadmin create /home/tt/svn
- [root@ecs-centos-7 tt]# ls svn/
- conf db format hooks locks README.txt
conf 目錄是存放配置文件的
- [root@ecs-centos-7 tt]# svnadmin create /home/tt/svn
- [root@ecs-centos-7 tt]# ls svn/
- conf db format hooks locks README.txt
authz 是用戶權(quán)限控制文件
passwd 是賬號(hào)密碼配置文件
svnserve.conf 是svnserve服務(wù)配置文件
- 配置用戶名密碼
編輯 passwd 配置文件,添加ta用戶名和123456密碼、 tb用戶名和12345密碼以及tc用戶名和123密碼
- [root@ecs-centos-7 conf]# vim passwd
- ### This file is an example password file for svnserve.
- ### Its format is similar to that of svnserve.conf. As shown in the
- ### example below it contains one section labelled [users].
- ### The name and password for each user follow, one account per line.
- [users]
- # harry = harryssecret
- # sally = sallyssecret
- ta = 123456
- tb = 12345
- tc = 123
- 配置用戶權(quán)限
為 SVN 用戶 ta 配置讀寫權(quán)限,為 SVN用戶 tb 配置只讀權(quán)限,為 SVN用戶 tc 配置只讀權(quán)限
上圖中是配置倉庫的根目錄訪問權(quán)限,如果想配置倉庫中指定目錄的訪問權(quán)限,可以在末尾增加一個(gè)倉庫目錄,目錄下面再配置用戶的訪問權(quán)限即可
比如:倉庫根目錄下有一個(gè)myproject的目錄,用戶ta有讀寫權(quán)限,用戶tb無訪問權(quán)限,用戶tc有只讀權(quán)限,則 myproject 目錄的權(quán)限配置如下
- [/myproject]
- ta=rw
- tc=r
- *=
- 配置 svnserve 服務(wù)
如上圖所示,打開紅框中的選項(xiàng)前的注釋,注意:每個(gè)選項(xiàng)前都不能有空格
- anon-access = none # 匿名用戶無法訪問
- auth-access = write #授權(quán)用戶可寫
- password-db = passwd #用戶密碼驗(yàn)證文件
- authz-db = authz #用戶權(quán)限驗(yàn)證文件
- realm = /home/tt/svn #svn版本庫目錄
啟動(dòng)、停止、重啟
修改 /etc/sysconfig/svnserve 中OPTIONS 的值為我們新創(chuàng)建的倉庫地址
- [root@ecs-centos-7 ~]# vim /etc/sysconfig/svnserve
- # OPTIONS is used to pass command-line arguments to svnserve.
- #
- # Specify the repository location in -r parameter:
- OPTIONS="-r /home/tt/svn"
svn安裝完成之后,默認(rèn)已經(jīng)添加到systemctl中了,使用以下命令啟動(dòng)、停止、重啟
- [root@ecs-centos-7 ~]# systemctl start svnserve
- [root@ecs-centos-7 ~]# systemctl stop svnserve
- [root@ecs-centos-7 ~]# systemctl restart svnserve
在實(shí)際的部署中,為了重啟機(jī)器時(shí),不影響客戶端的使用,svnserve通常會(huì)設(shè)置成開機(jī)啟動(dòng)
- [root@ecs-centos-7 ~]# systemctl enable svnserve
- Created symlink from /etc/systemd/system/multi-user.target.wants/svnserve.service to /usr/lib/systemd/system/svnserve.service.
客戶端檢出
配置好用戶密碼以及訪問權(quán)限之后,重新啟動(dòng) svnserve
新建test_a 目錄,進(jìn)入該目錄,執(zhí)行 svn co svn://192.168.0.9 --username ta --password 123456 命令檢出svn倉庫中的文件以及目錄
- [root@ecs-centos-7 tt]# mkdir test_a
- [root@ecs-centos-7 tt]# cd test_a/
- [root@ecs-centos-7 test_a]# svn co svn://192.168.0.9 --username ta --password 123456
- [root@ecs-centos-7 test_a]# svn info
- 路徑: .
- 工作副本根目錄: /home/tt/test_a
- URL: svn://192.168.0.9
- 版本庫根: svn://192.168.0.9
- 版本庫 UUID: c9730d20-968c-41c0-a224-4c6a967f8330
- 版本: 1
- 節(jié)點(diǎn)種類: 目錄
- 調(diào)度: 正常
- 最后修改的作者: ta
- 最后修改的版本: 1
- 最后修改的時(shí)間: 2020-12-04 23:48:11 +0800 (五, 202-12-04)
適用的場(chǎng)景
每個(gè)工具都有其適用的場(chǎng)景,SVN也不例外
當(dāng)你需要記錄文件每一次的修改時(shí)間,查看隨著時(shí)間變化的日志,追溯和回退到任意一次修改時(shí)間點(diǎn)時(shí)的版本,多人協(xié)作一起開發(fā)并追蹤是誰進(jìn)行了修改,那么是很適合使用SVN。
對(duì)于一些比較大的或者后續(xù)不會(huì)有任何修改的文件、把SVN當(dāng)做文件傳輸?shù)闹修D(zhuǎn)站,這些都不適合用SVN,比如:從一個(gè)SVN客戶端上傳一部電影到SVN服務(wù)器上,然后在另一個(gè)SVN客戶端更新這個(gè)電影文件,這是誤用SVN這個(gè)工具了,上述文件的同步有專門的工具(rsync)來處理。
小結(jié)
本章介紹了SVN服務(wù)器的工作原理、安裝、配置、使用場(chǎng)景等,關(guān)于更多SVN相關(guān)的知識(shí)可以參考官方文檔。
對(duì)于中小創(chuàng)業(yè)團(tuán)隊(duì),在事情多,人員少,時(shí)間緊的情況下,具有安裝簡(jiǎn)單、使用方便、易上手(特別是對(duì)于非技術(shù)人員,稍微講解下就能上手使用)等特點(diǎn)的SVN是非常好的選擇。