Ads 468x60px

##EasyReadMore##

14 5月, 2013

windows 下 VisualSVN Server + Tortoisesvn 版本控制伺服器

image

本想在windows 架一個trac 來做版本控制

沒想到手續繁雜比在linux 下安裝還要麻煩

因此找了另一個解決方案

VisualSVN Server + Tortoisesvn 很簡單的就架起了版本控制伺服器

雖然沒有像trac 功能這麼齊但也很夠用了

SVN 伺服器端 VisualSVN Server
• 這裡我選擇以 VisualSVN 提供維護的 VisualSVN server for windows 來做為 SVN 的伺服器。這個版本同時也包含 Subversion 客戶端的文字介面工具。
• 檔案下載:http://www.visualsvn.com/server/download/
• visualsvn安裝畫面
0306pic0001
• 選擇安裝管理工具及Server

0306pic0002
• 選擇 Visualsvn server 提通 http(port 80) 及 https(port 442) 兩種連線方式,但這裡要請將 port 修改為其他連線 port 避免與標準的通訊連線阜號衝突。
• Authentication(認證)請選擇 Subversion 自行提供的認證自行建立使用者帳號及密碼(預設為 htpasswd 的格式),付費版本有提供 AD 整合 SingleSingOn 的服務。

0306pic0003
• 裝好後就如下面畫面,右半部畫面清楚的顯示目前這個 Server 的相關資訊。

0306pic0004
• 使用滑鼠右鍵就可以建立新的儲存庫。

0306pic0005
• 先建立一個測試用的儲存庫(Repositories) 名稱為 test ,路徑是:https: / /本機名稱:8443/svn/test/
0306pic0006
• 接下來在建立一個使用者帳號,用來存取這個儲存庫。
0306pic0007
SVN 客戶端工具 Tortoisesvn

http://tortoisesvn.net/downloads.html
• 有 TortoiseSVN 這套很好用的的圖型化工具可供選擇,他結合了檔案總管可以使用滑鼠右鍵選單就可以啟用 SVN 的各項功能。

0306pic0008
svn import
• 第一次使用 SVN 的時候因為整個 Repo 是空的,第一次建立通常使用 import 先將目前的資料整批的匯入。
• 我先建立個目錄 test ,在裡面建立各檔案 hello.html 內容如下:

0306pic0009
• 把這個檔案 import 到 svn server 這個 test 的儲藏庫內。

0306pic00010
• 提供 SVN 的路徑,及需要記錄的訊息內容。
0306pic00011
• 因為我們選擇的是 https 所以會出現憑證確認的詢問畫面,選擇第一個允許即可。
0306pic00012
• 輸入帳密。

0306pic00013
• 完成,並給予修訂的版次。
0306pic00014
• 以上動作是只有第一次使用的時候整批匯入才會用到。
• 回到 SVN server 就會看到 trunk 目錄下這檔案已經被匯入了。

0306pic00015
svn checkout
• 底下範例為建立一個空的目錄 test_jangmt 並且透過 checkout 的功能取得最新的版本。
0306pic00016
• 輸入另一個使用者 jangmt 認證資訊。

0306pic00017
• 取得最新的版本,目錄出現打溝溝的符號。
0306pic00018
svn commit
• 當我們對程式碼修改的時候,可以透過 commit 提交到儲存庫上面成為一個新的修訂版。
• 當此目錄有修改過的文件目錄會必成紅色的驚嘆號。
0306pic00019
• 按右鍵選擇 svn commit。
0306pic00020
• 輸入 message 說明這次 commit 的變動。
0306pic00021
• 上傳並且得到新的修訂版次 3。

0306pic00022
• 如果你仔細觀看 svn showlog 他會顯示已經合併程式碼的紀錄出現。

svn update
• 當 svn 儲存庫上面有新的版本,我們只要執行 svn update 指令就可以取得最新的版本到目前的工作目錄上面。
0306pic00023
svn add
• 當你的工作環境需要增加一個檔案,可以先把檔案在工作目錄中建立好。使用 svn add 將檔案上傳上去,點選後檔案前面的圖示會變成有個 + 的符號,在下次 commit 的時候就會將這個檔案上傳到 svn 儲存庫中。

0306pic00024
• svn commit 上傳

0306pic00025
衝突的發生
• 當兩個不同的使用者,用相同的檔名上傳到同一個儲存庫,系統無法正確判對到底誰是對的所以後來的 commit 就會被檔掉無法更新。

0306pic00026
• 錯誤記錄。

0306pic00027

svn tags/branches
• 如果遇到這樣的問題可以先用開分支或是 tags方式,先複製出工作副本到 tags或是 branches 內,進行自己的版本開發可以以原本的 trunk 內的版本為基礎,進行自己想要的測試。
0306pic00028 0306pic00029

• 當然在本地端的工作副本也要開個新的以利區隔。
0306pic00030
.svn 目錄
• 每一個工作複本的目錄都有名為 .svn 的子目錄,該目錄是隱藏目錄。它是一個相當重要的目錄,Subversion 靠它來管理你的工作目錄上的版本。
SVN hooks
• 當我們很高興的完成了上面的設定,但是發現目前的系統是一個網頁程式我希望能將最新的修改放到網路上去,但這必須要每次都到 web server 的所在目錄使用 svn update 更新才可以取得最新的版本,這很麻煩。因為通常在版本管理的過程中,對於使用者登入系統這件工作是希望越少越好,所以 svn 提供一個 hooks 的功能可以在 commit 時同時執行一個 shell script 來完成 svn update 的工作。
• 關於 svn hooks 通常提供底下幾種事件狀況:

0306pic00031

• 這個目錄以 virtualsvn 通常是放在 C:\Repositories\test\hooks 底下,內容預設為 linux 上面的 shell script 附檔名為 .tmpl 為不可以執行的,如果 windows 版本需要使用,需要編寫為附檔名為 .bat 型態的批次檔放在這裡。
• 於是我打算將目前 test 的儲存庫的 trunk 版本的最新版放到本機負責 web 呈現的目錄 C:\Users\mtchang\website\svn\test_web 。
• 在建立 svn hooks 之前請先設定好 web 目錄的 svn checkout 資訊,讓目錄產生 .svn 的目錄以方便取用遠端的資訊。
• 在 C:\Program Files (x86)\VisualSVN Server\bin\ 及 C:\Program Files\TortoiseSVN\bin\ 都有 SVN 的客戶端工具可以使用。
• 寫個 C:\Repositories\test\hooks\post-commit.bat 的批次檔在這個路徑下,內容類似如下:
"C:\Program Files\TortoiseSVN\bin\svn" update C:\Users\mtchang\website\svn\test_web\ --username svn --password 0000 --no-auth-cache --non-interactive --trust-server-cert
• 語法請見 svn help update 說明
• 這段功能因為預設的版本為 linux shell 的版本,如果需要 windows 版本需要自行調整指令,不是每個版本都可以正常工作。
• 詳細可用 post-commit hooks 關鍵字查詢可以得到很多人提供他們可以工作的批次檔案。
• Windows 需要注意寫入權限,post-commit hooks 執行應該是以使用者權限執行的,所以目錄需要有一般使用者可以寫入的權限才可以正確工作。
參考
• http://twpug.net/docs/Subversion SVN 中文文件
• http://subversion.apache.org/packages.html#windows 下載 SVN
• http://blog.longwin.com.tw/2007/07/svn_tutorial_2007/ SVN 基本指令教學
• http://www.ibiblio.org/fosphost/exhost.htm 自由軟體主機服務列表
• http://hi.baidu.com/zwfec/blog/item/0af4942f978f73221e308949.html

http://goo.gl/7LgnX

0 意見:

張貼留言

 
Blogger Templates