SVN是Subversion的簡稱,是一個開放源代碼的版本控制系統,相較於RCS、CVS,它採用了分支管理系統,它的設計目標就是取代CVS。互聯網上不少版本控制服務已從CVS遷移到Subversion。說得簡單一點SVN就是用於多我的共同開發同一個項目,共用資源的目的。html
SVN官網git
SVN(subversion)是版本管理工具,是CVS的接班人。目前,絕大多數開源軟件都使用svn做爲代碼版本管理軟件。做爲一個運維人員安裝和配置SVN服務器和客戶端是必需要掌握的內容。數據庫
svn服務器有2種運行方式:獨立服務器和藉助apache運行。兩種方式各有利弊,用戶能夠自行選擇。apache
svn存儲版本數據也有2種方式:BDB(一種事務安全型表類型)和FSFS(一種不須要數據庫的存儲系統)。由於BDB方式在服務器中斷時,有可能鎖住數據,因此仍是FSFS方式更安全一點。vim
1 存儲類型格式windows
CVS是個基於RCS文件的版本控制系統。每一個CVS文件都不過是普通的文件,加上一些額外信息。這些文件會簡單的重複本地文件的樹結構。所以,沒必要擔憂有什麼數據損失,若是必要的話能夠手工修改RCS文件。瀏覽器
SVN是基於關係數據庫的(BerkleyDB)或一系列二進制文件的(FS_FS)。一方面這解決了許多問題 (例如,並行讀寫共享文件)以及添加了許多新功能(例如運行時的事務特性。)。然而另外一方面,數據存儲由此變得不透明。安全
2 速度bash
CVS比較慢。服務器
總體而言,因爲架構實現的不一樣, SVN的確比CVS快不少。在網絡上它只傳輸不多的信息並支持更多的離線模式的功能。但這也是有代價的。速度的代價就是巨大的存儲(徹底備份全部的工做文件)。
3 標誌&分支
SVN採用標誌和分支而拋棄了其餘三件東西,實際上這意味着他們把這個概念替換爲在檔案庫內部複製文件或目錄以便保存日誌。這樣一來,不管標誌建立仍是分支建立都只是倉庫內部的文件複製了。對分支而言:分支不過是在倉庫內部的一個單獨的目錄而已了,不像早期還有些什麼交錯。對標誌而言:已經不能對代碼加標誌了。在某種程度上說,SVN全文件編號補足了這個缺陷,SVN裏整個倉庫都有版本號,但不是針對單個文件。
4 元數據
CVS只容許存儲文件。
SVN容許一個文件有任意多的可命名屬性,功能十分徹底。
5 文件類型
CVS最初是爲文本文件存儲而設計的。所以其餘文件類型(二進制,統一碼)文件的支持幾乎沒有,如須要的話則要有其餘信息,而且客戶端服務器端都要調整。
SVN會關心全部的文件類型,不須要你來手工操做。
Cvs 因爲以前CVS編碼的問題,如今大多數軟件開發公司都使用SVN替代了CVS
Svn
git 分佈式版本控制器
SVN 服務器運行模式:
模式1: svn服務器 監聽: 3690端口 訪問: svn://IP
模式2: svn 服務器+ apache : 80 端口 訪問: http://IP 今天要講的
安裝: svn服務器,apache, mod_dav_svn 軟件包
svn服務器使用流程
實戰:CentOS 6 上安裝配置 svn server+apache
# yum install subversion httpd mod_dav_svn -y
mod_dav_svn模塊 : apache http 服務器的插件,可讓版本庫經過http協議,在網站上展示。
建立版本庫目錄,並修改相應權限。
[root@localhsot ~]# mkdir /var/repos
建立兩個項目倉庫。 xuegod.cn和svn2
[root@localhsot ~]# svnadmin create /var/repos/xuegod.cn
[root@localhsot ~]# svnadmin create /var/repos/svn2
[root@localhsot ~]# ls /var/repos/xuegod.cn
conf db format hooks locks README.txt
[root@localhost conf]#ls /var/repos/xuegod.cn/conf
authz passwd svnserve.conf
#注:用戶權限配置咱們使用apache的,這裏暫時不用svn自帶
啓動:SVN服務器
[svn@localhsot conf]# svnserve -d -r /var/repos/
-d表示以daemon方式(後臺運行)運行
-r /var/repos指定svn根目錄是/var/repos
[svn@localhsot conf]# ps -axu | grep svn
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
root 6982 0.0 0.0 161476 1924 pts/2 S 18:09 0:00 su - svn
svn 6983 0.0 0.0 108392 1864 pts/2 S 18:09 0:00 -bash
svn 7262 0.0 0.0 182760 1056 ? Ss 18:26 0:00 svnserve -d -r /var/repos/
[svn@localhsot conf]# netstat -antup | grep 3690
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 7262/svnserve
svn服務器搭建流程:
1、安裝: yum install subversion httpd mod_dav_svn
2、建立倉庫存儲代碼: svnadmin create /var/repos/xuegod.cn
3、啓動svn服務器:svnserve -d -r /var/repos/
APACHE
第一步,查看apache支持subversion兩個動態庫有沒有安裝成功。
查看:
[root@localhost conf]# vim /etc/httpd/conf.d/subversion.conf #看到下面配置文件中兩個模塊相關信息,說明安裝成功。
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
配置apache經過mod_dav_svn模塊訪問SVN服務器
[root@localhost ~]# vim /etc/httpd/conf.d/subversion.conf
<Location /svn>
DAV svn
SVNParentPath /var/repos
AuthType Basic
AuthName " SVN server of xuegod!"
AuthUserFile /home/svn/passwd
AuthzSVNAccessFile /home/svn/auth
Require valid-user
</Location>
註釋:
<Location /svn> #apache的虛擬目錄。後期經過連接:http://192.168.1.63/svn 來訪問兩個倉庫:xuegod和svn2
DAV svn
SVNParentPath /var/repos #存放兩個倉庫:xuegod和svn2的真實目錄
AuthType Basic
AuthName " SVN server of xuegod!" #apache認證時彈出的消息
AuthUserFile /home/svn/passwd # passwd存儲用戶名和密碼
AuthzSVNAccessFile /home/svn/auth #存放用戶的權限
Require valid-user
</Location>
創建本地訪問控制文件/home/svn/passwd,#後期經過httpd服務器訪問svn時,會使用這個文件中的用戶信息驗證用戶和密碼
[root@localhsot ~]# mkdir /home/svn
[root@localhsot ~]# htpasswd -c /home/svn/passwd tube
# -c create, 建立/home/svn/passwd文件。會提示你輸入密碼,默認是MD5加密
New password: 123456
Re-type new password:
Adding password for user tube
[root@localhost ~]# htpasswd /home/svn/passwd cd #後期再建立時,就不須要加-c參數,不然,會把以前添加到/home/svn/passwd中信息,所有覆蓋。
New password: 123456
Re-type new password:123456
Adding password for user tree
查看用戶名和密碼:
[root@localhost ~]# cat /home/svn/passwd
cd:sjplr6rMtpN3E
tube:gZEcmDnMwFsMc
注:tube和cd兩個用戶的明文密碼都同樣,可是加完密碼之後是不同。
加密時: (密碼+用戶名 ) md5 -》 ll7IH3i5G0JfU
第四步,創建本地項目版本庫,權限控制文件。
達到如下目標:
用戶 倉庫 權限
tube xuegod.cn,svn2 rw
cd xuegod.cn rw
[root@localhost ~]# vim /home/svn/auth #寫入如下內容
[/]
tube = rw
[xuegod.cn:/]
cd = rw
解釋:
[/] # 這個表示在全部倉庫的根目錄下
tube = rw # 表示tube用戶對全部倉庫根目錄下的軟件版本庫有rm權限
[xuegod.cn:/] #這表示,倉庫xuegod.cn的根目錄下的訪問權限
cd= rw # cd用戶對xuegod.cn倉庫具備讀和寫權限
給目錄權限
[root@localhost conf.d]# chmod 777 /var/repos/ -R
[root@localhost ~]# service httpd restart
svn的訪問地址是: http://192.168.10.64/svn/xuegod.cn
而後在瀏覽器上面,輸入:192.168.168.140/svn
總結:配置apache+svn
1、修改配置文件:vim /etc/httpd/conf.d/subversion.conf 讓apache能夠支持svn
2、建立SVN用戶和密碼文件: /home/svn/passwd htpasswd
3、建立SVN權限管理文件:/home/svn/auth
SVN客戶端使用說明
subversion windows客戶端TortoiseSVN配置:
http://tortoisesvn.net/about.zh.html
新一個文件夾:localhost
取出版本爲0的數據:
上傳代碼:
隨意保存一個網頁,把網頁源代碼複製到目錄localhost中,而後提交第一個網站代碼:
在瀏覽器裏輸入:192.168.168.140/svn/localhost
在Linux下測試客戶端:
[root@localhost ~]# svn checkout http://192.168.10.63/svn/xuegod.cn xuegod.cn
認證領域: <http://192.168.10.63:80> SVN server of xuegod!
「root」的密碼:
認證領域: <http://192.168.10.63:80> SVN server of xuegod!
用戶名: tube
「tube」的密碼:
經過在「/root/.subversion/servers」中設置選項「store-plaintext-passwords」爲「yes」或「no」,
來避免再次出現此警告
保存未加密的密碼(yes/no)?no
A localhost .cn/salt主機地址密碼.txt
A localhost .cn/新建虛機需知.txt
取出版本 1。
[root@localhost ~]# cd localhost/
[root@localhost localhost ]# ls
index.html TortoiseSVN - About_files TortoiseSVN - About.htm