Subversion 是一個(gè)受歡迎的開(kāi)源的版本控制工具。他在互聯(lián)網(wǎng)免費(fèi)提供并且開(kāi)源。大多數(shù) GNU/Linux 發(fā)行版系統(tǒng)自帶,所以它很有可能已經(jīng)安裝在你的系統(tǒng)上了??梢允褂孟旅婷顧z查是否安裝了。
專注于為中小企業(yè)提供成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)香洲免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上千多家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
[jerry@CentOS ~]$ svn --version
如果 Subversion 客戶端沒(méi)有安裝,命令將報(bào)告錯(cuò)誤,否則它將出現(xiàn)安裝的軟件版本
[jerry@CentOS ~]$ svn --version
-bash: svn: command not found
如果你使用基于 RPM 的 GNU/Linux,可以使用 yum 命令進(jìn)行安裝,安裝成功之后,執(zhí)行 svn --version 命令。
[jerry@CentOS ~]$ su -
Password:
[root@CentOS ~]# yum install subversion
[jerry@CentOS ~]$ svn --version
svn, version 1.6.11 (r934486)
compiled Jun 23 2012, 00:44:03
如果你使用基于 Debian 的 GNU/Linux,使用 apt 命令進(jìn)行安裝。
[jerry@Ubuntu]$ sudo apt-get update
[sudo] password for jerry:
[jerry@Ubuntu]$ sudo apt-get install subversion
[jerry@Ubuntu]$ svn --version
svn, version 1.7.5 (r1336830)
compiled Jun 21 2013, 22:11:49
Apache 安裝
我們已經(jīng)看到如何將 SVN 客戶端安裝到 GNU/Linux 上,讓我們看看如何創(chuàng)建一個(gè)新的版本庫(kù)讓使用者們?cè)L問(wèn)。
我們必須必須在服務(wù)器上安裝 Apache httpd 模塊和 svnadmin 工具。subversion 從 /etc/httpd/conf.d/subversion.conf 讀取配置文件, subversion.conf 看起來(lái)像這個(gè)樣子
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
Location /svn
DAV svn
SVNParentPath /var/www/svn
AuthType Basic
AuthName "Authorization Realm"
AuthUserFile /etc/svn-users
Require valid-user
/Location
讓我們創(chuàng)建 Subversion 用戶,授權(quán)他們?cè)L問(wèn)版本庫(kù),htpasswd 命令用于創(chuàng)建和更新用來(lái)保存用戶名和密碼的純文本文件給 HTTP 用戶提供基本身份認(rèn)證。-c 選項(xiàng)創(chuàng)建一個(gè)密碼文件,如果密碼文件已經(jīng)存在了,它將會(huì)被覆蓋。這就是為什么 -c 只在第一次使用。-m 選項(xiàng)用于設(shè)置是否啟用 MD5 加密密碼。
用戶安裝
讓我們創(chuàng)建 tom
[root@CentOS ~]# htpasswd -cm /etc/svn-users tom
New password:
Re-type new password:
Adding password for user tom
讓我們創(chuàng)建 jerry
[root@CentOS ~]# htpasswd -m /etc/svn-users jerry
New password:
Re-type new password:
Adding password for user jerry
[root@CentOS ~]#
創(chuàng)建一個(gè) Subversion 父目錄保存所有的工作,(/etc/httpd/conf.d/subversion.conf)。
[root@CentOS ~]# mkdir /var/www/svn
[root@CentOS ~]# cd /var/www/svn/
版本庫(kù)安裝
創(chuàng)建一個(gè)名為 project_repo 的版本庫(kù)。svnadmin 命令用于創(chuàng)建一個(gè)新的版本庫(kù)和一些其他目錄保存數(shù)據(jù)。
[root@CentOS svn]# svnadmin create project_repo
[root@CentOS svn]# ls -l project_repo
total 24
drwxr-xr-x. 2 root root 4096 Aug 4 22:30 conf
drwxr-sr-x. 6 root root 4096 Aug 4 22:30 db
-r--r--r--. 1 root root 2 Aug 4 22:30 format
drwxr-xr-x. 2 root root 4096 Aug 4 22:30 hooks
drwxr-xr-x. 2 root root 4096 Aug 4 22:30 locks
-rw-r--r--. 1 root root 229 Aug 4 22:30 README.txt
讓我們更改版本庫(kù)的用戶和組所有權(quán)。
[root@CentOS svn]# chown -R apache.apache project_repo/
檢查是否啟用SELinux或沒(méi)有使用SELinux狀態(tài)工具
[root@CentOS svn]# sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: enforcing
Policy version: 24
Policy from config file: targeted
如果SELinux啟用了,我們必須更改安全的上下文。
[root@CentOS svn]# chcon -R -t httpd_sys_content_t /var/www/svn/project_repo/
如果允許通過(guò) HTTP 進(jìn)行提交,執(zhí)行下面命令。
[root@CentOS svn]# chcon -R -t httpd_sys_rw_content_t /var/www/svn/project_repo/
更改這些配置后,我們重啟 Apache 服務(wù)器。
[root@CentOS svn]# service httpd restart
Stopping httpd: [FAILED]
Starting httpd: httpd: apr_sockaddr_info_get() failed for CentOS
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
[ OK ]
[root@CentOS svn]# service httpd status
httpd (pid 1372) is running...
[root@CentOS svn]#
我們已經(jīng)成功配置好了 Apache 服務(wù)器,現(xiàn)在我們將配置版本庫(kù),使用默認(rèn)的授權(quán)文件給可信的用戶訪問(wèn),添加下列幾行到 roject_repo/conf/svnserve.conf 文件。
anon-access = none
authz-db = authz
照慣例,每個(gè) SVN 項(xiàng)目都有主干,標(biāo)簽,分支在項(xiàng)目的 root 目錄。
主干是主要開(kāi)發(fā)和經(jīng)常被開(kāi)發(fā)者們查看的目錄。
分支目錄用于追求不同的開(kāi)發(fā)方向。
讓我們?cè)陧?xiàng)目版本庫(kù)底下創(chuàng)建主干,標(biāo)簽,分支結(jié)構(gòu)。
[root@CentOS svn]# mkdir /tmp/svn-template
[root@CentOS svn]# mkdir /tmp/svn-template/trunk
[root@CentOS svn]# mkdir /tmp/svn-template/branches
[root@CentOS svn]# mkdir /tmp/svn-template/tags
現(xiàn)在從 /tmp/svn-template 導(dǎo)入這些文件目錄。
[root@CentOS svn]# svn import -m 'Create trunk, branches, tags directory structure' /tmp/svn-template/
Adding /tmp/svn-template/trunk
Adding /tmp/svn-template/branches
Adding /tmp/svn-template/tags
Committed revision 1.
[root@CentOS svn]#
完成了!我們已經(jīng)成功創(chuàng)建版本庫(kù)并允許 Tom 和 Jerry 訪問(wèn),從現(xiàn)在開(kāi)始他們可以所有版本庫(kù)支持的操作了。
對(duì)互聯(lián)網(wǎng)公司而言,SVN的重要性不言而喻。本文選用CollabNet Subversion Edge作為SVN服務(wù)端和控制臺(tái),以TortoiseSVN作為客戶端部署SVN系統(tǒng)。CollabNet Subversion Edge控制臺(tái)功能十分強(qiáng)大,便于維護(hù)管理,且能采用LDAP認(rèn)證方式,適合部署了內(nèi)部域控的組織。而TortoiseSVN客戶端的功能和性能有口皆碑,無(wú)需贅述。
點(diǎn)擊“OK”,在跳出的登陸框里輸入用戶名“admin”及其密碼,按回車(chē)鍵登錄。
可以發(fā)現(xiàn)成功登錄版本庫(kù)。
輸入版本庫(kù)url和檢出目錄,點(diǎn)擊“OK”,在彈出的認(rèn)證框里輸入域賬號(hào)及其密碼,點(diǎn)擊“OK”,開(kāi)始檢出版本庫(kù)。
檢出成功。
可以發(fā)現(xiàn)目標(biāo)版本庫(kù)被成功檢出到目標(biāo)文件夾里。
可以看到一些LDAP用戶登陸過(guò)系統(tǒng)管理后臺(tái),點(diǎn)擊角色列表,可以看到系統(tǒng)已經(jīng)定義好的角色:
點(diǎn)擊角色名可以將該角色授予用戶:
![]DFNIM.png]( )
TortoiseSVN是windows下一個(gè)非常優(yōu)秀的SVN客戶端工具,通過(guò)它我們可以可視化的管理我們的版本庫(kù)。不過(guò)由于它只是一個(gè)客戶端,所以它不能對(duì)版本庫(kù)進(jìn)行權(quán)限管理。
安裝時(shí)按默認(rèn)步驟安裝即可,無(wú)需詳述。
TortoiseSVN不是一個(gè)獨(dú)立的窗口程序,而是集成在windows右鍵菜單中,使用起來(lái)比較方便。以下簡(jiǎn)要說(shuō)明TortoiseSVN的每個(gè)菜單項(xiàng)如何使用。
點(diǎn)擊SVN Checkout,彈出檢出提示框,在URL of repository輸入框中輸入目標(biāo)版本庫(kù)地址,在Checkout directory輸入框中輸入本地工作拷貝的路徑,點(diǎn)擊確定,即可檢出服務(wù)器上的版本庫(kù)。
如果版本庫(kù)在本地已有工作拷貝,則取得最新版本只是執(zhí)行SVN Update即可,點(diǎn)擊SVN Update,系統(tǒng)彈出更新提示框,點(diǎn)擊確定,則把服務(wù)器上的最新版本更新下來(lái)。
把自己工作拷貝所做的修改提交到版本庫(kù)中,這樣別人在獲取最新版本(Update)的時(shí)候就可以看到你的修改了。
顯示當(dāng)前文件(夾)的所有修改歷史。SVN支持文件以及文件夾獨(dú)立的版本追溯。
查看當(dāng)前版本庫(kù),這是TortoiseSVN查看版本庫(kù)的入口,通過(guò)這個(gè)菜單項(xiàng),我們就可以進(jìn)入配置庫(kù)的資源管理器,然后就可以對(duì)配置庫(kù)的文件夾進(jìn)行各種管理,相當(dāng)于我們打開(kāi)我的電腦進(jìn)行文件管理一樣。
點(diǎn)擊Check for Modifications,彈出一個(gè)列出所有待更新的文件及文件夾的狀態(tài)的窗口。
查看文件的版本分支結(jié)構(gòu),可以點(diǎn)擊Revision Graph,系統(tǒng)以圖形化形式顯示版本分支。
從版本庫(kù)中獲取某一個(gè)歷史版本。這個(gè)功能主要是方便查看歷史版本用,而不是回滾版本。注意:獲取下來(lái)之后,對(duì)這個(gè)文件不建議進(jìn)行任何操作。
如果你做了修改,那么當(dāng)你提交的時(shí)候SVN會(huì)提示你,當(dāng)前版本已失效(即不是最新版本),無(wú)法提交,需要先update一下。這樣你所做的修改也就白費(fèi)了。
如果你對(duì)工作拷貝做了一些修改,但是你又不想要了,那么你可以使用這個(gè)選項(xiàng)把所做的修改撤銷(xiāo)。
如果當(dāng)前工作拷貝有任何問(wèn)題的話,可以使用這個(gè)選項(xiàng)進(jìn)行修正。例如,有些文件原來(lái)是版本控制的,但是你沒(méi)有通過(guò)tortoiseSVN就直接刪除了,但是tortoiseSVN還是保留著原來(lái)的信息(每個(gè)文件夾下都有一個(gè).svn的隱藏文件夾,存放著當(dāng)前文件夾下所有文件夾的版本信息)所以這就會(huì)產(chǎn)生一些沖突??梢允褂胏leanup來(lái)清理一下。
如果你不想別人修改某個(gè)文件的話,那么你就可以把這個(gè)文件進(jìn)行加鎖,這樣可以保證只有你對(duì)這個(gè)文件有修改權(quán)。除非你釋放了鎖,否則別人不可能提交任何修改到配置庫(kù)中。
Branch是分支的意思。例如當(dāng)在設(shè)計(jì)一個(gè)東西的時(shí)候,不同的人有不同的實(shí)現(xiàn),但是沒(méi)有經(jīng)過(guò)實(shí)踐檢驗(yàn),誰(shuí)也不想直接覆蓋掉其他人的設(shè)計(jì),所以可以引出不同的分支。將來(lái)如果需要,可以將這些分支進(jìn)行合并。
tag是打標(biāo)簽的意思。通常當(dāng)項(xiàng)目開(kāi)發(fā)到一定程度,已經(jīng)可以穩(wěn)定運(yùn)行的時(shí)候,可以對(duì)其打上一個(gè)標(biāo)簽,作為穩(wěn)定版。將來(lái)可以方便的找到某個(gè)特定的版本(當(dāng)然我們也可以使用版本號(hào)來(lái)查找,但是數(shù)字畢竟不方便)。
SVN對(duì)于分支和標(biāo)簽都是采用類(lèi)似Linux下硬鏈接的方式(同一個(gè)文件可以存在兩個(gè)地方,刪除一個(gè)不會(huì)影響另一個(gè),所做修改會(huì)影響另一個(gè)),來(lái)管理文件的,而不是簡(jiǎn)單的復(fù)制一份文件的拷貝,所以不會(huì)有浪費(fèi)存儲(chǔ)空間的問(wèn)題存在。
文件創(chuàng)建分支后,你可以選擇在主干工作,還是在分支工作,這時(shí)候你可以通過(guò)Switch來(lái)切換。
主干和分支的版本進(jìn)行合并,在源和目的各輸入文件的路徑,版本號(hào),點(diǎn)擊確定。系統(tǒng)即對(duì)文件進(jìn)行合并,如果存在沖突,請(qǐng)參考沖突解決。
把整個(gè)工作拷貝導(dǎo)出到本地目錄下,導(dǎo)出的文件將不帶svn文件標(biāo)志,文件及文件夾沒(méi)有綠色的”√”符號(hào)標(biāo)志。這個(gè)功能是方便我們部署用。
當(dāng)我們需要發(fā)布一個(gè)穩(wěn)定版本時(shí),就可以使用這個(gè)功能將整個(gè)工程導(dǎo)出到某個(gè)文件夾,新的文件夾將不會(huì)包含任何版本信息了。
當(dāng)服務(wù)器上的文件庫(kù)目錄已經(jīng)改變,我們可以把工作拷貝重新定位,在To URL輸入框中輸入新的地址。
當(dāng)我們版本庫(kù)發(fā)生轉(zhuǎn)移的時(shí)候就需要用到這個(gè)功能了。例如原先的版本庫(kù)是建在U盤(pán)上的,現(xiàn)在轉(zhuǎn)移到(復(fù)制整個(gè)配置庫(kù)文件夾)開(kāi)發(fā)服務(wù)器上,使用https代替文件系統(tǒng)的訪問(wèn)。因此就需要將原來(lái)的工作拷貝的目標(biāo)版本庫(kù)重新定位到開(kāi)發(fā)服務(wù)器上。
選擇要提交到服務(wù)器的目錄,右鍵選擇TortoiseSVN-Import,系統(tǒng)彈出導(dǎo)入提示框,在URL of repository輸入框中輸入服務(wù)器倉(cāng)庫(kù)地址,在Import Message輸入框中輸入導(dǎo)入日志信息,點(diǎn)擊確定,則文件導(dǎo)入到服務(wù)器倉(cāng)庫(kù)中。
如果有多個(gè)文件及文件夾要提交到服務(wù)器,我們可以先把這些要提交的文件加入到提交列表中,要執(zhí)行提交操作,點(diǎn)擊執(zhí)行提交(SVN Commit),即可把所有文件一次性提交到服務(wù)器上。
創(chuàng)建/發(fā)布補(bǔ)丁。如果管理員不想讓任何人都隨便提交修改,而是都要經(jīng)過(guò)審核才能做出修改,那么其他人就可以通過(guò)創(chuàng)建補(bǔ)丁的方式,把修改信息(補(bǔ)丁文件)發(fā)送給管理員,管理員審核通過(guò)之后就可以使用apply patch提交這次修改了。
大多數(shù)項(xiàng)目會(huì)有一些文件(夾)不需要版本控制,如編譯產(chǎn)生的*.obj, *.lst,等。這時(shí)候可以把這些文件加入忽略列表。
騰訊云SVN使用限制:系統(tǒng)限制
1、單個(gè)文件的大小不能超過(guò)800 MByte,否則會(huì)影響服務(wù)質(zhì)量。
2、單個(gè)應(yīng)用的CDN SVN庫(kù)的文件總?cè)萘可舷逓?GB,文件總個(gè)數(shù)上限為50W。
3、CDN SVN庫(kù)的一個(gè)目錄下面所包含的文件個(gè)數(shù)上限為5萬(wàn)。
4、一次提交的文件/目錄更改數(shù)不能超過(guò)5萬(wàn)個(gè),文件總大小不能超過(guò)6G。如果文件數(shù)過(guò)多,請(qǐng)分開(kāi)多次提交。(更改數(shù)是指對(duì)文件或目錄做的增刪改操作的次數(shù))。
騰訊云SVN使用限制:文件及目錄命名限制
1、目錄和文件名的開(kāi)頭只能使用字母、數(shù)字;
2、目錄及文件的命名都不支持中文名,僅支持字母、數(shù)字、下劃線、"." ;
3、文件名和目錄名不要包含空格,空格會(huì)被過(guò)濾;
4、目錄名長(zhǎng)度不能超過(guò)4096字節(jié),文件名長(zhǎng)度不能超過(guò)255字節(jié)(一個(gè)英文字符占1個(gè)字節(jié),一個(gè)中文占2個(gè)字節(jié))。
騰訊云SVN使用限制:安全限制
1、騰訊云平臺(tái)的SVN server進(jìn)行了安全加固,可嚴(yán)格控制用戶訪問(wèn)邊界,防止代碼泄漏等安全事件。
2、騰訊云平臺(tái)的SVN server具有防攻擊的能力,有效防御訪問(wèn)攻擊以及惡意上載垃圾數(shù)據(jù)等行為。
3、騰訊云平臺(tái)SVN采用統(tǒng)一的云服務(wù)帳號(hào)進(jìn)行登錄,云服務(wù)帳號(hào)體系可以有效保證帳號(hào)安全。