星期三, 3月 28, 2007

SVN (Subversion 、TortoiseSVN)設定大全

最近開始要RUN TIC100的案子了,看著正偉努力的建置資料庫,我也燃燒了!馬上把SVN也提早架設完成。在這之間我查了一大堆網路資料,但是仍然沒有辦法只有一個站就滿足我所有的要求,因此也google了好幾次,才把所有要用的資料找齊。那麼接下來跟大家介紹一連串的SVN安裝須知和常見問題,當然很多是從別的網站看來寫來的,但是我算是整合也都附上了參考連結,如果有冒犯到原作者

SVN (Subversion) 是一套非常好用的 檔案 版本控制(Revision control) 系統
除了可以很方便的追蹤,交換,合併,比對檔案外,
更能保護檔案不會受到一些意外而讓心血的結晶損毀,
也可以讓團隊合作時,更加有效率。

以下簡單介紹 Subversion (Server端) 及TortoiseSVN (Client端)

首先Subversion下載點、TortoiseSVN下載點
TortoiseSVN中文包(在Client端軟體的下載網頁往下一點)先提供給大家邊看邊下載,版本當然建議選擇新版與同版本。

下載好之後就可以先安裝簡單的Client端,這裡有教學影片,兩分鐘內搞定!

再來如果你只需要使用SVN來控管你的Code且已經有人幫你架設好Server端,而你只需要知道如何更新你的Code,這個使用會簡單得多,S
VN Client端會把SVN的功能放在右鍵選單(別忘了從設定把語系更改成繁體中文)。

那麼如何取得檔案呢?只需要在你選擇的資料夾,畫面中視窗我是在C:\Inetpub\wwwroot的demo資料夾上按右鍵,上面有個SVN取出(英文的忘了@_@,不過快速鍵都是(K)),然後到這個畫面。

檔案庫URL就填上你的同伴架設的檔案庫網址,或是想要自己單機作版本控制的話可以直接使用file:///C:/SERVER INSTALL ROOT/svn/code的單機路徑亦可。
取出目錄就是你選定的資料夾



按下確認既可!

更新檔案完成之後你的資料夾會有個綠色的勾勾來代表此資料夾的資料是與Server端相同,當你檔案修改過後他會出現像是禁止進入單行道的紅色標誌,那畫面上看到的功能列上有個重新定位,可以修改你的檔案來源,或是使用鎖定把某些檔案鎖住維持成這次版本,當然每次的動作都有註解欄位可以讓你填寫備註。


詳細的版本異動的測試可以參考juee.com的連結。

那麼在會使用Client端軟體之後,是不是打算自己當起老大(或是苦主),來把主要Code維護的工作攬在身上呢?呵呵,當然有時候架設Server的不一定就要維護,就像我啦,提供給大家平台,反而自己是Coding最遜的一個。XD

那麼架設Subversion基本上是與Apache結合在一起的,所以在安裝Subversion之前別忘了先安裝Apache,對於Apache不熟的人...也別怕,Apache也可以做到簡單安裝,只需要下一步下一步就OK囉。

http://httpd.apache.org

下載 Apache HTTP Server 2.0 版以上 for Windows 的安裝程式(下載安裝版的喔,msi檔),但安裝之前請先檢查你的電腦是否有安裝 IIS,由於 Apache 預設使用 80 port,會跟 IIS 的網站衝突,你必須把 IIS 的 Web 站台關閉,再安裝 Apache HTTP Server,或是安裝好Apache再去把安裝目錄中\conf裡面的httpd.conf做修改。修改部分:
用CTRL+F找80 再把80改成8080(建議)或是其他。(這一部分別怕麻煩,待會還會再看到這個檔案XD)
安裝完成以後,開啟瀏覽器,瀏覽網址 http://127.0.0.1 (或http://127.0.0.1:8080) 看看有沒有出現安裝成功的網頁。搞定Apache之後就把剛剛下載好的Subversion安裝起來,整個OK之後,通常RUN不起來!(哈哈,我也是啦,還搞很久)

這時候你要先把Subversion/bin/目錄下的 mod_dav_svn.so 和 mod_authz_svn.so libdb4X.dll、libeay32.dll、以及 ssleay32.dll 複製到 /modules/ 目錄下。(這裡會因為版本不同放的資料夾有所不同,且檔名或有變化,像我的是libdb44.dll)

接著再到Apache 的 httpd.conf(在
#LoadModule dav_module modules/mod_dav.so
#LoadModule dav_fs_module modules/mod_dav_fs.so


把前面的 '#' 字元刪除,然後把下面幾行文字加到這群 LoadModule 指令的後面:


LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so


以上動作完成之後就可以重新啟動Apache

如果 Apache 仍然無法啟動,請依下列步驟檢查:
  1. 檢查 Subversion 的路徑是否有在系統的 %PATH% 環境變數裡面。(控制台→系統→進階→環境變數)
  2. 檢查你加入 httpd.conf 裡的項目是否正確,記住 mod_dav_svn.so 和 mod_authz_svn.so 必須在其他 mod_dav*.so 模組之後載入。(這個通常不會有問題,我是放在檔案最後面,一定是在其他模組之後載入)

再來都好了之後就要設定你的SVN要放在哪個資料夾,並且對應到網路上的路徑,設定語法是:

<Location
/svn/repos_name>
DAV svn
SVNPath /absolute/path/to/repository
</Location>

其中 "/svn/repos_name" 就是用戶端存取特定檔案庫的 URI(Uniform Resource Indentifier),SVNPath 後面指定的路徑則是檔案庫的絕對路徑,假設我們的檔案庫實際存放的路徑是 d:/svn/MyProject,並且希望用戶端使用 "http://myserver/svn/myprj" 的 URL 來存取檔案庫,那麼要加入 httpd.conf 的內容就是:

<Location /svn/code>
DAV svn
SVNParentPath C:/Apache root/svn/code
</Location>

設定好路徑之後只需要在資料夾上選擇建立檔案庫即可,但是記得這個資料夾要是空的資料夾。



建立好之後資料夾內應該要有以下的檔案存在。

這時候跑你的網頁應該會有版本0的顯示。(我的版本被我玩成1...我懶得再弄新的,就跟juee的網站借圖囉XD)


再來就是把你要共用的資料夾選擇匯入,並且在檔案庫URL那邊填入你的URL或是磁碟位置即可,那他在任一個版本寫入都會有紀錄並且在版本上+1



我相信如果有看完這一整篇,你應該也把SVN完整的設定好了,那如果還有問題的話也可以再留言大家討論!

最後在這邊提一下,php5學習日記裡面還有提到不同網域需要存取資料的時候就必須使用密碼的方法,這可以阻隔奇怪的人來使用你的檔案或是使你的檔案造成損毀。這塊我沒有弄,我想別外流出去,應該是沒人會想來搞我這個小咖洨XD

PS:我的整個環境設定:
  • 作業系統:Windows XP Pro
  • Port 80:IIS 5.0
  • Port 8080:Apache 2.0.59
  • Subversion v1.4.3
  • TortoiseSVN 1.4.3.8645
學弟亮幫忙測試後發現Server和Apache版本之間的關係:
  • svn1.6跑apache2.2
  • svn1.5跑apache2.0
參考連結:
JoStudio
juee.com
php5學習日記

18 則留言:

  1. 太良加油啊!!!
    我這邊的資料庫~也準備就緒了。
    就等移植到你家的SQL SERVER~
    哈!加油加油!

    回覆刪除
  2. 我記得 SVN server 可以架在 Windows 上面,當初是用 FreeBSD 測試的。

    不過都已經有現成的可以用了,我就不想麻煩了 XD

    https://opensvn.csie.org/

    回覆刪除
  3. 正偉,我在等你的光碟啊!

    日落,我是Windows派的沒錯XD,你那個網址很酷耶,是你開放的Server嗎?不過我都架好了@_@,呵呵。

    回覆刪除
  4. 上面那句話打錯了,應該是寫「記得 SVN server 可以架在 Windows 上面....」 @@"

    既然你成功在 win 上面安裝 SVN server 了,那就改天教一下吧~那個網址是台大 PTT 的免費服務之一,還有其他很多好用的東西呢!

    最近再趕 RFID 的 app 和期中考,不過最興奮的是我快要有 Mercury 可以用了!

    回覆刪除
  5. 呵呵,其實還好,不會太複雜,也是弄APACHE而已~呵呵,那麼早就其中喔,辛苦囉。

    回覆刪除
  6. 在 FreeBSD 上面跑 SVN 失敗,最開心的是系統沒給錯誤訊息.......

    我總是會遇到那種 google 完全找不到的錯誤,手氣太差嗎? ~"~

    回覆刪除
  7. Hi~~
    我加上這兩行後
    LoadModule dav_svn_module modules/mod_dav_svn.so
    LoadModule authz_svn_module modules/mod_authz_svn.so
     
    重新啟動 Apache後,就會出現"The requested operation has failed!".
    Apache就掛了,可是拿掉這兩行後,又正常了耶~~

    回覆刪除
  8. 可以確認版本看看,新的版本module可能不同名

    回覆刪除
  9. 謝謝大大分享,您的文章真的很實用,幫助很大,不用看英文看得霧剎剎,照著作就OK了!!

    回覆刪除
  10. 感謝大大提供教學(用你的文章,建造的速度很快XD),而且也能用在apache2.2+subversion1.6。
    話說,我本來也有"匿名"提到的加入那2行load so檔就打不開的問題,後來我把subversion直接解壓縮,然後把它"modules/mod_dav_svn.so"的路徑指到subversion裡(絕對路徑),很神奇的就ok了。
    不知道這篇能不能讓我留作我寫的文件的refercnce?

    回覆刪除
  11. To 蘭室祕錄,
    謝謝支持。^^

    To kanandg1,
    當然可以啊!我想是檔案沒有複製到apache的module中吧。(or...莫非定律發生)

    回覆刪除
  12. 請問一定要用APACHE媽?

    我是用IIS耶

    回覆刪除
  13. 作者已經移除這則留言。

    回覆刪除
  14. 作者已經移除這則留言。

    回覆刪除
  15. 可以請問一下你裡面所提到的
    < Location /svn/code >
    DAV svn
    SVNParentPath C : / Apache root / svn / code
    < / Location >
    是要去哪裡改?

    PS:剛一直貼錯回應^^!!

    回覆刪除
  16. 我少了dav資料夾
    是我哪設定錯誤呢

    回覆刪除
  17. 我少了dav資料夾

    沒辦法正確執行耶

    該如何解決...

    回覆刪除
  18. 嗯,我下載了svn-win32-1.6.4,apache是2.2。

    我在我自己的電腦上架設apache+SVN,成功了。

    當初有遇到兩個問題。第一個是佔port致致apache無法啟動。

    找了google,發現 netstat 指令(命令模式下輸入 netstat -ano)可以找到哪些程式佔住了port。利用工作管理員中(ctrl+alt+del跳出來的那個)的pid,找到對應程式,並將該應用程式關閉。便成功啟動了。

    之後,就遇上了載入"LoadModule dav_svn_module modules/svn/mod_dav_svn.so","
    LoadModule authz_svn_module modules/svn/mod_authz_svn.so"
    這兩個模組出現問題的情形。

    網路上很多人說少什麼檔,少什麼檔,但每個人說的數量不同,難不成全部copy進去。

    於是又找到了depends walker。他可以找到到底欠了哪些.dll檔(比如說開啟mod_authz_svn.so,他會列出少了哪些.dll)。補齊後,就成功啟動了。

    但是!

    最近要在一台已經安裝好apache2.2的機器上,安裝SVN。我上面說的步驟也都做了。可是一旦載入了mod_dav_svn.so及mod_authz_svn.so,重啟便會失敗。

    回覆刪除