茫茫網海中的冷日
         
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
 恭喜您是本站第 1664550 位訪客!  登入  | 註冊
主選單

Google 自訂搜尋

Goole 廣告

隨機相片
IMG_60D_00342.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

軟工藝術 : [轉貼]簡單 SVN (Subversion , TortoiseSVN)應用及設定

發表者 討論內容
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15766
[轉貼]簡單 SVN (Subversion , TortoiseSVN)應用及設定
簡單 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
有任何錯誤歡迎指正 感謝

標籤: 記事, 軟體, 雜記

冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15766
[轉貼]SVN (Subversion 、TortoiseSVN)設定大全
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(在
<apache_root>
<apache安裝目錄 conf="" loadmodule=""> 
#LoadModule dav_module modules/mod_dav.so
#LoadModule dav_fs_module modules/mod_dav_fs.so

把前面的 '#' 字元刪除,然後把下面幾行文字?#91;到這群 LoadModule 指令的後面:
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
</apache安裝目錄>
</apache_root> 
以上動作完成之後就可以重新啟動Apache

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

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

<location> /svn/repos_name</location> > DAV svn<location> SVNPath /absolute/path/to/repository</location></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
參考連結:

JoStudio
juee.com
php5學習日記

冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15766
[轉貼]TortoiseSVN 使用教程

TortoiseSVN 使用教程

TortoiseSVN 是 Subversion 版本控制系統的一個免費開源客戶端,可以超越時間的管理文件和目錄。


TortoiseSVN 安裝

下載地址: https://tortoisesvn.net/downloads.html, 頁面裡有語言包補丁的下載鏈接。

目前最新版為 1.11.0 下載地址: https://osdn.net/projects/tortoisesvn/storage/1.11.0/

在語言補丁包中我們可以找到中文的補丁並下載下來:

運行下載的 TortoiseSVN 安裝程序

運行下載的 TortoiseSVN 中文語言包

正確安裝後,應該進行一次的重開機,以確保 TortoiseSVN 的正確無誤。

修改 TortoiseSVN 默認語言

TortoiseSVN 安裝完後默認的界面是英文的,我們可以通過設置修改成已安裝語言


TortoiseSVN 的使用

建立一個 runoob01 的工作目錄

所謂的 runoob01 目錄其實就是您平常用來存放工作檔案的地方。通常我們會等到自己的工作做的一個段落的時候再進行備份。所以我們平常都是在 runoob01 目錄下面工作,等到適當時機在 commit 到 repository 中。舉例來說,我們想在 D 盤下面建立一個名為 runoob01 的目錄。首先先把這個目錄建立出來。

進入創建的目錄在空白處按下右鍵後(您可以在 MyWork 目錄的 icon 上按,也可進入 MyWork 目錄後,在空白的地方按),選擇 SVN checkout

接著您可以看到如下的畫面:

首先我們要填入的是 repository(版本庫)的位置,對於 SVN 來說,repository 的位置都是 URL。版本庫 URL 這裡填入我們測試的版本倉庫地址 svn://10.0.4.17/runoob01

接著,稍微看一下 Checkout directory(檢出至目錄),這個字段應該要指向您的 runoob01 目錄。

確認後,按下 OK 按鈕,您應該可以看到如下的信息窗口。


這樣就表示動作完成。按下 OK 按鈕後,再到您剛剛建立的目錄下。您將會看到 MyWork 目錄下面多了一個名為 .svn 的目錄(這個目錄是隱藏的,如果您的檔案管理員沒有設定可以看到隱藏目錄,您將無法看到它) 。

如果您要在一個已經存在的 SVN Server 上面 checkout 出上面的檔案,您只需要給定正確的 SVN URL 以及要 checkout 目錄的名稱。就可以取得指定的檔案及目錄了。


新增檔案及目錄到 Repository 中 add commit

創建目錄 dir01, 在目錄裡新增文件

將新增的文件加入到 SVN 版本控制中,TortoiseSVN 會把準備要加入的檔案及目錄,勾選需要加入的文件。

按下 OK 後,您將會看到如下的訊息窗口:

這個 Add(增加)的動作並未真正的將檔案放到 Repository 中。僅僅是告知 SVN 準備要在 Repository 中放入這些檔案。 此時的文件狀態為:

這些檔案真正的放入到 Repository 中,空白處右鍵選擇 SVN commit(提交) 緊接著,您將會看到如下的窗口出現:


在這裡可以清楚地瞭解到哪些檔案要被 commit 到 repository(版本庫)中。同樣的,如果您有檔案不想在這個時候 commit 到 Repository,您可以取消選取的檔案,這樣他們就不會被 commit 到 Repository 中。在"信息"文本框中可以寫入對本次 commit 的說明。

點擊"確認"後完成 commit 動作,然後您可以到 runoob 目錄中,確定是否所有的檔案 icon 都有如下的綠色勾勾在上面,這樣代表您的檔案都正確無誤的到 repository 中。


更新檔案及目錄 update

由於版本控制系統多半都是由許多人共同使用。所以,同樣的檔案可能還有人會去進行編輯。為了確保您工作目錄中的檔案與 Repository 中的檔案是同步的。建議您在編輯前都先進行更新的動作。

在想要更新的檔案或目錄 icon 上面按下鼠標右鍵。並且選擇 SVN Update。

有時我們需要回溯至特定的日期或是版本,這時就可以利用 SVN 的 Update to revision 的功能。在想要更新的檔案或目錄 icon 上面按下鼠標右鍵。並且選擇 TortoiseSVN->Update to revision(更新至版本)。


複製檔案及目錄 branch

很多時候您會希望有另外一個複製的目錄來進行新的編修。等到確定這個分支的修改已經完畢了,再合併到原來的主要開發版本上。舉例來說,我們目前在runoob01/trunk下面有如下的目錄及檔案:


現在,我們要為 trunk 這個目錄建立一個 branch。假設我們希望這個目錄是在 D:\runoob01\branch。首先我們可以在 trunk 目錄下面的空白處,或是直接在 trunk 的 icon 下面按下鼠標右鍵選擇 Branch/Tag…(分支/標記)這個選項,您將會看到如下的對話框出現。

請先確認 From WC at URL(從工作副本/URL): 中的目錄是您要複製的來源目錄。接著,在 To URL(至路徑)中輸入您要複製過去的路徑。通常我們會將所有的 branch 集中在一個目錄下面。以上面的例子來說,branch 檔案都會集中在 branch 的子目錄下面。在 To URL 中您只需要輸入您要的目錄即可。目錄不存在時,會由 SVN 幫您建立。特別需要注意的是 SVN 因為斜線作為目錄分隔字符,而非反斜線。 接著在 Log message(日誌信息)輸入您此次 branch 的目的為何。按下 OK 就可以了。

如果成功,將可以看到下面的畫面:

按下 OK 就可以關閉這個窗口了。如果您此時立刻去 runoob01 目錄的 branch 子目錄下面,您將會失望的發現在該目錄下面並沒有剛剛指定的目錄存在。這是因為您 runoob01 目錄的部份還是舊的,您只需要在 branch 子目錄下面進行 SVN update 就可以看到這個新增的目錄了。新增的目錄就與原來的目錄無關了。您可以任意對他進行編輯,一直到您確認好所有在 branch 下面該做的工作都完成後,您可以選擇將這個 branch merge 回原來的 trunk 目錄,或者是保留它在 branch 中。



合併動作 merge

假如我們在 branch 分支中對文件進行了修改或增加了文件,要 merge 回 trunk 目錄中,方法很簡單。以上面的例子來說,我們在 D:\runoob01\trunk目錄空白處,按下鼠標右鍵,選擇 Merge(合併):

這個畫面主要分為三個部份,前面的 From: 與 To: 是要問您打算從 Branch 中的哪個版本到哪個版本,merge 回原來的 trunk 目錄中。因此,From 跟 To 的 URL 字段應當都是指定原來 branch 的目錄下。剩下的就是指定要 merge 的 revision 範圍。以上面的例子而言,我們從 Branch 的 Revision 7 開始 merge 到 Branch 下面的最新版本。您可以透過,Dry run 按鈕,試作一次 Merge。這個 merge 只會顯示一些訊息,不會真正的更新到 trunk 的目錄去。只有按下 Merge 按鈕後,才會真正的將 branch 的檔案與 trunk 的檔案合併起來。

如果您確認這次的 merge 沒有問題,您可以直接使用 commit 來將這兩個被修改的檔案 commit 回 SVN repository 上。如果有問題,您可以直接修改這兩個檔案,直到確認 ok 了,再行 commit。


製作 Tag 或是 Release

所謂的 Tag 或是 Release 就是一個特別的版本,因為這個版本可能有特別的意義。例如:這個版本是特別的 Milestone 或是 release 給客戶的版本。其實,Tag 與 Release 的作法與 Branch 完全相同。只是 Branch 可能會需要 merge 回原來的 trunk 中,而 tag 及 release 大部分都不需要 merge 回 trunk 中。


舉例來說,今天我們的 trunk 做了一版,這個版本被認定是軟件的 1.0 版。 1.0版對於開發來說是一個非常重要的里程碑。所以我們要特別為他做一個標記,亦即 Tag。假設,這個 1.0 版是要正式 release 給客戶或是相關 vendor,我們要可以為他做一個 Release 的標記。基本上,SVN 只有目錄的概念,並沒有什麼 Tag 的用法。所以您會看到在 SVN 的選單上面,Branch 與 Tag 是同一個項目。以這個 1.0 的例子來說,我們在 runoob01 目錄下創建 tags 目錄用於存放打 tag 的版本,並提交到版本庫,然後在 Trunk 上面,按下鼠標右鍵,選擇 Branch/Tag 的項目:

成功的話,您就在對應的 Tag 目錄下面建立了一個 v1.0 的目錄。當然,如果您這時到 Tag 的目錄下面去,會看不到這個目錄,您需要在 Tag 目錄下面 update 一下,才能看到它。


原文出處:TortoiseSVN 使用教程 | 菜鸟教程
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15766
[轉貼]TortoiseSVN 使用教程

TortoiseSVN使用教程[多圖超詳細]

安裝及下載client 端

  1. 下載Windows 端程式: http://tortoisesvn.net/downloads。一般而言,如果是32-bit的Windows XP 應該使用TortoiseSVN-1.4.x.xxxx-win32-svn-1.4.x.msi 這個檔案。如果是64-bit 的作業系統,則應該使用TortoiseSVN-1.4.x.xxxx-x64-svn-1.4.x.msi 這個檔案。
  2. 執行下載回來的TortoiseSVN 安裝程式,就會進行TortoiseSVN 的安裝。正確安裝後, 應該進行一次的重開機,以確保TortoiseSVN 的正確無誤。
  3. 安裝成功後,在檔案管理員內按下滑鼠右鍵,應該可以看到如右圖所示:
  4. 大部分的TortoiseSVN的操作都是透過檔案管理員及滑鼠右鍵就可以完成了。如果您之前使用過TortoiseCVS,應該會對這種操作方式感到十分親切。

什麼是SVN(Subversion)?

有一個簡單但不十分精確比喻: SVN = 版本控制 + 備份伺服器

簡單的說,您可以把SVN當成您的備份伺服器,更好的是,他可以幫您記住每次上傳到這個伺服器的檔案內容。並且自動的賦予每次的變更一個版本。

通常,我們稱用來存放上傳檔案的地方就做Repository。用中文來說,有點像是檔案倉庫的意思。不過,通常我們還是使用Repository這個名詞。基本上,第一次我們需要有一個新增(add)檔案的動作,將想要備份的檔案放到Repository上面。日後,當您有任何修改時,都可以上傳到Repository上面, 上傳已經存在且修改過的檔案就叫做commit
,也就是提交修改給SVN server的意思。 針對每次的commit,SVN server都會賦予他一個新的版本。同時,也會把每次上傳的時間記錄下來。日後,因為某些因素,如果您需要從Repository下載曾經提交的檔案。您可以直接選擇取得最新的版本,也可以取得任何一個之前的版本。如果忘記了版本,還是可以靠記憶嘗試取得某個日期的版本。

為甚麼要用SVN?

  1. 備份工作檔案是十分重要的。您永遠不知道計算機上的硬碟何時會壞掉。根據經驗法則再加上 摩菲定理,壞事情往往都發生在最重要的時刻。例如,要release東西的前一刻,硬碟完全壞掉,無法修復。所以,常常備份工作資料是非常重要的。大部分公司的server都會有 專門的備份機制,甚至是異地備援。絕對比放在自己的計算機裡頭,或是隨身碟上面來的安全。
  2. 版本控制非常重要。您無法保證手頭上最新版本永遠都是對的。很多時候,在經過數天努力工作後,您才發現走錯方向。需要將所有的修改回覆到數天前版本。沒有幾個人能夠完全記住自己修改過什麼東西。如果沒有做好版本控管,那麼,最差的狀況就是要全部重來
  3. 夥伴間的 資料同步也是非常重要的。很多時候,除了您個人外,還有其它的夥伴也需要您的檔案。怎麼把最新的檔案提供給夥伴呢?用e-mail?根據經驗,用e-mail是一個很差的辦法。到了最後,根本就不知道哪一封e-mail才是新的。因為可能您最新的e-mail已經被當成垃圾信給丟了。別忘了,現在很多e-mail軟體都有anti-spam的功能,說不定這些信件都被當成廣告信給處理掉了。而且,您也應該知道一般檔案如果放在e-mail內,檔案大小會變得比較大(通常是原來的4/3倍以上)。如果每天更新一次,恐怕幾天沒收信的話,信箱就爆了!
  4. 如果沒有一個好的辦法, 備份不同版本是很耗費硬碟空間的
    。例如:您有一個總共10MB的目錄,使用單純的檔案備份。如果有10個版本就會變成100MB。20個版本就有200MB。如果,不想備份這麼多版本,勢必就是要減少備份的次數。拉長備份週期將會導致資料遺失的危險性增高。把舊的不需要的備份刪除?根據經驗,只要時間一拉長,您跟本就不知道一個月以前的版本是重要或者是不重要

SVN能幫我們解決上面的問題嗎?答案是肯定的:

  1. SVN Repository可以是自己計算機上的一個 目錄,或者是隨身碟(不建議這樣用)。當然也可以是公司的 伺服器
  2. SVN有很棒的版本控管機制。所有上傳的版本都會幫您記錄下來。日後您可以隨時取得某一個時刻的版本。而且,也有 版本分支及合併等好用的功能。
  3. SVN可以讓不同的開發者存取同樣的檔案,並且利用SVN Server作為檔案同步的機制。也就是說,您有檔案更新時,無須將檔案寄給您的開發成員。只需要告訴他新的版本已經在SVN Server上面,請他自己去SVN Server上面就可以取得最新版本。而且,SVN Server也可以做到當您上傳新版本後,自動發信給相關的成員。
  4. SVN的存放檔案方式是採用 差異備份的方式。也就是說,他只會備份有不同的地方。所以很 省硬碟空間。此外,他也可以針對所謂的非文字檔案進行差異備份

怎麼樣在Windows下面建立SVN Repository?

假設您已經安裝前面所提及的TortoiseSVN這套軟體,現在我們先告訴您如何用自己的硬碟或是隨身碟當作SVN Repository的存放地點。如果您只想知道如何存取一個已經建立好的SVN Server上面的Repository,請直接跳過本節。

假設您的要放置 Repository的地方是E盤。您需要先建立一個 空的目錄
。以下面的例子而言,我們在E槽下面建立了一個名為svn_repo的目錄。SVN並沒有限定Repository目錄名稱。您可以建立任何您自己喜歡的名稱。但是,強烈建議勿使用非 英文的檔名(如中文或日文)。

透過您的檔案管理員,在E:\svn_repo的Icon上面,按下滑鼠右鍵後,選擇TortoiseSVN->Create repository here。

接著,您會看到如下的一個視窗,這個視窗主要是問您,您希望使用的Repository資料庫格式是FSFS還是BDB。基本上,請選擇FSFS就可以了。按下OK按鈕後,您將可以看到下一個畫面。

這就表示您的SVN repository已經成功的建立了。接下來就是要把您的檔案備份進來。日後,只要需要使用這個repository,我們就可以使用 file:///E:/SVN_REPO表示它。SVN就是透過這種URL的方式到如何與Repository取得聯絡。各種URL的格式如下:

file:///磁碟驅動器|/repository所在目錄/子目錄
http://賬號@伺服器名稱/ repository所在目錄/子目錄
https://賬號@伺服器名稱/ repository所在目錄/子目錄
svn+ssh://賬號@伺服器名稱/ repository所在目錄/子目錄
其中,http表示使用一般的超文字傳輸通訊協議。https表示使用加密的超文字傳輸通訊協議。svn+ssh表示透過SSH加密通訊的管道,進行存取。

建立一個Working目錄

所謂的Working目錄其實就是 您平常用來存放工作檔案的地方。通常我們會等到自己的工作做的一個段落的時候再進行備份。
所以我們平常都是在 Working目錄下面工作,等到適當時機在commit到repository中。舉例來說,我們想在D盤下面建立一個名為working的目錄。首先先把這個目錄建立出來。

此時,這個目錄應該為空的。

在檔案管理員中按下右鍵後(您可以在working目錄的icon上按,也可進入working目錄後,在空白的地方按),選擇 SVN checkout。

接著您可以看到如下的畫面:

首先我們要填入的是repository的位置, 對於SVN來說,repository的位置都是URL。由於我們前面已經在E槽建立一個repository,因此,我們現在要在URL of repository這一欄填入file:///E:/svn_repo/。

接著,稍微看一下Checkout directory,這個欄位應該要指向您的working目錄。確認後,按下OK按鈕,您應該可以看到如下的訊息視窗。

這樣就表示動作完成。按下OK按鈕後,再到您剛剛建立的目錄下。您將會看到 working目錄下面多了一個名為.svn的目錄(這個目錄是隱藏的,如果您的檔案管理員沒有設定可以看到隱藏目錄,您將無法看到它) 。

SVN會在您的工作目錄下,以及其子目錄下建立這個.svn的子目錄。您 不應該進去這個目錄
,尤其不應該更動這個目錄下面的任何內容。否則會很可能會造成SVN無法正常運作。

由於,原來的repository是空的,所以我們現在的working目錄也是空的。如果您現在checkout的是一個已經有內容的repository,您將會看到working目錄下面現在多了許多目錄及檔案。

如果您要在一個 已經存在的SVN Server上面checkout出上面的檔案,您只需要給定正確的URL以及working目錄的名稱。就可以取得指定的檔案及目錄了。

新增檔案及目錄到Repository中

假設您前面的動作都無誤。現在您開始開發一個新的程式。假設您開發的程式將放在前面建立的working目錄下面的my_ prj子目錄。如下所示:


假設您已經編輯好檔案,準備把他們放到SVN的repository中。您需要在my_prj目錄的icon上面,按滑鼠右鍵,並且選擇 TortoiseSVN->Add:

接著, TortoiseSVN會把準備要加入的檔案及目錄,顯示給您看。打勾的就是等下要被加入到Repository中的。如果您有某些檔案或是目錄不想在這次加入,您可以讓該專案不要被勾選。如此,它就不會被加入到Repository去。

按下OK後,您將會看到如下的訊息視窗:


這樣就表示成功了。有一點要注意的是, 這個Add的動作並未真正的將檔案放到Repository中。僅僅是告知SVN準備要在Repository中放入這些檔案。此時,如果您透過檔案管理員檢視這些檔案,應該會看到一個白色紅底的驚歎號在檔案icon的下方。

這是表示您的working目錄中的檔案與Repository中的檔案還沒有同步。現在我們要多一個commit的動作。讓這些檔案真正的放入到 Repository中。您可以在my_prj目錄的icon上或者是my_prj目錄內的空白處按下滑鼠右鍵,叫出如下的選單, 並且選擇SVN commit。

緊接著,您將會看到如下的窗口出現:

在這個視窗中,下半部會列出一個清單,讓您清楚的瞭解到哪些檔案要被commit到repository中。同樣的,如果您有檔案不想在這個時候commit到Repository,您可以取消選取的檔案,這樣他們就不會被commit到Repository中。

在檔案列表的上方是Message欄,您可以在欄中輸入本次commit的目的。這是十分重要的欄位,當您commit的次數很多時,可以靠這個訊息知道版本與版本之間的差異。當您輸入好Message,按下OK之後,就可以看到如下的窗口出現,通知您已經將指定的檔案送到Repository中。

您可以到先前的folder中,確定是否所有的檔案icon都有如下的綠色勾勾在上面,這樣代表您的檔案都正確無誤的到repository中。


有時候,因為Windows本身的問題,您可能會看到有些icon沒有變成綠色的勾勾。此時,多按F5幾次,應該就可以解決這個問題。如果,仍然不行,表示您之前的commit動作真的有問題。請仔細檢查之前的commit動作是否正確。

更新檔案及目錄

為何需要更新?由於版本控制系統多半都是由許多人共同使用。所以,同樣的檔案可能還有人會去進行編輯。為了確保您工作目錄中的檔案與Repository中的檔案是同步的。建議您在編輯前都先進行更新的動作。在此,我們都先假設您已經將檔案check out過一次。現在要說明的是如何在一個check out過的目錄進行update。在想要更新的檔案或目錄icon上面按下滑鼠右鍵。並且選擇SVN Update。


正常的狀況下,您可以看到如上的視窗。在這個視窗中會顯示有哪些檔案更新了。如果沒有看到檔案更新的相關資訊,這表示您的目錄中的檔案已經是最新的,所以無須進行更新。

更新至特定版本

有時我們需要回溯至特定的日期或是版本,這時就可以利用SVN的Update to revision的功能。在想要更新的檔案或目錄icon上面按下滑鼠右鍵。並且選擇 TortoiseSVN->Update to revision。



在這個Update視窗中,您可以選擇更新到最新版本(HEAD)。也可以選擇更新到某個指定的版本(Revision)。當然,您可能早就記不起來正確的版本號碼。可能只隱約的記得大概在什麼時間。沒關係,按下Show log按鈕,您就可以回顧歷史了。

所有您曾經做過的動作,及其日期與對應的版本都會列在這個視窗上面,只要在你想要的版上面點一下,讓他變成反白,然後按下OK。這個版本就會自動填入Update視窗中的Revision欄位中。您只要再按下一次OK,這個版本就會被取出來到您的硬碟中。

複製檔案及目錄

很多時候您會希望有另外一個複製的目錄來進行新的編修。等到確定這個分支的修改已經完畢了,再合併到原來的主要開發版本上。舉例來說,我們目前在working copy下面有如下的目錄及檔案:

複製檔案及目錄

很多時候您會希望有另外一個複製的目錄來進行新的編修。等到確定這個分支的修改已經完畢了,再合併到原來的主要開發版本上。舉例來說,我們目前在working copy下面有如下的目錄及檔案:

在選擇Branch/Tag…這個專案後,您將會看到如下的對話框出現。

請先確認From WC at URL: 中的目錄是您要複製的來源目錄。接著,在To URL中輸入您要複製過去的路徑。通常我們會將所有的branch集中在一個目錄下面。以上面的例子來說,branch檔案都會集中在branch的子目錄下面。在To URL中您只需要輸入您要的目錄即可。目錄不存在時,會由SVN幫您建立。特別需要注意的是SVN因為斜線作為目錄分隔字元,而非反斜線。

接著在Log message輸入您此次branch的目的為何。按下OK就可以了。

如果成功,將可以看到下面的畫面:

按下OK就可以關閉這個視窗了。如果您此時立刻去working copy的branch子目錄下面,您將會失望的發現在該目錄下面並沒有剛剛指定的目錄存在。這是因為您working copy的部份還是舊的,您只需要在branch子目錄下面進行SVN update就可以看到這個新增的目錄了。新增的目錄就與原來的目錄無關了。您可以任意對他進行編輯,一直到您確認好所有在branch下面該做的工作都完成後,您可以選擇將這個branch merge回原來的trunk目錄,或者是保留它在branch中。

要merge回trunk目錄中,方法很簡單。以上面的例子來說,我們在D:\working\my_prj\trunk目錄空白處,按下滑鼠右鍵,選擇Merge:

接著可以看到如下的畫面:

這個畫面主要分為三個部份,前面的From: 與 To: 是要問您打算從Branch中的哪個版本到哪個版本,merge回原來的trunk目錄中。因此,From跟To的URL欄位應當都是指定原來 branch的目錄下。剩下的就是指定要merge的revision範圍。以上面的例子而言,我們從Branch的Revision 7開始merge到Branch下面的最新版本。您可以透過,Dry run按鈕,試作一次Merge。這個merge只會顯示一些訊息,不會真正的更新到trunk的目錄去。只有按下Merge按鈕後,才會真正的將 branch的檔案與trunk的檔案合併起來。

上面的訊息告訴我們在trunk目錄下面的yyyy.cpp及xxx1.cpp已經被更改過了。如果您在現在到trunk目錄下,會看到這兩個檔案處於被修改的狀態。


如果您確認這次的merge沒有問題,您可以直接使用commit來將這兩個被修改的檔案commit回SVN repository上。如果有問題,您可以直接修改這兩個檔案,直到確認ok了,再行commit。

製作Tag或是Release

所謂的Tag或是Release就是一個特別的版本,因為這個版本可能有特別的意義。例如: 這個版本是特別的Milestone或是release給客戶的版本。其實,Tag與Release的作法與Branch完全相同。只是Branch可能會需要merge回原來的trunk中,而tag及 release大部分都不需要merge回trunk中。 *舉例來說,今天我們的trunk做了一版,這個版本被認定是軟體的1.0版。***1.0版對於開發來說是一個非常重要的里程碑。所以我們要特別為他做一個標記,亦即Tag。假設,這個 1.0版是要正式release給客戶或是相關vendor,我們要可以為他做一個Release的標記。基本上,SVN只有目錄的概念,並沒有什麼 Tag的用法。所以您會看到再SVN的選單上面,Branch與Tag是同一個專案。以這個1.0的例子來說,我們就是在Trunk上面,按下滑鼠右鍵,選擇Branch/Tag的專案:


成功的話,您就在Tag目錄下面建立了一個1.0的目錄。當然,如果您這時到Tag的目錄下面去,會看不到這個目錄,您需要在Tag目錄下面update一下,才能看到它。

製作Release的作法與Tag完全相同。只是把Tag的目錄換成Release而已。

看到這裡,相信大家都已經領悟到無論是Branch,Tag或是Release都只是將指定的 Trunk版本複製一份到另外一個目錄去。至於這個目錄要叫Branch還是叫Release,SVN根本就不管。所以,您也可取其它的目錄名稱。不過,Branch,Tag及Release已經是SVN上面約定成俗的名稱。所以,除非您知道自己為何這樣做,否則,最好還是follow這個命名原則,以免後面新加入的人看不懂。

NOTE:同樣的道理Trunk也只是一個約定成俗的名稱。不一定要叫Trunk。只是大家看到Trunk目錄就會知道這裡面放的是主要的開發主幹。

快速參考

前面寫了不少廢話,主要是給完全沒有版本控制觀念的人看的。如果你想直接知道某個功能如何使用,請看下面的章節。

在後面的說明,皆以d:\working當作工作目錄。您可以將他換成其它任何您想要的目錄。

取得(Checkout)Repository

開啟檔案管理員,進入d:
在檔案管理員空白處按下滑鼠右鍵,選擇SVN Checkout
在Checkout對話方塊中,
URL of repository:repository的位置。
Checkout directory:要存放working copy的地方。
若d:\working目錄不存在,SVN會問您要不要建立這個目錄,請選擇Yes。
接著按下OK,即可checkout該目錄。


更新(Update)檔案或目錄

  1. 在您要由repository更新至working copy的檔案或是目錄的icon上面按下滑鼠右鍵。選擇SVN Update即可。
  2. 如果是要更新至特定的版本,則選擇TortoiseSVN->Update to revision。並且在Update對話方塊中的Revision欄位輸入您要的版本。也可以透過Show Log按鈕來檢視版本的資訊。

新增(Add)檔案或目錄

  1. 在尚不屬於repository的檔案或目錄的icon上按下滑鼠右鍵。選擇TortoiseSVN->Add。
  2. 選取要新增的檔案。
  3. 按下OK。

NOTE:新增的檔案要經過提交(Commit)的動作才回真正的放入Repository中。

提交(Commit)修改過的檔案或目錄
在修改過的檔案,或是在整個目錄的空白處按下滑鼠右鍵。
勾選真正要提交至Repository的檔案或目錄。
輸入本次提交的紀錄訊息(Message)。這個訊息應該要清楚明瞭,但不應過份簡單。以利日後版本追蹤。
按下OK。

Copy/Tag/Branch/Release檔案或目錄

  1. 確認您要處理的檔案或是目錄已經是Repository中最新的版本。
  2. 在要處理的目錄或是檔案上面按下滑鼠右鍵,選擇TortoiseSVN->Branch/Tag。
  3. 在To URL處輸入您要的目的地。
    1. branch:要產生一個分支。以區別與trunk不同的開發。
    2. tag:要形成一個標記,表示重要的milestone。

    3. release:表示一個已經正式的release的紀錄。


原文出處:TortoiseSVN使用教程[多圖超詳細] - IT閱讀
前一個主題 | 下一個主題 | 頁首 | | |



Powered by XOOPS 2.0 © 2001-2008 The XOOPS Project|