Tuesday, August 11, 2009

簡單 SVN (Subversion 、TortoiseSVN)應用及設定

簡單 SVN (Subversion , TortoiseSVN)應用及設定

Posted by Josh at 下午 10:45

SVN (Subversion) 是一套非常好用的 檔案 版本控制(Revision control) 系統

除了可以很方便的追蹤,交換,合併,比對檔案外,

更能保護檔案不會受到一些意外而讓心血的結晶損毀,

也可以讓團隊合作時,更加有效率。

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

在單人工作,及多人工作時的一些設定及用法,希望能幫助更多人上手

1.

在完全個人的環境下,在沒有多人共用及網路的需求下

其實不需要Subversion 去架設Server ,僅僅使用 TortoiseSVN 即可

可以在自己電腦上進行檔案版本的控制,

不過建議至少要兩顆以上硬碟,並將檔案庫及工作目錄分開放置

假設工作目錄為 C:\MyDocuments ,檔案庫目錄為 D:\SVN

首先先到 TortoiseSVN 的官方網站下載最新版軟體 並且安裝

建立好目錄後,在檔案總管 D:\SVN 當中 按下滑鼠右鍵

選擇 TortoiseSVN ->在此建立檔案庫 選擇原生檔案系統 按下確定

再來到 C:\MyDocuments 按下滑鼠右鍵選擇 SVN取出 (SVN Check Out)

在檔案庫URL中輸入 "file:///D:/SVN" (或是點擊 "..."按鈕直接選取)

按下確定完成第一次的Check Out

之後就可以在 C:\MyDocuments 目錄下進行工作

另外 記得 D:\SVN目錄要備份定時備份

2.

在多人工作或是在公司內、實驗室內做檔案管理時

架一台Server就是必要的工作了

以Windows為例 要架設Server實在是非常簡單

首先先下載 Subversion 並且安裝他 (預設路徑 C:\Program Files\Subversion)

在命令列環境下 下達命令

sc create "svnservice" binpath= "C:\Program Files\Subversion\bin\svnserve.exe --service --listen-port 5678 --listen-host 0.0.0.0 -r D:\SVN" displayname= "SVN Service" depend= Tcpip

可以將 SVN 設為 Windows 的 Service 讓他每次開機自動執行

並且指定 D:\SVN 為預設的檔案路徑

以及指定 5678 為網路連線的Port (請自行更換)

到 控制台 -> 系統管理工具 ->服務 當中 找到"SVN Service"

把他設為自動 並且啟動之後 就可以開始使用 (請確定防火牆是否開啟)

如果 D:\SVN 還沒建立檔案庫 請使用 (1) 的方式

或是在命令列鍵入以下指令來建立檔案庫

svnadmin create D:\SVN --fs-type fsfs

而Client端的設定一樣 要先下載 TortoiseSVN 並安裝後

在你所選擇的工作目錄中 按下滑鼠右鍵選擇 SVN取出 (SVN Check Out)

並在檔案庫URL中輸入 svn://ServerIp:5678/

其中 ServerIP 為 你所架設SVN Server的IP (或是Domain Name)

3.

對於檔案庫 可以對他進行權限的控管

首先打開檔案庫中 conf目錄下的 svnserve.conf檔案

拿掉命令前的 # 結果為以下所視

[general]

anon-access = none #表示匿名者存取不能 若改為read表示可讀不可寫入

auth-access = write #表示登入者可以存取

password-db = passwd #存放帳號密碼的檔案

authz-db = authz #可對使用者分群組 以及對檔案庫中的目錄進行控管(非必要)

再開啟 檔案 passwd

並且依照 "帳號" = "密碼" 的原則輸入即可

請注意 這裡的密碼是明文 (和Apache的不一樣)

如要分群組 如要分群組請再打開 檔案 authz

以類似以下的方式進行設定 (請不要使用中文 XD)

[groups]

群組 = 使用者

群組1 = 使用者1,使用者2

群組2 = 使用者1,使用者3

群組3 = 使用者3,使用者4

[/]

@群組 = rw #群組擁有整個資料庫的存取權限

* = #其他人不能存取

[/目錄]

@群組1 = rw

使用者3 =

使用者4 = rw

* = r

4.

以上介紹的是所謂的單一檔案庫的方式

其實也可以共存多個檔案庫

例如 將 D:\SVN設為SVN Server的跟目錄 不過不在這裡建立檔案庫

在 他的子目錄建立檔案庫 例如 D:\SVN\Proj1

在客戶端存取時一樣只要加上路徑Proj1即可

建立多個檔案庫的優點是可以分散風險 避免當檔案庫損毀的危險

另外也可以使的檔案版本編號成長的慢一些 ^^

缺點就是 設定跟權限都要各自維護

5.

這是我使用SVN幾年來的一點點心得

不要將一些不該存的檔案放到檔案庫中

以程式設計為例 不要將*.o *.obj *.dll *.exe *.tmp等檔案上傳

這些除了有些是暫存檔外 有些可以利用其他檔案 經由簡單步驟所產生(編譯)

但是 相對的 *.sln *.vcproj (Visual Studio的專案檔)或是其他專案檔 就一定要保留

才能讓其他人也利用檔案庫中有的檔案 快速的產生結果

另外 也不需要將檔案壓縮起來之後 在放入檔案庫

檔案庫會自動幫你做檔案的壓縮

壓縮起來反而不利做版本之間的比對

要大幅度修改文件內容 或是要將原文件修改到另外一個用途

不需要先將原文件複製到另一個文件夾或是加一個.bak做區隔

反而浪費容量 也不易管理

直接使用SVN提供的 分支(branch) 或是 標記(tag) 功能即可

如果有一個文件會有多人要修改 尤其是 Word , Excel 這種文件

(存成二進位檔 非明文 的文件)

在開始修改前 要先將他鎖定 等修改完之後在解除

因為這類檔案 不像程式碼 或是一般txt 存成明文的文件

可以簡易的進行比對 分析差異 當你在修改時 有其他人已經修改並上傳

就會非常麻煩....

修改前最好先進行 更新 (Update)的動作 讓自己要修改的版本是最新的

修改完成後(測試後)也要馬上進行 上傳修改(Commit)的動作

6.

SVN本身還可以搭配Apache使用http / https 的協定

或是搭配 SSH 軟體 使用安全的加密通道來存取

不過這屬進階設定 就不在這裡討論

Subversion官方網站 http://subversion.tigris.org/

TortoiseSVN官方網站 http://tortoisesvn.tigris.org/

SVN Book(英文) http://svnbook.red-bean.com/nightly/en/index.html

SVN Book(中譯) http://svn.stu.edu.tw/svnbook/book.html

jedi.org 旅行必備、居家良伴、送禮自用兩相宜的「版本控制系統」http://jedi.org/blog/archives/004784.html

Jserv's blog 淺談版本控制系統 http://blog.linux.org.tw/~jserv/archives/001148.html

Seety 利用 SVN 進行版本控制 http://www.seety.org/technote/programming/svn_intro

7.

以上文章歡迎轉載 請保留文章完整並註明出處 JoStudio

有任何錯誤歡迎指正 感謝

Labels: SVN, 記事, 軟體, 雜記

5 comments:

Kenny Hsu 提到...

想請問一下,windows下備份SVN的repository用哪種方法比較好?

1.用svn dump d:\svn > svn.dump

2.用您說的方法把整個d:\svn整個壓縮備份

PS:所謂的比較好是說重新安裝windows以及SVN之後,哪種比較容易回復而不用繁雜的設定即可馬上開始使用。

2007/11/17 上午 03:56:00

Josh 提到...

如果為服務中 請用svnadmin hotcopy指令來備份

如果不在服務中直接壓縮起來

dump會將所有修訂版本頃印出來,並不適合用來作為備份之用

2007/11/17 上午 04:11:00

Josh 提到...

其他備份及同步的作法請看

http://jostudio.blogspot.com/2007/06/svn.html

2007/11/17 上午 04:13:00

Kenny Hsu 提到...

抱歉,還是SVN的新手所以還有點疑問:

1.hotcopy也會保存歷次版本資訊嗎?SVN本來就是拿來做版本控制,所以備份的時候不備份以前的版本似乎有點怪?

2.SVN我只安裝在本機給自己使用,repository也只有一個(平常就是在用這個),這應該算是服務中吧?我其實也還沒搞懂…

3.dump的使用時機為何呢?

2007/11/20 下午 12:04:00

Josh 提到...

hotcopy 就是將現有檔案庫複製一份到其他地方 他會保留所有原始資訊在 當然也包括所有舊的版本

SVN 只有自己在用就直接壓起來就好XD

dump也是可以拿來備份啦 只是他要先將檔案轉存 再用load重新匯入 感覺就麻煩許多...

另外 如果怕放在自己電腦不安全 可以多多利用sync同步的功能 備份到另一台電腦或是另一顆硬碟

2007/12/2 上午 06:38:00

No comments: