2009年5月8日 星期五

VisualSVN Server & TortoiseSVN

SVN(Subversion)是一個版本控制的軟體,因為之前為了方便控制程式碼的版本,所以,server是使用google code,而client端在windows下就是使用TortoiseSVN的圖形化介面,在Linux下就使用subversion的文字化介面,目前使用的感覺非常之好。

因為,之前我的資料均是由網路上找來的,再加上我自己寫的程式碼,我個人覺得除了我之外,應該是對其它人沒有什麼價值,所以,把資料放在google那裡,我並沒有覺得有什麼不妥,直到前幾天,學弟跟我說,他在找資料時,意外找到我放在google code的程式碼,喔耶~google在search果然不會放過自己的資料庫。

本來我是打算說,若到時候進入公司,再自己架一台svn server起來,但是,目前應該用不到。今天下午跟老弟說完之後,他非常的有興趣,好吧,那就在windows下架來試試看吧。

同樣的,在windows下安裝非常的容易。
已經成功了,詳細的以後再記錄,先把參考的資料先記錄下來吧~


Server
1. VisualSVN Server就是svn的server版,可以直在到這裡下載

2. 只有要使用指令模式才要,把SVN加入到環境變數PATH中,如C:\Program Files\Subversion\bin\

3. 選一個目錄,專門用來放許多案子用的,假設為D:\version_control_server,請在安裝的時候,選擇D:\version_control_server
而安裝目錄我還是設定在C:\Program Files\VisualSVN Server\


4. 安裝完Server後,建立你現在要產生的專案repository, 比如要建own-renyang專案
指令是用
$ svnadmin create D:\version_control_server\own-renyang
也可以使用圖形模式加入own-renyang專案,像是下圖



5. 建立使用者帳號與密碼


到E:\version_control_server\own-renyang\conf裡,修改passwd
a. 在[users]裡,加上你們案子要用的帳號和密碼
如: padsmember = padspassword

b. 修改svnserve.conf,如果你不想讓任意路人甲都可以看到你的程式,在[General]中找到一個anon-access,把它改成none
anon-access = none

c. 找到一行 password-db = passwd,把前面的井號去掉,這樣前面修改的passwd檔才會有啟用


6. 啟動SVN Server
指令模式
D:\>svnserve -d -r d:\Projects --listen-port 8443
圖形模式:
這個軟體有提供一個按扭可以直接啟動啦!


Client
好啦,安裝完Server端後,再來就是安裝Client端啦~
所有要參與計畫的人,都裝上TortoiseSVN(就一直下一步啦~),安裝完後,會被要求重新開機。

要注意的是,若Server裡面沒有任何資料,那麼一定要有人先上傳第一筆資料,這個時候要用
import
先找到你要版本控制的資料夾,裡面的資料是你要當作初始資料的上傳上去Server


這裡要注意,這個時候這一個資料夾只是把資料上傳到Server而以,並還沒有跟資料庫作連結,什麼叫與資料庫作聯結哩,當出現


那麼要如何與資料庫作聯結哩,請用
checkout

通常用來建立checkout的目錄一開始最好是空的。


其中那一個DOMAIN就是你Server的ip位置,若client與server在同一台器機上的話,改成127.0.0.1就沒有錯了啦~

當作完任何修改之後,就使用commit來提交,他會顯示你有做的任何修改!


[進階]
被版本控制的資料夾中,均會多一個隱藏檔.svn
若要把檔案給客戶的時候,不可能把這一堆.svn也同樣傳給客戶吧,也不可能要一個一個去刪啊,這個時候就要用export
請建立一個空資料夾,然後使用對那一個資料夾按右鍵,再export


建立一個空目錄,用來抓SVN Server上已經有寫的程式 (別人可能之前先傳上去的)
checkout,把URL of repository的protocol改成SVN
如: svn://qoo-home-800:8443/own-renyang


在windows上架svn server就是這麼簡單,那麼要如何由client來存取server哩~
我先試了在linux下試試看
[Linux]
1. 當然,要先裝subversion啦~debian請用apt-get而redhat請用yum
2. 若是第一次建立專案的話,先把第一個版本的檔案丟上去吧,也就是import
$ svn import project_directory https://DOMAIN:8443/svn/own-renyang/trunk
3. 事實上呢,上面那一個步驟只是把檔案丟上去而以,本地端的資料夾並沒有跟server端作聯結,必需要透過checkout, 第二個own-renyang是表示在本地端svn的最上層目錄
$ svn checkout https://DOMAIN:8443/svn/own-renyang/trunk own-renyang

剩下的部份請參考程式設計的版本控制 - SVN的基本功能介紹

以後再弄...
否則也可以參考Subversion也很清楚

[2009.07.07 補充]
TortoiseSVN 安裝好之後,預設 Checkout 出來的目錄中都會加上 .svn 隱藏目錄,裡面儲存了關於此目錄中所有檔案的版本資訊與變更狀態,就從網路上的文件中得知「建議」將預設的 .svn 修改成 _svn

最近開始將整個專案導入 Subversion 管理後,在其中一台開發主機就出問題了,載入專案時出現【Refreshing the project failed. Unable to retrieve folder information from the server.】的錯誤訊息,如下圖示:


然後用此訊息查了網路上的資訊後,終於確認只要目錄種出現任何 . (小數點) 開頭的目錄或檔案,就會導致這個問題發生,所以我必須要將所有的 .svn 目錄都改成 _svn 才行,並且修改 TortoiseSVN 的設定。

因此,我們修改 TortoiseSVN 的設定


[2010.03.13 補充]
在windows下,使用TortoiseSVN,因為,會有一個執行檔,TSVNcache.exe它會一直去掃整台電腦有SVN的資料夾,這樣會一直拖累電腦的速度~
可以使用下列的設定:
到Icon Overlays的頁面
1. 預設是「Default」選擇「Shell」會比較省資源,但是因為更新圖示的時機變成點選目錄後才更新,因此當階層目錄下最底層有更新的時候,你必須要進到最後底層才會看到紅色驚嘆號,所以你無法知道子目錄是否有異動。
如果是選擇「Default」系統會有一個常駐程式(TSVNcache.exe)即時的監控與更新圖示狀態,這樣子會比較耗用系統資源。如果你決定要選擇「Default」那建議也可以把「Unversioned files mark parent folder as modified」打勾就可以監控子目錄的異動了。
2. 這是監控的排除目錄與監控目錄,預設之下沒有任何設定,所以全部的資料都會掃,建議先將 所有的硬碟都設定成例外,然後再逐一設定專案放置的目錄(通常所有專案都會先放在一個目錄內對吧)


[2010.07.08 補充]
如何在FreeCommander可以使用svn的功能!
最近一直在使用FreeCommander來當作我的檔案管理器!
但是,透過FreeCommander確沒有辦法按右鍵對SVN的資料夾使用svn的功能!
最後發現原因竟然是把「Show overlays and context menu only in explorer」勾選起來的,就變的只能在Explorer去瀏覽資料夾時,才會產生svn的圖示和可以使用svn的功能!

參考資料:
VisualSVN Server
Subversion
SVN SERVER 安裝
How to setup SVN server
SVN (Subversion 、TortoiseSVN)設定大全
Version Control with Subversion(中文)
如何快速變更 Subversion 專用的隱藏目錄從 .svn 改成 _svn
如何優化調整 TortoiseSVN 加快執行效能
如何不被 TortoiseSVN 拖慢系統效率

沒有留言: