目錄
一、svn簡介
二、常見的版本控制軟體
三、svn 的運作方式
四、SVN存儲版本資料的方式
五、svn工作流程
1、SVN+Apache運作原理
六、服務搭建
七、本機使用SVN
八、SVN用戶端安裝使用說明
1、svn圖示代表含義
九、總結
前言:SVN 是最流行的版本管理軟體之一,可以為源碼或者文檔記錄每次的修改記錄,是開發團隊協作必備的工具。我們将講解如何使用Apache來搭建SVN服務端,Linux伺服器我們使用CentOS 7為例。
apache+svn實作http通路svn資源
一、svn簡介
SVN 是最流行的版本管理軟體之一,可以為源碼或者文檔記錄每次的修改記錄,是開發團隊協作必備的工具。svn是Subversion的簡稱,是一個開放源代碼的版本控制系統,相較于RCS、CVS,它采用了分支管理系統,它的設計目标就是取代CVS。網際網路上很多版本控制服務已從CVS遷移到Subversion。如何使用Apache來搭建SVN服務端,Linux伺服器我們使用CentOS 7為例.
二、常見的版本控制軟體
Cvs 由于之前CVS編碼的問題,現在大多數軟體開發公司都使用SVN替代了CVS
Svn 集中式版本控制器
git 分布式版本控制器
Git是一個開源的分布式版本控制系統,用以有效、高速的處理從很小到非常大的項目版本管理。Git 是 Linus Torvalds (林納斯·托瓦茲)為了幫助管理 Linux 核心開發而開發的一個開放源碼的版本控制軟體。
GitLab版本管理
GitLab是利用 Ruby on Rails 一個開源的版本管理系統,
實作一個自托管的Git項目倉庫,可通過Web界面進行通路公開的或者私人項目。
它擁有與Github類似的功能,能夠浏覽源代碼,管理缺陷和注釋。
可以管理團隊對倉庫的通路,它非常易于浏覽送出過的版本并提供一個檔案曆史庫。
團隊成員可以利用内置的簡單聊天程式(Wall)進行交流。
它還提供一個代碼片段收集功能可以輕松實作代碼複用,便于日後有需要的時候進行查找
三、svn 的運作方式
模式1:svn單獨運作 監聽: 3690端口 通路: svn://IP
模式2: svn + apache 監聽: 80 端口 通路: http://IP
#兩種方式各有利弊,可以自行選擇
四、SVN存儲版本資料的方式
BDB(一種事務安全型表類型)
FSFS (一種不需要資料庫的存儲系統)。
因為BDB方式在伺服器中斷時,有可能鎖住資料,是以還是FSFS方式更安全一點
五、svn工作流程
集中式代碼管理的核心是伺服器,所有開發者在開始新一天的工作之前必須從伺服器擷取代碼,然後開發,最後解決,送出。所有的版本資訊都放在伺服器上。如果脫離了伺服器,開發者基本上可以說是無法工作的。
舉例:
開發開始新一天的工作
1、從伺服器下載下傳項目組最新代碼。
2、進入自己的分支,進行工作,每隔一個小時向伺服器自己的分支送出一次代碼
(很多人都有這個習慣。因為有時候自己對代碼改來改去,最後又想還原到前一個小時的版本,或者看看前一個小時自己修改了哪些代碼,就需要這樣做了)。
3、下班時間快到了,把自己的分支合并到伺服器主分支上,一天的工作完成,并反映給伺服器。
這就是經典的svn工作流程
1、SVN+Apache運作原理
SVN搭配Apache的時候,Apache需要使用mod_dav_svn這個子產品。
運作機制:

在一台伺服器上建立一個源代碼庫,庫裡可以存放許多不同項目的源程式。有源代碼庫管理者統一管理這些源程式。
每個使用者在使用源代碼庫之前,首先要把源代碼庫裡的項目檔案下載下傳到本地,然後開發人員可以在本地修改,然後用svn指令進行送出,由源代碼庫統一管理修改。
mod_dav_svn 可以讓版本庫通過http協定實作網站展現。
六、服務搭建
搭建要求: svn伺服器,apache, mod_dav_svn 軟體包
# mod_dav_svn子產品 : apache http 伺服器的插件,可以讓版本庫通過http協定,在網站上展現。
關閉防火牆
systemctl stop firewalld
setenforce 0
安裝svn服務 apache服務 和 mod_dav_svn 子產品
yum install httpd subversion mod_dav_svn -y
前往 /etc/httpd/modules/ 下,檢查是否包含mod_dav_svn.so和mod_authz_svn.so,
如果有,mod_dav_svn安裝成功。
開機自啟httpd服務
systemctl start httpd
systemctl enable httpd
浏覽器測試服務正常
hpptd:目錄結構
配置檔案:/etc/httpd/conf/httpd.conf
其他配置:/etc/httpd/conf.d --其他程式的配置檔案,例如Subversion.conf
程式目錄:/var/www/html
日志目錄:/var/log/httpd
建立svn倉庫
建立倉庫目錄
mkdir -p /var/www/svn-repos
建立svn版本庫
[[email protected] www]# cd svn-repos/
svnadmin create repo1
修改使用者、組權限
[[email protected] svn-repos]# chown -R apache:apache repo1/
檢視版本庫
conf目錄:是這個倉庫的配置檔案(倉庫的使用者通路賬号、權限等),也是我們要關注的配置檔案
db目錄:就是所有版本控制的資料存放檔案
format檔案:是一個文本檔案,裡面隻放了一個整數。表示目前檔案庫配置的版本号
hooks目錄:放置hook腳本檔案的目錄
locks目錄:用來放置subversion監控鎖定資料的目錄,用來追蹤存取檔案庫的用戶端
dav目錄:是提供apache與mod_dav_svn使用的目錄,讓他們存儲内部資料,剛開始建立時此目錄沒有
修改目前倉庫的配置檔案
禁用匿名使用者并開啟驗證使用者權限。
vim /var/www/svn-repos/repo1/conf/svnserve.conf
anon-access = none #關閉匿名通路
auth-access = write #驗證使用者可寫
password-db = passwd #指向驗證使用者名密碼的資料檔案 passwd
auth-db=authz #指向驗證使用者的權限配置檔案 authz
注意:此配置檔案的所有内容必須頂格,否則會報錯
配置apache通過mod_dav_svn 子產品來通路SVN伺服器
httpd: 肯定是要安裝的
Mod_dav_svn : 是一個子產品 首先讓SVN與apache 之間互聯
SVN+Apache
SVN+Apache的需要subversion的兩個動态庫支援,同時我們需要密碼的驗證支援!
檢視apache對svn子產品的支援
[[email protected] ~]# vim /etc/httpd/conf.modules.d/10-subversion.conf
#有下面svn相關庫,就證明安裝成功
修改svn配置檔案
[[email protected] ~]# vim /etc/httpd/conf.d/subversion.conf
<Location /svn-repos>
DAV svn
SVNParentPath /var/www/svn-repos
AuthType Basic
AuthName " hello SVN user liyong! "
AuthUserFile /var/www/svn-repos/repo1/conf/passwd
AuthzSVNAccessFile /var/www/svn-repos/repo1/conf/authz
Require valid-user
</Location>
解釋:
<Location /svn-repos>
DAV svn
SVNParentPath /var/www/svn-repos/repo1 #svn倉庫路徑
AuthType Basic
AuthName " hello SVN user liyong! " #apache認證時彈出的消息
AuthUserFile /var/www/svn-repos/repo1/conf/passwd # passwd存儲使用者名和密碼的路徑
AuthzSVNAccessFile /var/www/svn-repos/repo1/conf/authz #存放使用者的權限路徑
Require valid-user
</Location>
注:配置檔案中
SVNPath和SVNParentPath 的差別
SVNParentPath是在倉庫目錄的上一級。
SVNPath就是在倉庫的目錄下
兩個不同的參數
SVNParentPath /var/www/svn-repos
或者
SVNPath /var/www/svn-repos/repo1
兩種通路的模式不一樣,SVNParentPath就是通路位址/svn/後面要加倉庫名稱,而另外一個不用加,直接/svn/就是倉庫了。
重新啟動httpd服務
[[email protected] ~]# systemctl restart httpd
(重新開機時如果顯示 Could not reliably determine the server's fully qualified domain name,則 vim /etc/httpd/conf/httpd.conf , 加入 ServerName localhost:80)
建立本地通路控制檔案
使用htpasswd建立使用者,首次建立使用者。位置和subversion.conf裡的一樣,給第一個使用者添加密碼時要加c,意思是建立這個檔案,以後就不用加了 。
#後期通過httpd伺服器通路svn時,會使用這個檔案中的使用者資訊驗證使用者和密碼。
[[email protected] ~]# cd /var/www/svn-repos/repo1/
[[email protected] repo1]# ls
conf db format hooks locks README.txt
[[email protected] repo1]# cd conf/
[[email protected] conf]# ls
authz passwd svnserve.conf
( 執行添加使用者指令必須在passwd檔案所在的目錄下執行,
否則會另外建立一個passwd檔案,之前的passwd檔案和配置會失效)
[[email protected] conf]# htpasswd -cb passwd liy 123456
在指令行直接建立,改指令會 自動添加svn賬号和加密的密碼)
-c : 建立passwd檔案,預設為MD5加密
-b:在指令行中一并輸入使用者名和密碼而不是根據提示輸入密碼
注意:#後期再建立時,就不需要加-c參數,否則,會把之前添加到/var/www/svn-repos/repo1/conf/passwd中資訊,全部覆寫。
#添加使用者
htpasswd -b passwd 設定使用者名 設定密碼
#删除使用者
htpasswd -D passwd user
#修改使用者密碼
htpasswd passwd user
建立本地項目版本庫,權限控制檔案
達到以下目标:
使用者 倉庫 權限
liy repo1 rw
..... ...... ......
[[email protected] ~]# cd /var/www/svn-repos/repo1/
[[email protected] repo1]# ls
conf db format hooks locks README.txt
[[email protected] repo1]# cd conf/
[[email protected] conf]# ls
authz passwd svnserve.conf
[[email protected] conf]# vim authz
[/]
liy = rw
解釋:
[/] # 表示在所有倉庫的根目錄下
liy = rw # 表示 liy 使用者對所有倉庫根目錄下的軟體版本庫有rw權限
例:權限配置設定
[groups] 這個表示群組設定
Admin=usr1,user2 這個表示admin群組裡的成員 user1,user2
Develop=u1, u2 這個表示Develop群組裡的成員 u1,u2
[repo1:/] 這表示,倉庫repo1的根目錄下的通路權限
user1 = rw repo1倉庫user1使用者具有讀和寫權限
user2 = r repo1倉庫userl使用者具隻有讀權限
@develop=rw 這表示 群 develop的成員都具有讀寫權限
[/] 這個表示在所有倉庫的根目錄下
* = r 這個表示對所有的使用者都具有讀權限
注意:在編輯authz.conf檔案時,所有行都必須要頂頭寫,不能有縮行出現,否則會報錯:"Access denied: 'user1' ",裡面的内容可以根據自己的需要自行添加。
給目錄授權,并重新開機httpd
[[email protected] ~]# vim /etc/sysconfig/svnserve
Linux系統配置檔案/etc/sysconfig 修改指定倉庫路徑
重新開機httpd服務和svn倉庫服務
浏覽器測試通路效果
七、本機使用SVN
現實中都是下載下傳用戶端:
日常工作中我們使用SVN都是在圖形化作業系統下使用,實際上圖形化的操作在軟體内部都是對應的指令。
常見的選項
import | 将未版本化的檔案納入版本控制并送出 |
checkout | 從版本庫中檢出 |
update | 更新工作拷貝 |
add,delete,copy,move | 增、删、複制、移動檔案或目錄 |
status | 檢查狀态差異 |
diff | 檢查檔案行級詳細差異 |
revert | 恢複 |
resolve | 解決沖突 |
switch | 切換工作拷貝對應的版本庫分支 |
log | 檢視曆史記錄 |
list | 顯示檔案目錄 |
cat | 檢視某個檔案内容 |
/建立一個本地代碼目錄
svn import /home/daima/ file:///var/www/svn-repos/repo1 -m “first ”
将代碼檔案送出給svn倉庫
-m “注釋(随意寫)”
八、SVN用戶端安裝使用說明
http://tortoisesvn.net/about.zh.html #用戶端下載下傳位址
下載下傳完成後,直接就是輕按兩下運作,然後一直是下一步的進行安裝就好了
# 注: 下載下傳 32 或者是 64 根據自己的作業系統來決定,我這裡是安裝的 64
此時你安裝的是英文版,如果你需要漢化,則在下載下傳頁面繼續往下滾動,找到如下圖下載下傳中文語言包
安裝完成用戶端後,滑鼠右擊
點選ok會提示你輸入使用者名和密碼
倉庫更新(同步)
建立代碼上傳
在SVN目錄右鍵這個源碼檔案
輸入注釋,OK
1、svn圖示代表含義
正常圖示:當用戶端檔案和服務端檔案完全同步時,顯示以上圖示
沖突圖示:當用戶端送出的檔案和伺服器端資料有沖突
删除圖示:當服務端資料已删除,用戶端該檔案顯示以上圖示
增加圖示:當我們編寫的檔案添加到送出隊列,系統自動顯示
無版本控制圖示:當我們編寫的檔案沒有添加到上傳隊列時
修改圖示:當有檔案有修改但未送出
隻讀圖示:當用戶端檔案以隻讀形式存在時
鎖定圖示:當服務端資料已鎖定,用戶端自動顯示
忽略圖示:用戶端檔案已忽略,不需要進行送出上傳
九、總結
svn預設通過svn://通路,如果想要其通過http通路則需要依賴apache-httpd,apache提供了mod_dav_svn元件,該元件可以讓svn和apache關聯,簡單來說SVN就是用于多個人共同開發同一個項目,共用資源的目的。SVN 版本控制系統, 在 2000 年由 CollabNet Inc 開發,現在發展成為 Apache 軟體基金會的一個項目。