做者:PCplayer 來自:我用Subversion - http://www.iUseSVN.com 時間:2007.3.8 修改時間:2007.10.26
不少朋友初次接觸Subversion時不是很理解subversion和apache的關係。web
我在這裏簡單說明一下svn服務器和客戶端的安裝說明。apache
服務器windows
subversion服務器是不須要apache的,可是可使用apache,視具體狀況來選擇。瀏覽器
一、若是隻要經過file://或svn://來訪問,則不須要apache,只安裝svn便可,使用svnserve來做爲服務。安全
二、若是你要創建一個能夠經過http://或https://來訪問的版本庫服務器,則你須要使用apache。服務器
基於apache配置,請看http://bbs.iusesvn.com/thread-158-1-1.html 。編輯器
客戶端
在windows下,無論你要訪問的是什麼類型的服務器,只要安裝一個TortoiseSVN就能夠了,開發者已經幫你搞定一切。
在類Linux系統下,若是你經過file://或svn://來訪問,則只要編譯安裝svn就能夠,
若是經過http://訪問,則要同neon編譯,
若是經過https://訪問,則要同帶ssl支持的neon編譯,
不論怎樣,都要同apr和apr-util編譯。
neon、apr、apr-util也很容易得到,目前發佈的subversion代碼都會有一個叫作subversion-deps-xxx的文件,好比1.4.3的就是subversion-deps-1.4.3.tar.bz2
對於訪問國外網站比較慢的朋友,下載Subversion和客戶端,能夠到 http://www.iUseSVN.com ,因帶寬和流量有限,網站只對註冊用戶開放下載,這點有點麻煩,可是很值得,一是下載速度的確至關快,二是裏面有不少熱於與你們交流的Subversion愛好者。
本文將介紹Windows下subversion做爲Apache module的安裝方法。
安裝Apache
從 http://httpd.apache.org/ 上下載Apache。最新版本的subversion僅支持 Apache 2.0.x,不支持Apache 1.3.x,因此請下載 Apache 2.0.x 版本。最新版本爲 Apache 2.0.59。
2007-6-6追加:另外subversion也不支持Apache 2.2.x版本,詳細緣由請參考這裏。
下載以後運行安裝程序進行安裝。安裝完畢以後,打開瀏覽器,輸入 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。
而後咱們須要創建一個保存subversion的版本庫的目錄。假設咱們將此目錄命名爲 C:\svnwork。
打開「控制面板」->「系統」->「高級」->「環境變量」,修改PATH變量,在其末尾添加 C:\svn\bin。
而後將 C:\svn\bin 下面的 modauthzsvn.so、moddavsvn.so 兩個文件複製到 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上訪問版本庫時所使用的路徑,而SVNParentPath後面的目錄即爲版本庫目錄的位置。該指令告訴Apache,全部以 /repos 開頭的請求都交給subversion處理。
而後從新啓動計算機(緣由請參見這裏)。打開「控制面板」->「管理工具」->「服務」,查看Apache2服務的描述,若是描述變成相似於「Apache/2.0.54 (Win32) DAV/2 SVN/1.3.1」(包含SVN字樣)則說明安裝成功。
客戶端設置
subversion的用戶須要設置以下環境變量:
SVN_EDITOR="C:\Windows\notepad.exe"
當使用subversion進行導入、提交等操做時,subversion會調用該程序編輯提交說明。
創建subversion的版本庫
做爲演示,咱們創建一個版本庫。首先打開命令行提示符,進入C:\svnwork,輸入如下命令:
svnadmin create demo
而後嘗試向demo版本庫中添加代碼。假設咱們在 D:\program\svntest 下面有一個名爲 demo.c 的文件,那麼咱們輸入如下命令:
D: cd program svn import svntest http://localhost/repos/demo
其中 svntest 爲目錄名。svn會調用文本編輯器來編輯說明文字,保存並關閉以後,svn會顯示:
Adding svntest\demo.c Committed revision 1.
而後能夠經過如下命令察看保存到服務器上的文件:
svn list http://localhost/repos/demo demo.c
VisualSVN
VisualSVN Serve集成了Subversion和Apache,簡化了手工配置Subversion的繁瑣步驟。
[1]
VisualSVN Server是免費的,而VisualSVN是收費的。VisualSVN是SVN的客戶端,和Visual Studio集成在一塊兒, VisualSvn Server是SVN的服務器端,包括Subversion、Apache和用戶及權限管理,優勢在上面已經說過了。
1.爲何要用VisualSVN Server,而不用Subversion?
SVN 分爲服務端和客戶端,就服務端而言分爲 Subversion和VisualSVN Server
由於若是直接使用Subversion,那麼在Windows 系統上,要想讓它隨系統啓動,就要封裝SVN Server爲windws service,還要經過修改配置文件來控制用戶權限,另外若是要想以Web方式【http協議】訪問,通常還要安裝配置Apache,若是是新手,豈不是很頭痛?而VisualSVN Serve集成了Subversion和Apache,省去了以上全部的麻煩。安裝的時候SVN Server已經封裝爲windws service,Apache服務器的配置也只是在圖像界面上,指定認證方式、訪問端口等簡單操做;另外,用戶權限的管理也是經過圖像界面來配置。
2.爲何不用TFS?
由於咱們一開始就是用Subversion和TortioseSVN,因此就沒有更換其餘的軟件。至於TFS至今沒有用過,其實,我只是看了一些的文章而已,對它也不瞭解。
3.VisualSVN Server是免費的嗎?
是的,VisualSVN Server是免費的,而VisualSVN是收費的。VisualSVN是SVN的客戶端,和Visual Studio集成在一塊兒, VisualSvn Server是SVN的服務器端,包括Subversion、Apache和用戶及權限管理,優勢在上面已經說過了。
4.TortoiseSVN是免費的,能夠替代VisualSVN
VisualSVN Server的配置和使用方法 圖文
VisualSVN Server是免費的,而VisualSVN是收費的。VisualSVN是SVN的客戶端,和Visual Studio集成在一塊兒, VisualSvn Server是SVN的服務器端,包括Subversion、Apache和用戶及權限管理,優勢在上面已經說過了。
1.爲何要用VisualSVN Server,而不用Subversion?
回答:
由於若是直接使用Subversion,那麼在Windows 系統上,要想讓它隨系統啓動,就要封裝SVN Server爲windws service,還要經過修改配置文件來控制用戶權限,另外若是要想以Web方式【http協議】訪問,通常還要安裝配置Apache,若是是新手,豈不是很頭痛?而VisualSVN Serve集成了Subversion和Apache,省去了以上全部的麻煩。安裝的時候SVN Server已經封裝爲windws service,Apache服務器的配置也只是在圖像界面上,指定認證方式、訪問端口等簡單操做;另外,用戶權限的管理也是經過圖像界面來配置。
2.爲何不用TFS?
回答:
由於咱們一開始就是用Subversion和TortioseSVN,因此就沒有更換其餘的軟件。至於TFS至今沒有用過,其實,我只是看了一些的文章而已,對它也不瞭解。
3.VisualSVN Server是免費的嗎?
回答:
是的,VisualSVN Server是免費的,而VisualSVN是收費的。VisualSVN是SVN的客戶端,和Visual Studio集成在一塊兒, VisualSvn Server是SVN的服務器端,包括Subversion、Apache和用戶及權限管理,優勢在上面已經說過了。
好了,言歸正傳,正式開始咱們今天的教程。
1、VisualSVN Server的配置和使用方法【服務器端】
安裝好VisualSVN Server後【安裝過程看這裏】,運行VisualSVN Server Manger,下面是啓動界面:

好的,下面我來添加一個代碼庫【Repository】,以下圖:

按上圖所示,建立新的代碼庫,在下圖所示的文本框中輸入代碼庫名稱:

注意:上圖中的CheckBox若是選中,則在代碼庫StartKit下面會建立trunk、branches、tags三個子目錄;不選中,則只建立空的代碼庫StartKit。
點擊OK按鈕,代碼庫就建立成功了。

建立完代碼庫後,沒有任何內容在裏面。我會在這個教程的第二部分說明如何遷入源代碼。
下面,咱們開始安全性設置,在左側的Users上點擊右鍵:


輸入上面的信息,點擊OK,咱們就建立一個用戶了。按照上面的過程,分別添加用戶Developer一、tester一、manager1,好了,咱們開始添加這些用戶到咱們剛纔建立的項目裏:

點擊上圖中的"Add..."按鈕,在下圖中選擇咱們剛纔添加的用戶,點擊OK按鈕:
說明:你們可能注意到了下圖中的Groups,是的,你也能夠先建立組,把用戶添加到各個組中,而後對組進行受權,操做比較簡單,在此略過。

按照下圖所示,分別對用戶【或組】進行受權:

點擊"肯定"按鈕,上面的用戶就具備了訪問StartKit代碼庫的不一樣權限。
由於用戶starter在團隊中是新來者,不但願他向代碼庫中提交新代碼,因此他只能讀取代碼庫中的代碼,不能提交代碼。tester1是測試人員,不負責代碼編寫,因此也是隻讀權限。而Developer1和manager1是開發人員和項目經理,天然具備讀、寫的權限。
在實際的項目開發過程當中,Developer和tester每每不可能只有一我的,這時候使用組來受權更加方便,這個你們能夠本身練習一下。
2、TotoiseSVN的基本使用方法
在 項目管理實踐教程1、工欲善其事,必先利其器【Basic Tools】中,我已經講解了怎樣安裝TortoiseSVN。在上面的講解中已經講了怎麼使用VisualSVN Server了,今天我要講的是,TortoiseSVN的簡單使用方法。
1、簽入源代碼到SVN服務器
假如咱們使用Visual Studio在文件夾StartKit中建立了一個項目,咱們要把這個項目的源代碼簽入到SVN Server上的代碼庫中裏,首先右鍵點擊StartKit文件夾,這時候的右鍵菜單以下圖所示:
圖2-2-1

點擊Import,彈出下面的窗體,其中http://zt.net.henu.edu.cn 是服務器名,svn是代碼倉庫的根目錄,StartKit是咱們在上個教程中添加的一個代碼庫:
說明:左下角的CheckBox,在第一次簽入源代碼時沒有用,可是,在之後你提交代碼的時候是很是有用的。
圖2-2-2

點擊OK按鈕,會彈出下面的窗體,要求輸入憑據:
圖2-2-3

在上面的窗體中輸入用戶名和密碼,點擊OK按鈕:
圖2-2-4

如上圖所示,好了,源代碼已經成功簽入SVN服務器了。這時候團隊成員就能夠遷出SVN服務器上的源代碼到本身的機器了。
2、簽出源代碼到本機
在本機建立文件夾StartKit,右鍵點擊Checkout,彈出以下圖的窗體:
圖2-2-5

在上圖中URL of Repository:下的文本框中輸入svn server中的代碼庫的地址,其餘默認,點擊OK按鈕,就開始簽出源代碼了。
說明:上圖中的Checkout Depth,有4個選項,分別是遷出所有、只簽出下一級子目錄和文件、只簽出文件、只簽出空項目,默認的是第一項。上面的例子中,咱們也可使用web的方式訪問代碼庫,在瀏覽器中輸入http://zt.net.henu.edu.cn/svn/StartKit/
這時候也會彈出對話框,要求輸入用戶名和密碼,經過驗證後便可瀏覽代碼庫中的內容。
搞定!源代碼已經成功簽出到剛纔新建的StartKit目錄中。
打開StartKit目錄,能夠看到以下圖的文件夾結構:
圖2-2-5

一旦你對文件或文件夾作了任何修改,那麼文件或文件夾的顯示圖片機會發生變化。下圖中我修改了其中的二個文件:
圖2-2-7

你們看一下不一樣狀態所對應的圖片:
圖2-2-8

咱們已經知道怎麼將源代碼簽入到SVN服務器,怎麼從服務器簽出代碼到本機,也簡單瞭解了不一樣狀態所對應的圖案啦。
3、提交修改過的文件到SVN服務器
上面的圖2-2-7中,我修改了位於Model文件中的二個文件ImageInfo.cs和NewsInfo.cs,下面演示如何提交到SVN服務器。
注意:提交源代碼到服務器時,必定確保本機的代碼是最新版本,不然可能提交失敗,或者形成版本衝突。
在Model文件夾上點擊右鍵或在Model文件下的空白處點擊右鍵,點擊SVN Commit…彈出下面的窗體:
圖2-2-9

點擊OK按鈕後,彈出以下圖的窗體:
圖2-2-10

4、添加新文件到SVN服務器
咱們在Model文件下添加一個新的類文件UserInfo.cs,在Model文件下的空白處點擊右鍵,點擊SVN Commit…,和上面講的提交修改過的文件到SVN服務器同樣,就能夠了。
另外也能夠在文件UserInfo.cs上點擊右鍵,點擊TortoiseSVN=>>Add,彈出以下圖的窗體:
圖2-2-11

選中UserInfo.cs文件,點擊OK按鈕,這樣並無將這個文件提交到SVN服務器,只是將這個文件標記爲源代碼庫庫中的文件,並將其狀態置爲修改狀態。以後,咱們要再SVN Commit這個文件一次,才能夠將其真正提交到SVN服務器上的代碼庫中。
上面講是添加文件,實際上,添加文件夾的步驟也是同樣的,這裏就不說了。
5、更新本機代碼與SVN服務器上最新的版本一致
這個也很簡單,只要在須要更新的文件夾上點擊右鍵或在該文件下的空白處點擊右鍵,點擊SVN Update,就能夠了。
注意:更新操做可能會由於版本衝突而失敗,這是可使用合併【Merge】或其餘方法解決;也可能由於鎖定【Get Lock】而失敗,這是須要先解鎖【Release Lock】。
6、重命名文件或文件夾,並將修改提交到SVN服務器
只要在須要重命名的文件或文件夾上點擊右鍵,點擊TortiseSVN=>>Rename…,在彈出的窗體中輸入新名稱,點擊OK按鈕,就能夠了。此方法也不是直接重命名,而是將該文件或文件夾的名稱標記爲重命名後名稱,也須要咱們使用SVN Commit提交到SVN服務器後才真正重命名。
7、刪除文件或文件夾,並將修改提交到SVN服務器
最簡單就是,你直接刪除文件或文件夾,而後使用SVN Commit提交更新到SVN服務器。另一種方法是在你要刪除的文件或文件夾上點擊右鍵=>>TortoiseSVN=>>Delete刪除,此方法也不是直接刪除,而是將該文件或文件夾的狀態置爲刪除,也須要咱們使用SVN Commit提交到SVN服務器後才真正刪除。
說明:實際上,從你把源代碼遷簽入SVN服務器開始,每個版本的數據和文件,就算是你已經刪除了的,也均可以隨時遷出。
以上只是TortoiseSVN最簡單的幾個功能,其實他的功能遠不止這些,其餘的功能你們能夠在使用的過程當中慢慢體會,有些功能我會在下面的教程中使用到,到時候會和你們講清楚用法。
注意:向SVN服務器提交源代碼的時候,必定不要提交bin、obj等文件夾,不然會很麻煩。可是web項目的bin目錄除外,可是web項目的bin目錄中的引用其餘項目而生成的dll不須要提交。
一個好習慣:若是項目中引用了其餘的第三方的程序集,好比EnterpriseLibrary、FCKEditor等,這時候不要簡單從他們的安裝位置引用,而是在你的解決方案下,添加一個Library的目錄,把須要的程序集複製到這裏,而後從Library目錄引用,這樣有什麼好處,本身想想吧!
若是你們有什麼問題,儘管跟帖提問,我必定及時回答。
好了,今天就先寫到這裏吧,原本說這部分準備寫一篇Blog,但是如今寫了這麼長,還只是說了一點很基本的東西而已,呵呵……
若是你對我講解的這些內容不熟悉,建議你從頭開始看這個系列的教程:項目管理實踐系列教程。
傳到SVN 服務器上的代碼存放的位置,在服務器安裝時,有一個可配置的地方,可配置;且上傳的代碼是被壓縮後存放在配置服務器時,指定的地方的;
Subversion有一個很標準的目錄結構,是這樣的。
好比項目是proj,svn地址爲svn://proj/,那麼標準的svn佈局是
svn://proj/|+-trunk+-branches+-tags
這是一個標準的佈局,
trunk爲主開發目錄
,
branches爲分支開發目錄
,
tags爲tag存檔目錄(不容許修改)
。可是具體這幾個目錄應該如何使用,svn並無明確的規範,
更多的仍是用戶本身的習慣
。
對於這幾個開發目錄,通常的使用方法有兩種。我更多的是從軟件產品的角度出發(好比freebsd),由於互聯網的開發模式是徹底不同的。 1.第一種方法,使用trunk做爲主要的開發目錄
通常的,咱們的全部的開發都是基於trunk進行開發,當一個版本/release開發告一段落(開發、測試、文檔、製做安裝程序、打包等)結束後,代碼處於凍結狀態(人爲規定,能夠經過hook來進行管理)。此時應該基於當前凍結的代碼庫,打tag。當下一個版本/階段的開發任務開始,繼續在trunk進行開發。
此時,若是發現了上一個已發行版本(Released Version)有一些bug,或者一些很急迫的功能要求,而正在開發的版本(Developing Version)沒法知足時間要求【新開發的東西還不能用】,這時候就須要在上一個版本上進行修改了。應該基於發行版對應的tag,作相應的分支(branch)進行開發。
例如,剛剛發佈1.0,正在開發2.0,此時要在1.0的基礎上進行bug修正。
按照時間的順序
1.0開發完畢,代碼凍結
基於已經凍結的trunk,爲release1.0打tag
此時的目錄結構爲
svn://proj/
+trunk/ (freeze)
+branches/
+tags/
+tag_release_1.0 (copy from trunk)
2.0開始開發,trunk此時爲2.0的開發版
發現1.0有bug,須要修改,基於1.0的tag作branch
此時的目錄結構爲
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進行1.0 bugfix開發,在trunk進行2.0開發
在1.0 bugfix 完成以後,基於dev_1.0_bugfix的branch作release等
根據須要選擇性的把dev_1.0_bugfix這個分支merge回trunk(何時進行這步操做,要根據具體狀況)
這是一種很標準的開發模式,不少的公司都是採用這種模式進行開發的。trunk永遠是開發的主要目錄。
2.第二種方法,在每個release的branch中進行各自的開發,trunk只作發佈使用。
這種開發模式當中,trunk是不承擔具體開發任務的,一個版本/階段的開發任務在開始的時候,根據已經release的版本作新的開發分支,而且基於這個分支進行開發。仍是舉上面的例子,這裏面的時序關係是:
1.0開發,作dev1.0的branch
此時的目錄結構
svn://proj/
+trunk/ (不擔負開發任務 )
+branches/
+dev_1.0 (copy from trunk)
+tags/
1.0開發完成,merge dev1.0到trunk
此時的目錄結構
svn://proj/
+trunk/ (merge from branch dev_1.0)
+branches/
+dev_1.0 (開發任務結束,freeze)
+tags/
根據trunk作1.0的tag
此時的目錄結構
svn://proj/
+trunk/ (merge from branch dev_1.0)
+branches/
+dev_1.0 (開發任務結束,freeze)
+tags/
+tag_release_1.0 (copy from trunk)
1.0開發,作dev2.0分支
此時的目錄結構
svn://proj/
+trunk/
+branches/
+dev_1.0 (開發任務結束,freeze)
+dev_2.0 (進行2.0開發)
+tags/
+tag_release_1.0 (copy from trunk)
1.0有bug,直接在dev1.0的分支上修復
外網訪問SVN服務器的方法
一、路由端口映射:
進入路由器管理管理界面-->轉發規則-->虛擬服務器
將端口3690(svn默認端口)和你的局域網IP(如192.168.1.104)映射,勾上「啓動」,保存,OK了。
二、測試:好比你的電信IP爲:121.11.201.104;svn客戶端輸入地址:svn://121.11.201.104:3690/trunk
三、要讓svn客戶端能用http訪問,好像要apche之類的服務器配合。