轉(zhuǎn)載于 http://blog.sina.com.cn/s/blog_6b94d5680101m7ah.html
Subversion (簡稱 svn )是近年來崛起的版本管理軟件,是 cvs 的接班人。目前,絕大多數(shù) 開源軟件 都使用 svn 作為代碼版本管理 軟件 。
????? TortoiseSVN 是 Subversion 版本控制系統(tǒng)的一個(gè)免費(fèi)開源 客 戶端 ,可以超越時(shí)間的管理文件和目錄。
? apache
Subversion和apache,apr,apr-util的關(guān)系
作者:PCplayer 來自:我用Subversion - http://www.iUseSVN.com 時(shí)間:2007.3.8 修改時(shí)間:2007.10.26
很多朋友初次接觸Subversion時(shí)不是很理解subversion和apache的關(guān)系。
我在這里簡單說明一下svn服務(wù)器和客戶端的安裝說明。
服務(wù)器
subversion服務(wù)器是不需要apache的,但是可以使用apache,視具體情況來選擇。
1、如果只要通過file://或svn://來訪問,則不需要apache,只安裝svn即可,使用svnserve來作為服務(wù)。
2、如果你要建立一個(gè)可以通過http://或https://來訪問的版本庫服務(wù)器,則你需要使用apache。
基于apache配置,請(qǐng)看 http://bbs.iusesvn. com/thread-158-1-1.html ?。
客戶端
在windows下,不管你要訪問的是什么類型的服務(wù)器,只要安裝一個(gè)TortoiseSVN就可以了,開發(fā)者已經(jīng)幫你搞定一切。
在類Linux系統(tǒng)下,如果你通過file://或svn://來訪問,則只要編譯安裝svn就可以,
如果通過http://訪問,則要同neon編譯,
如果通過https://訪問,則要同帶ssl支持的neon編譯,
不論怎樣,都要同apr和apr-util編譯。
neon、apr、apr-util也很容易獲得,目前發(fā)布的subversion代碼都會(huì)有一個(gè)叫做subversion-deps-xxx的文件,比如1.4.3的就是subversion-deps-1.4.3.tar.bz2
對(duì)于訪問國外網(wǎng)站比較慢的朋友,下載Subversion和客戶端,可以到? http://www.iUseSVN.com ?,因帶寬和流量有限,網(wǎng)站只對(duì)注冊(cè)用戶開放下載,這點(diǎn)有點(diǎn)麻煩,但是很值得,一是下載速度的確相當(dāng)快,二是里面有很多熱于與大家交流的Subversion愛好者。
?
?
本文將介紹Windows下subversion作為Apache module的安裝方法。
安裝Apache
從? http://httpd.apache.org/ ?上下載Apache。最新版本的subversion僅支持 Apache 2.0.x,不支持Apache 1.3.x,所以請(qǐng)下載 Apache 2.0.x 版本。最新版本為 Apache 2.0.59。
2007-6-6追加: 另外subversion也不支持Apache 2.2.x版本,詳細(xì)原因請(qǐng)參考 這里 。
下載之后運(yùn)行安裝程序進(jìn)行安裝。安裝完畢之后,打開瀏覽器,輸入 http://localhost/,如果能夠看到 Apache 的歡迎畫面,即表示安裝成功。
安裝subversion
下載
從? http://subversion.tigris.org/ ?下載subversion,最新版本為1.3.1。這里我們選擇for Win32的zip版(svn-win32-1.3.1.zip)下載。
安裝
下載之后將 svn-win32-1.3.1.zip 解壓縮到 C:\ 下。為方便起見,將目錄名svn-win32-1.3.1修改為 svn。
然后我們需要建立一個(gè)保存subversion的版本庫的目錄。假設(shè)我們將此目錄命名為 C:\svnwork。
打開“控制面板”->“系統(tǒng)”->“高級(jí)”->“環(huán)境變量”,修改PATH變量,在其末尾添加 C:\svn\bin。
然后將 C:\svn\bin 下面的 mod authz svn.so、mod dav svn.so 兩個(gè)文件復(fù)制到 Apache 的 modules 目錄下。打開Apache的配置文件 httpd.conf,查找 LoadModule,將下面這一行之前的 # 去掉:
LoadModule dav_module modules/mod_dav.so
然后在LoadModule塊的末尾添加如下兩行:
LoadModule dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so
之后在httpd.conf的末尾添加如下幾行:
<Location /repos> DAV svn SVNParentPath C:/svnwork </Location>
其中,repos 為從Web上訪問版本庫時(shí)所使用的路徑,而SVNParentPath后面的目錄即為版本庫目錄的位置。該指令告訴Apache,所有以 /repos 開頭的請(qǐng)求都交給subversion處理。
然后重新啟動(dòng)計(jì)算機(jī)(原因請(qǐng)參見 這里 )。打開“控制面板”->“管理工具”->“服務(wù)”,查看Apache2服務(wù)的描述,如果描述變成類似于“Apache/2.0.54 (Win32) DAV/2 SVN/1.3.1”(包含SVN字樣)則說明安裝成功。
客戶端設(shè)置
subversion的用戶需要設(shè)置如下環(huán)境變量:
SVN_EDITOR="C:\Windows\notepad.exe"
當(dāng)使用subversion進(jìn)行導(dǎo)入、提交等操作時(shí),subversion會(huì)調(diào)用該程序編輯提交說明。
建立subversion的版本庫
作為演示,我們建立一個(gè)版本庫。首先打開命令行提示符,進(jìn)入C:\svnwork,輸入以下命令:
svnadmin create demo
然后嘗試向demo版本庫中添加代碼。假設(shè)我們?cè)?D:\program\svntest 下面有一個(gè)名為 demo.c 的文件,那么我們輸入以下命令:
D: cd program svn import svntest http://localhost/repos/demo
其中 svntest 為目錄名。svn會(huì)調(diào)用文本編輯器來編輯說明文字,保存并關(guān)閉之后,svn會(huì)顯示:
Adding svntest\demo.c Committed revision 1.
然后可以通過以下命令察看保存到服務(wù)器上的文件:
svn list http://localhost/repos/demo demo.c
?
?
?
VisualSVN
?
?
?
?
?
VisualSVN Server的配置和使用方法 圖文
傳到SVN 服務(wù)器上的代碼存放的位置,在服務(wù)器安裝時(shí),有一個(gè)可配置的地方,可配置;且上傳的代碼是被壓縮后存放在配置服務(wù)器時(shí),指定的地方的;
?
?
SVN中trunk,branches,tags用法詳解
?
比如項(xiàng)目是proj,svn地址為svn://proj/,那么標(biāo)準(zhǔn)的svn布局是
svn://proj/|+-trunk+-branches+-tags
這是一個(gè)標(biāo)準(zhǔn)的布局, trunk為主開發(fā)目錄 , branches為分支開發(fā)目錄 , tags為tag存檔目錄(不允許修改) 。但是具體這幾個(gè)目錄應(yīng)該如何使用,svn并沒有明確的規(guī)范, 更多的還是用戶自己的習(xí)慣 。
對(duì)于這幾個(gè)開發(fā)目錄,一般的使用方法有兩種。我更多的是從軟件產(chǎn)品的角度出發(fā)(比如freebsd),因?yàn)榛ヂ?lián)網(wǎng)的開發(fā)模式是完全不一樣的。 1.第一種方法,使用trunk作為主要的開發(fā)目錄
一般的,我們的所有的開發(fā)都是基于trunk進(jìn)行開發(fā),當(dāng)一個(gè)版本/release開發(fā)告一段落(開發(fā)、測試、文檔、制作安裝程序、打包等)結(jié)束后,代碼處于凍結(jié)狀態(tài)(人為規(guī)定,可以通過hook來進(jìn)行管理)。此時(shí)應(yīng)該基于當(dāng)前凍結(jié)的代碼庫,打tag。當(dāng)下一個(gè)版本/階段的開發(fā)任務(wù)開始,繼續(xù)在trunk進(jìn)行開發(fā)。
此時(shí),如果發(fā)現(xiàn)了上一個(gè)已發(fā)行版本(Released Version)有一些bug,或者一些很急迫的功能要求,而正在開發(fā)的版本(Developing Version)無法滿足時(shí)間要求【新開發(fā)的東西還不能用】,這時(shí)候就需要在上一個(gè)版本上進(jìn)行修改了。應(yīng)該基于發(fā)行版對(duì)應(yīng)的tag,做相應(yīng)的分支(branch)進(jìn)行開發(fā)。
例如,剛剛發(fā)布1.0,正在開發(fā)2.0,此時(shí)要在1.0的基礎(chǔ)上進(jìn)行bug修正。
按照時(shí)間的順序
1.0開發(fā)完畢,代碼凍結(jié)?
基于已經(jīng)凍結(jié)的trunk,為release1.0打tag
此時(shí)的目錄結(jié)構(gòu)為
svn://proj/
+trunk/ (freeze)
+branches/
+tags/
+tag_release_1.0 (copy from trunk)?
2.0開始開發(fā),trunk此時(shí)為2.0的開發(fā)版?
發(fā)現(xiàn)1.0有bug,需要修改,基于1.0的tag做branch
此時(shí)的目錄結(jié)構(gòu)為
svn://proj/
+trunk/ ( dev 2.0 )
+branches/
+dev_1.0_bugfix (copy from tag/release_1.0)
+tags/
+release_1.0 (copy from trunk)?
在1.0 bugfix branch進(jìn)行1.0 bugfix開發(fā),在trunk進(jìn)行2.0開發(fā)?
在1.0 bugfix 完成之后,基于dev_1.0_bugfix的branch做release等?
根據(jù)需要選擇性的把dev_1.0_bugfix這個(gè)分支merge回trunk(什么時(shí)候進(jìn)行這步操作,要根據(jù)具體情況)?
這是一種很標(biāo)準(zhǔn)的開發(fā)模式,很多的公司都是采用這種模式進(jìn)行開發(fā)的。trunk永遠(yuǎn)是開發(fā)的主要目錄。
2.第二種方法,在每一個(gè)release的branch中進(jìn)行各自的開發(fā),trunk只做發(fā)布使用。
這種開發(fā)模式當(dāng)中,trunk是不承擔(dān)具體開發(fā)任務(wù)的,一個(gè)版本/階段的開發(fā)任務(wù)在開始的時(shí)候,根據(jù)已經(jīng)release的版本做新的開發(fā)分支,并且基于這個(gè)分支進(jìn)行開發(fā)。還是舉上面的例子,這里面的時(shí)序關(guān)系是:
1.0開發(fā),做dev1.0的branch
此時(shí)的目錄結(jié)構(gòu)
svn://proj/
+trunk/ (不擔(dān)負(fù)開發(fā)任務(wù) )
+branches/
+dev_1.0 (copy from trunk)
+tags/?
1.0開發(fā)完成,merge dev1.0到trunk
此時(shí)的目錄結(jié)構(gòu)
svn://proj/
+trunk/ (merge from branch dev_1.0)
+branches/
+dev_1.0 (開發(fā)任務(wù)結(jié)束,freeze)
+tags/?
根據(jù)trunk做1.0的tag
此時(shí)的目錄結(jié)構(gòu)
svn://proj/
+trunk/ (merge from branch dev_1.0)
+branches/
+dev_1.0 (開發(fā)任務(wù)結(jié)束,freeze)
+tags/
+tag_release_1.0 (copy from trunk)?
1.0開發(fā),做dev2.0分支
此時(shí)的目錄結(jié)構(gòu)
svn://proj/
+trunk/?
+branches/
+dev_1.0 (開發(fā)任務(wù)結(jié)束,freeze)
+dev_2.0 (進(jìn)行2.0開發(fā))
+tags/
+tag_release_1.0 (copy from trunk)?
1.0有bug,直接在dev1.0的分支上修復(fù)
?
外網(wǎng)訪問SVN服務(wù)器的方法
?
1、路由端口映射:
?????? 進(jìn)入路由器管理管理界面-->轉(zhuǎn)發(fā)規(guī)則-->虛擬服務(wù)器
?????? 將端口3690(svn默認(rèn)端口)和你的局域網(wǎng)IP(如192.168.1.104)映射,勾上“啟動(dòng)”,保存,OK了。
2、測試:比如你的電信IP為:121.11.201.104;svn客戶端輸入地址:svn://121.11.201.104:3690/trunk
3、要讓svn客戶端能用http訪問,好像要apche之類的服務(wù)器配合。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
