­

SVN版本控制服務

  • 2019 年 11 月 12 日
  • 筆記

1、SVN介紹

SVN是Subversion的簡稱,是一個開放源程式碼的版本控制系統,相較於CVS,它採用了分支管理系統,它的設計目標就是取代CVS。互聯網上很多版本控制服務已從CVS遷移到Subversion。也是就是CVS的接班人!

CVS是一個C/S系統,是一個常用的程式碼版本控制軟體。主要在開源軟體管理中使用。與它相類似的程式碼版本控制軟體有subversion。多個開發人員通過一個中心版本控制系統來記錄文件版本,從而達到保證文件同步的目的。CVS版本控制系統是一種GNU軟體包,主要用於在多人開發環境下的源碼的維護。但是由於之前CVS編碼的問題,現在大多數軟體開發公司都使用SVN替代了CVS。

官方網站:Windows客戶端 TortoiseSVN

2、常見的版本控制軟體

CVS,逐漸被SVN取代,是CVX重寫版和改寫版

SVN,Subversion

Git,Git是一個開源的分散式版本控制系統,用以有效、高速的處理從很小到非常大的項目版本管理。Git 是 Linus Torvalds (林納斯·托瓦茲)為了幫助管理 Linux 內核開發而開發的一個開放源碼的版本控制軟體是利用 Ruby on Rails 一個開源的版本管理系統,實現一個自託管的Git項目倉庫,可通過Web介面進行訪問公開的或者私人項目。它擁有與Github類似的功能,能夠瀏覽源程式碼,管理缺陷和注釋。可以管理團隊對倉庫的訪問,它非常易於瀏覽提交過的版本並提供一個文件歷史庫。團隊成員可以利用內置的簡單聊天程式(Wall)進行交流。它還提供一個程式碼片段收集功能可以輕鬆實現程式碼復用,便於日後有需要的時候進行查找。

3、SVN存儲數據的方式

BDB,Berkeley DB,一種事務安全型表類型

FSFS,"FSFS" 採用文件系統的方式, 替代原來的基於Berkeley DB的實現

註:因為BDB方式在伺服器中斷時,有可能鎖住數據,所以還是FSFS方式更安全一點

4、SVN的運行方式及埠

獨立伺服器 3690埠 訪問方式SVN:// C/S模式

藉助apache運行 80埠 訪問方式 http://

5、工作流程

集中式程式碼管理的核心是伺服器,所有開發者在開始新一天的工作之前必須從伺服器獲取程式碼,然後開發,最後解決衝突,提交。所有的版本資訊都放在伺服器上。如果脫離了伺服器,開發者基本上可以說是無法工作的。下面舉例說明:開始新一天的工作:

1、從伺服器下載項目組最新程式碼。

2、進入自己的分支,進行工作,每隔一個小時向伺服器自己的分支提交一次程式碼。

(很多人都有這個習慣。因為有時候自己對程式碼改來改去,最後又想還原到前一個小時的版本,或者看看前一個小時自己修改了哪些程式碼,就需要這樣做了)。

3、下班時間快到了,把自己的分支合併到伺服器主分支上,一天的工作完成,並反映給伺服器。

6、搭建svn服務

6.1軟體安裝

 [root@localhost ~]# yum install subversion

6.2創建版本庫目錄

 [root@localhost ~]# mkdir /svn ##存放版本庫的主目錄   [root@localhost ~]# svnadmin create /svn/yunweimao ##創建一個版本庫

svnadmin命令是由subversion這個軟體包提供的

 [root@localhost ~]# ls /svn/yunweimao/   conf db format hooks locks README.txt   dav目錄:是提供apache與mod_dav_svn使用的目錄,讓他們存儲內部數據,剛開始新建時此目錄沒有   db目錄:就是所有版本控制的數據存放文件   hooks目錄:放置hook腳本文件的目錄   locks目錄:用來放置subversion監控鎖定數據的目錄,用來追蹤存取文件庫的客戶端   format文件:是一個文本文件,裡面只放了一個整數。表示當前文件庫配置的版本號   conf目錄:是這個倉庫的配置文件(倉庫的用戶訪問帳號、許可權等),也是我們要關注的配置文件   [root@localhost ~]# ls /svn/yunweimao/conf/   authz passwd svnserve.conf   authz  #認證許可權相關   passwd  ##用戶名和密碼   svnserve.conf  ##伺服器配置文件

6.3修改配置文件

 [root@localhost ~]# vim /svn/yunweimao/conf/svnserve.conf   [general]   12anon-access =read            #原先注釋掉了,匿名用戶可以讀,使用none的話就是匿名用戶不可以訪問   13auth-access =write            #這幾行都要取消注釋,認證用戶可以寫,可以是read,write,none   20password-db =passwd        #密碼庫文件,默認使用的是同一目錄下的passwd文件作為用戶密碼庫   27authz-db =authz               #認證許可權文件   32realm =My First Repository      #登陸提示資訊   ##注意:此配置文件的所有內容必須頂格,否則會報錯
 [root@localhost ~]# vim /svn/yunweimao/conf/passwd   [users]    7Make =123456    8MAN =123456    9top=123456   ##注意:對於部分版本,前面的[users]是有#號的,如果有#號,一定要取消,否則只能使用匿名用戶登錄,客戶端登錄不會出現登錄窗口或密碼提示,除非在配置文件將anon設置為none,否則將返回一個錯誤   ##這裡的密碼都是明文,沒有加密
 [root@localhost ~]# vim /svn/yunweimao/conf/authz   21[groups]   22# harry_and_sally = harry,sally   23# harry_sally_and_joe = harry,sally,&joe   24Check = Make,MAN   25[/]   26top = rw   27@Check = r   28*=   ##SVN目錄格式:    ##                       [/目錄名]    ##                       @用戶組名 =許可權    ##                       用戶名 =許可權    ##                       *=

6.4服務SVN啟動及創建測試程式碼

 [root@localhost ~]# svnserve -d -r /svn/ ##啟動了所有版本庫, 再 –r。如果只需要某一個版本庫,後面添加/webdept/www.xuegod.cn/的版本庫即可   -d=daemon -r=root of directory of save指定根目錄   [root@localhost ~]# ps -aux | grep svn ##查詢到下面這行內容就可以了   Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ   root      3768 0.0  0.0 152412  732?       Ss   13:35   0:00 svnserve -d-r/svn/   root      3770 0.0  0.0 103336  868pts/0   D+  13:37   0:00 grepsvn   [root@localhost ~]# netstat -antup | grep svn ##查看埠正常   tcp        0     00.0.0.0:3690                0.0.0.0:*                   LISTEN      3768/svnserve  

7、使用svn導入測試程式碼

導入測試程式碼格式: svn [選項] 源碼 svn://server ip/項目名

 [root@localhost ~]# mkdir localsvn   [root@localhost ~]# cd localsvn/   [root@localhost localsvn]# touch 1.html 2.html 4.php   [root@localhost localsvn]# cd   [root@localhost ~]# svn import /root/localsvn/ file:///svn/yunweimao/ -m "first edit"   增加           /root/localsvn/1.html   增加           /root/localsvn/2.html   增加           /root/localsvn/4.php     提交後的版本為 1。

8、程式碼取出

 [root@localhost ~]# svn checkout svn://localhost/yunweimao/ downsource ###程式碼取出到downsource,會在當前目錄新建這個目錄

9、程式碼添加

 [root@localhost ~]# cd downsource/   [root@localhost downsource]# touch 5.html   [root@localhost downsource]# svn add 5.html   [root@localhost downsource]# svn commit -m "second edit"

10、擴展

checkout:check out導出獲得文件後,導出的文件仍處於SVN版本控制中,與版本庫保持關聯,比如你可以進行Svn Update或者Svn Commit操作,checkout是第一次用,後面的用法就是更新。

add 功能:向文件拷貝所在的文件夾中添加新的文件,並作出標識,是新添加的,下一步提交時將一併提交到Subversion版本庫中去。簡單的說就是將一個新文件加入svn,你添加再提交後該文件就進入subversion版本中去了。

commit,SVN的提交是將在工作空間做的修改進行提交,包括文件內容的修改,文件或目錄的添加,刪除,命名,移動等操作。開發項目時,你會在工作拷貝中修改項目的程式碼,你總要把修改之後做過的改動又存回到項目倉庫中去。這個過程稱為「提交」。提交是將你對工作拷貝所作的所有改動發送並存儲到中央項目倉庫中。