2006/12/30

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

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
有任何錯誤歡迎指正 感謝

7 comments:

Kenny 提到...

想請問一下,windows下備份SVN的repository用哪種方法比較好?
1.用svn dump d:\svn > svn.dump
2.用您說的方法把整個d:\svn整個壓縮備份

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

Josh 提到...
作者已經移除這則留言。
Josh 提到...

其他備份及同步的作法請看
http://jostudio.blogspot.com/2007/06/svn.html

Kenny 提到...

抱歉,還是SVN的新手所以還有點疑問:
1.hotcopy也會保存歷次版本資訊嗎?SVN本來就是拿來做版本控制,所以備份的時候不備份以前的版本似乎有點怪?
2.SVN我只安裝在本機給自己使用,repository也只有一個(平常就是在用這個),這應該算是服務中吧?我其實也還沒搞懂…
3.dump的使用時機為何呢?

Josh 提到...

hotcopy 就是將現有檔案庫複製一份到其他地方 他會保留所有原始資訊在 當然也包括所有舊的版本
SVN 只有自己在用就直接壓起來就好XD
dump也是可以拿來備份啦 只是他要先將檔案轉存 再用load重新匯入 感覺就麻煩許多...
另外 如果怕放在自己電腦不安全 可以多多利用sync同步的功能 備份到另一台電腦或是另一顆硬碟

Josh 提到...

修正一下 dump作為備份或是檔案庫搬遷也蠻方便的
還可以跟其他檔案庫進行合併 只要目錄或檔名不衝突即可
不過一樣 沒有辦法匯出檔案庫設定 不過應該不是問題才是

Unknown 提到...

大大,方便請教您svn的問題嗎?

 
Back to Top
This Site Power by JoStudio. Some Rights Reserved.