日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

搭建SVN版本控制服务器

發布時間:2025/7/14 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 搭建SVN版本控制服务器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

搭建SVN版本控制服務器

一:實驗目標

實戰:搭建svn服務器+ apache版本控制服務器?

二:實驗環境

? ? ? ? ? ? ? ? ?系統版本: rhel-server-6.5-x86_64-dvd

SVN+apache服務端:xuegod63.cn IP192.168.1.63

客戶端:xuegod64.cn IP192.168.1.64

服務概述:

????由于各個公司所對服務的需求不同,會安裝各種不同版本的服務軟件,所以管理起來會很困難。在此環境中,會出現代碼沖突,項目不同版本的發布困難甚至代碼整合期間會出現bug。如果一個項目是由多個開發人員共同開發的,但是這些個開發人員都不在個地方,那么如何來完成這個項目的開發呢?隨著問題的出現,應運而生了各種版本控制軟件。其中市場上較為常見的版本控制軟件有cvs,svn和git。Cvs已經成為了過去式,svn是當下較為流行的,是cvs的接班人。

?

Svn的運行模式有兩種

模式

端口

運行模式

svn

3690

C/S

svn+apache

80

C/S

svn的基本工作原理:

????服務器上建立一個源代碼庫,庫里可以存放許多不同項目的源程序。有源代碼庫管理員統一管理這些源程序。每個用戶在使用源代碼庫之前,首先要把源代碼庫里德項目文件下載到本地,然后開發人員可以在本地修改,然后用svn命令進行提交,由源代碼庫統一管理修改。

?

mod_dav_svn的作用

?????由于Subversion需要版本化的控制,因此標準的HTTP協議不能滿足需求。要讓Apache與Subversion協同工作,就要使用WebDAV(Web-basedDistributedAuthoringandVersiong)Web分布式創作和版本控制協議。WebDAV是HTTP1.1的擴展,關于WebDAV的規范和工作原理,可以參考IETFRFC2518。簡單的說mod_dav_san模塊就是作為Subversion與Apache之間的接口的連接線,通過它,Apache就可以訪問版本庫,并且可以讓客戶端也使用HTTP的擴展協議WebDAV/DeltaV進行訪問

?

三:實驗代碼

環境安裝svn.apachemod_dav_svn模塊 ?

[root@xuegod64 ~]# vim /etc/services

?

[root@xuegod63~]#yum install subversion httpd mod_dav_svn -y

?

配置xuegod63上的svn服務器

1建立一個用戶,用于管理SVN版本庫類似于這個庫的管理員

[root@xuegod63~]#useradd svn


2創建版本庫目錄,并修改相應權限管理員對這個庫的權限

[root@xuegod63~]#mkdir /var/repos

[root@xuegod63~]#chown svn.svn /var/repos


3創建兩個項目倉庫。 svn1和svn2

[root@xuegod63 ~]# su - svn

[svn@xuegod63 ~]$ svnadmin create /var/repos/svn1 ??

[svn@xuegod63 ~]$ svnadmin create /var/repos/svn2 #管理員創建版本控制倉庫svn

[svn@xuegod63 ~]$ cd /var/repos/svn1

[svn@xuegod63 svn1]$ ls

conf ?db ?format ?hooks ?locks ?README.txt

[svn@xuegod63 svn1]$ ls conf/

authz ?passwd ?svnserve.conf?

?

查看配置中的各個文件的作用

[root@xuegod63 repos]# cat /var/repos/svn1/conf/authz

注釋:?

每個文件的作用

Authz

權限

Passwd

用戶名和密碼

svnserve.conf

服務器的配置文件

?

[root@xuegod63 repos]# cat /var/repos/svn1/conf/svnserve.conf

anon-access?=?none

#匿名訪問的權限,可以是read,write,none,默認為read,如果你不愿意匿名共享請配置為none

auth-access=write

#認證用戶的權限,可以是read,write,none,默認為write

password-db=passwd

#密碼數據庫的路徑,去掉前面的#,默認使用的是同一目錄下的passwd文件作為用戶認證方式

authz-db=authz

#權限驗證文件

realm=svn1

#此選項指定庫的認證領域。

?

[root@xuegod63 conf]# cat /var/repos/svn1/conf/passwd

注:格式為:用戶名=密碼

注意

1.

一定要去掉[users]前面的#,否則svn只能以匿名用戶登錄,客戶端不會出現登錄窗口戒密碼提示,除非你的anon不為none,否則將迒回一個錯誤。

2.

里的密碼都是明文沒有加密的。

?

4:修改配置文件authz

[root@xuegod63 conf]# vim /var/repos/svn1/conf/authz #在最后添加以下內容:

參數說明:[groups]

Admin?=?tube

#創建一個組admin,admin組中有成員tube。

[/] @admin = rw

#表示admin組中所有成員,可以讀寫/var/repos中所有文件。

[/var/repos/svn1]

user1 = rw

rw(表示user1能夠讀寫/var/repos/svn1目錄下的所有信息)

[/var/repos/svn2]

user2=r?

user2=r(表示user2能夠讀/var/repos/svn2目錄下的所有信息)

?

5:啟動SVN服務器

#使用用戶svn來管理版本庫目錄/var/repos,則須轉為svn用戶,命令如下:?

[svn@xuegod63 conf]$ svnserve -d -r /var/repos/

d

表示以daemon方式(后臺運行)運行

r

指定根目錄是/var/repos

[svn@xuegod63 conf]$ netstat -antup | grep 3690

tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 7262/svnserve

?

6:iptables開放服務器端口 :svn默認端口是3690

[root@xuegod63 ~]# iptables -A INPUT -p tcp --dport 3690 -j ACCEPT

[root@xuegod63 ~]# /etc/init.d/iptables save

?

7:管理員上傳源代碼到庫中

[root@xuegod63 ~]# cp extundelete-0.2.4.tar.bz2 /home/svn #拷貝到管理員家中

[svn@xuegod63 ~]$ tar jxvf extundelete-0.2.4.tar.bz2

[svn@xuegod63 ~]$ mv extundelete-0.2.4 extundelete

[svn@xuegod63 ~]$ cd extundelete

[svn@xuegod63 extundelete]$ ls

acinclude.m4 ?config.h.in ??depcomp ????Makefile.am ?README

aclocal.m4 ???configure ????install-sh ?Makefile.in ?src

autogen.sh ???configure.ac ?LICENSE ????missing

?

?

8:管理員把源代碼導到SVN服務器上--獨立服務器的方式

[svn@xuegod63 ~]$ svn import extundelete/ file:///var/repos/svn1 -m 'svn v1'?

?

9:查看apache支持subversion兩個動態庫有沒有安裝成功。 ?

[root@xuegod63 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

?

配置xuegod63上的apache服務器

1:配置apache支持SVN

[root@xuegod63 ~]# vim /etc/httpd/conf/httpd.conf #apache使用的用戶和組都改為svn的管理員

User svn

Group svn

?

2:配置apache下的svn,知道倉庫,認證路徑等

[root@xuegod63 ~]# vim /etc/httpd/conf.d/subversion.conf

<Location /svn>

DAV svn

SVNParentPath /var/repos #倉庫的根目錄

AuthType Basic ?#認證類型

AuthName "Subversion repository" ?#認證窗口,彈出的消息

AuthUserFile /home/svn/passwd ?#認證用戶的路徑

AuthzSVNAccessFile /home/svn/auth ?#建立本地項目版本庫的權限控制文件

Require valid-user

</Location>

?

3:建立訪問控制文件/home/svn/passwd---類似于代碼開發人員的用戶

#后期通過httpd服務器訪問svn時,會使用個文件中的用戶信息驗證用戶和密碼。

生成用戶和密碼的工具

[root@xuegod63 ~]# which htpasswd

/usr/bin/htpasswd

[root@xuegod63 ~]# rpm -qf /usr/bin/htpasswd

httpd-tools-2.2.15-29.el6_4.x86_64 ?

[root@xuegod63 ~]# htpasswd -c /home/svn/passwd tube # -c #如果沒有/home/svn/passwd則創建。會提示你輸入密碼,默認是MD5加密

New password: 123456

Re-type new password: 123456

[root@xuegod63 ~]# htpasswd /home/svn/passwd mk #后期再創建時,就不需要加-c參數,否則,會把之前添加到/home/svn/passwd中信息,全部覆蓋。

[root@xuegod63 ~]# htpasswd /home/svn/passwd testuser3

查看用戶名和密碼:

[root@xuegod63 ~]# cat /home/svn/passwd

tube:ll7IH3i5G0JfU

mk:KvoOCCmj2qla2

testuser3:tSp3bA63WPGXU

?

4:建立本地項目版本庫的權限---類似于代碼開發人員的權限

[root@xuegod63 ~]# vim /home/svn/auth #寫入以下內容

[/]

tube = rw

[svn1:/]

@group1 = rw

?= rw

[svn2:/]

@group2 = rw

[groups]

group1 = testuser1,testuser2

group2 = testuser3,testuser4

?

解釋:

[/] # 表示所有倉庫的根目錄

tube = rw # 表示tube用戶對所有倉庫的根目錄都有rw權限?

[svn1:/] #表示倉庫svn1的根目錄

@group1 = rw #group1組中的用戶對svn1倉庫有讀寫權限 如果在前面加上@符號,則表示是個群組權限設置,

mk = rw # mk用戶對svn1倉庫具有讀和寫權限

[svn2:/]

@group2 = rw

[groups]

group1 = testuser1,testuser2 // 個表示某群組里的成員

group2 = testuser3,testuser4

?

5:重啟httpd服務,訪問svn

[root@xuegod63 ~]# service httpd restart

用戶的作用總結

用戶名

對所屬庫的權限

Svn

是svn服務器中的庫管理員

Tube

是對整個svn庫擁有讀寫權限

Mk

是對svn庫中的svn1庫擁有讀寫權限,類似于開發人員

Testuser3

是對svn庫中的svn2庫擁有讀寫權限,并且Testuser3屬于group2類似于開發人員

測試svn版本控制服務器

?

svn的訪問地址是: http://192.168.1.63/svn/svn1

1:測試開發人員對不同庫的訪問權限:

???1)http://192.168.1.63/svn/svn1 ,輸入用戶: mk 密碼: 123456

?

?

??2)http://192.168.1.63/svn/svn2 ,輸入用戶: mk 密碼: 123456

?

?

???3)http://192.168.1.63/svn/svn2/ 用戶:testuser3 ,密碼:123456 可以訪問svn2

?

?

2:測試開發人員對庫中采取的不同動作

1)?把本地項目extundelete-0.2.4.tar.bz2整個源代碼導入到版本庫: svn2中。 沒有導入前,svn2倉庫初始版本為 0

語法:svn 源代碼目錄 file:///path/to/repos -m "最后的個注釋不能少"

[svn@xuegod63 ~]$mkdir test1

[svn@xuegod63 ~]$?tar jxvf extundelete-0.2.4.tar.bz2

[svn@xuegod63 ~]$svn import extundelete-0.2.4/ file:///var/repos/svn2 -m 'svn2 v1'

?

#這里不再為0,顯示為1,說明監控版本變化成功

?

2)取回項目代碼

方法1直接在svn中取回

語法:svn checkout file:///var/repos/svn1 目錄

[svn@xuegod63 ~]$?svn checkout file:///var/repos/svn1??new

或者

[svn@xuegod63 ~]$?svn checkout file:///var/repos/svn1

#將svn1版本庫中的文件取回到目錄aaaa中,沒有aaaa目錄,將自動生成一個aaaa目錄。 如果不指定目錄,直接存到當前目錄下,將以svn1倉庫的名字命名并創建對應的目錄。

#除了代碼以外,多了一個?.svn?目錄

?

方法二:通過http協議

[svn@xuegod63 ~]$svn checkout http://192.168.1.63/svn/svn1 bbb

Authentication realm: <http://192.168.1.63:80> Subversion repository

Password for 'root': 直接回車

Authentication realm: <http://192.168.1.63:80> Subversion repository

Username: mk

Password for '':123456

?

?

3:xuegod64中測試testuser3訪問:

[root@xuegod64 ~]# svn checkout http://192.168.1.63/svn/svn1 bbb

Authentication realm: <http://192.168.1.63:80> Subversion repository

Username: testuser3

Password for 'testuser3':

svn: Server sent unexpected return value (403 Forbidden) in response to OPTIONS request for 'http://192.168.1.63/svn/svn1'

?

4:修改添加刪除文件后,提交代碼。

[root@xuegod63 test3]# svn checkout http://192.168.1.63/svn/svn1 extundelete

Authentication realm: <http://192.168.1.63:80> Subversion repository

Password for 'mk':

[svn@xuegod63 ~]$?cd extundelete

[svn@xuegod63 ~]$?cp /etc/hosts c.txt

[svn@xuegod63 ~]$cp /etc/hosts b.txt

[svn@xuegod63 ~]$?cp /etc/hosts a.txt

[svn@xuegod63 ~]$?svn add c.txt #添加一個文件到版本庫中

A ??c.txt

[root@xuegod63 svn1]# svn delete autogen.sh #從版本庫中刪除一個文件

D ?autogen.sh

[root@xuegod63 extundelete-0.2.4]# ls #查看,沒有沒有autogen.sh 文件了

[root@xuegod63 extundelete]# svn status #查看項目當前狀態。

? a.txt

? b.txt

A c.txt

D autogen.sh

?

提交修改:

[root@xuegod63 extundelete-0.2.4]# svn commit -m #"注釋,添加一個文件c.txt" #提交你的改變到版本庫中,后面參數為此次提交的注釋.

[root@xuegod63 extundelete-0.2.4]# svn list # 列出版本庫中當前目錄下的文件?

[root@xuegod63 extundelete]# svn move c.txt mk.txt #c.txt文件更名為mk.txt

A mk.txt

D c.txt

?

5:xuegod64取出版本:?

[root@xuegod64 svn1]# svn checkout http://192.168.1.63/svn/svn1/

[root@xuegod64 svn1]# svn co http://192.168.1.63/svn/svn1/?


《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的搭建SVN版本控制服务器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。