1 SVN簡介
The goal of the Subversion project is to build a version control system that is a compelling replacement for CVS in the open source community. The software is released under an Apache/BSD-style open source license.
SVN是一個版本控制軟體,類似CVS,但是 SVN的的 有點是開源的,而且SVN的版本控制能力給CVS還要強多。
SVN可以用于項目管理,還可以用于版本同步,功能可是十分強呢。
2 下載下傳
Subversion伺服器程式 http://subversion.tigris.org/
Windows 用戶端TortoiseSVN http://tortoisesvn.net/downloads
//-------------------------------------------------------------------------------------------------------------------------//
// Linux SVN Configure
//-------------------------------------------------------------------------------------------------------------------------//
3 Linux下安裝
3.1 安裝:
解壓:#: tar zxvf subversion-1.3.2.tar.gz
依次輸入./configure , make , make install 進行編譯安裝完成。其中make install也root操作。
3.2 開啟SVN服務:svnserve -d
檢 測服務是否開啟:netstat -ntlp如果看到3690的端口正常開放了,證明SVN啟動了。 正式使用:
首先我們得建立一個 SVN的項目,一般人都認為建立項目就隻需要一個檔案,在我第一次使用SVN之前都有這樣的看法,SVN建立項目需要建立檔案夾
3.3 建立項目
指令:svnadmin create project_name
例如:[[email protected] subversion-1.3.2]# svnadmin create /opt/svnroot/ahinms,run as root.
project_name 為你的project名字,可以任意取。
建立完畢後,project_name是一個文 件夾,進 入檔案夾,可以看到一個conf的檔案夾。進入檔案夾可以看到2個檔案(如果沒有passwd檔案,可以用vi建立),編輯 svnserve.conf 把anon-access = read ,auth_access = write,還有password-db = passwd 的注釋去掉,還有[general]的注釋也要去掉。
vi passwd檔案,如果是新檔案,則輸入:
[user]
your_name = your_password
這裡設定的your_name是你的使用者 名,your_password是你的密碼,這個是通路SVN必要的通行證。
3.4 權限設定
建立svn組
[[email protected] ~]# groupadd svn
[[email protected] ~]# usermod -G svn liuy,(将使用者liuy添加到組svn)
設定svn倉庫權限
[[email protected] svnroot]# cd /opt/svnroot/
[[email protected] svnroot]# chgrp svn ahinms
[[email protected] svnroot]# chown -R liuy:svn ahinms
[[email protected] svnroot]# chmod -R g+rwx ahinms
3.5 linux用戶端登陸
checkout
cd /home/liuy/ahinms
svn checkout svn://134.65.135.4/opt/svnroot/ahinms
add
mv ../ahinms_/adapters .
svn add adapters
svn commit adapters/ -m "adapters" --force-log
3.6 Windows用戶端指令
安 裝svn用戶端軟體TortoiseSVN-1.5.2.13595-win32-svn-1.5.1.msi。安裝完成後,右鍵check out
//-------------------------------------------------------------------------------------------------------------------------//
// Window SVN Configure
//-------------------------------------------------------------------------------------------------------------------------//
4 Windows下安裝
4.1 伺服器和用戶端安裝
伺服器安裝,直接運作 svn-1.4.0-setup.exe ,根據提示安裝即可,這樣我們就有了一套伺服器可以運作的環境。
安裝TortoiseSVN,同樣直接運作 TortoiseSVN-1.4.0.7501-win32-svn-1.4.0.msi 按 照提示安裝即可,不過最後完成後會提示是否重新開機,其實重新開機隻是使svn工作拷貝在windows中的特殊樣式生效,與所有的實際功能無關,這裡為了立刻看 到好的效果,還是重新啟動機器。若是不習慣英文還可以選擇安裝用戶端語言漢化包“LanguagePack-1.4.5.10425-win32- zh_CN.exe”(也需下載下傳),安裝後預設還是英文,需要在用戶端工具中設定一下。
此外,在編譯器中也可以使用SVN插件來代替客 戶端工 具,使開發起來更加友善。詳細介紹請見 Eclipse 中SVN版本控制插件的安裝和使用
4.2 建立版本庫(Repository)
運作 Subversion伺服器需要首先要建立一個版本庫(Repository),可以看作伺服器上存放資料的資料庫,在安裝了 Subversion伺服器之後,可以直接運作,如: svnadmin create E:/svndemo/repository
就 會在目錄E:/svndemo/repository下建立一個版本庫。
我們也可以使用TortoiseSVN圖形化的完成這一步:
在 目錄E:/svndemo/repository下"右鍵 ->TortoiseSVN->Create Repository here...“, 然後可以選擇版本庫模式, 這裡使用預設即可, 然後就建立了一系列目錄和檔案。
4.3 配置使用者和權限
svn 的權限管理涉及到一下檔案:
passwd檔案 -- /conf目錄下 用于存放本svn庫的使用者名和密碼,用 = 分割,左邊是使用者名,右邊是密碼(明文)。
authz -- /conf目錄下 用于存放本svn庫的通路授權資訊。
svnserve.conf -- /conf目錄下 用于存放本svn庫的全局通路控制資訊。
來到E:/svndemo /repository /conf目錄,修改svnserve.conf:
# [general]
# password-db = passwd
改 為:
[general]
password-db = passwd 然後修改同目錄的passwd檔案(設定使用者密碼),去掉下面三行的注釋再加兩個使用者:
# [users]
# harry = harryssecret
# sally = sallyssecret
最後變成:
[users]
harry = harryssecret
sally = sallyssecret
svnadmin = admin
zgz = zgz0809
最後修改同目錄的authz檔案,它定義了兩部 分的内容:
1, 對組成員的定義,
2, 對目錄的授權定義,
可 以針對一個單一使用者授權,也可以針對在[groups]裡面定義的一個組授權,還可以用*通配符來對所有的使用者授權,
授權的選項有:隻讀通路 ('r'),讀寫通路('rw'),或者無權防問('').
authz檔案中可以對任意多個目錄進行權限控制,一下是一個例子:
[groups]
harry_and_sally = harry,sally
# 設定權限組
[/]
svnadmin = rw
[/truck]
zgz = rw
harry = rw
sally = r
* = r
[/sanguo]
zgz = rw
harry = r
sally = rw
* = r
[/ts]
@harry_and_sally = rw
# 以@為鍵值意味着對前面定義的組進行授權
* = r
# [repository:/baz/fuz]
# @harry_and_sally = rw
# * = r
用 戶svnadmin權限最大,他可以進行根目錄(注意:是伺服器目錄svn://localhost/,下邊會介紹的)下所有檔案(包括子目錄下的檔案) 的讀寫操作,而/truck,/sanguo,/ts是在伺服器的根目錄下建立的三個子目錄。
使用者zgz 和harry對 /truck具有讀寫權限,sally 隻有讀的權限。
使用者zgz 和sally對 /sanguo具有讀寫權限,harry 隻有讀的權限。
用 戶harry 和sally對 /ts具有讀寫權限,zgz隻有讀的權限。(* = r 表示所有使用者都具有讀的權限,當然zgz也就自然具有了。注意這裡 @harry_and_sally = rw 表示給harry_and_sally組所有使用者授權,該組在上邊[groups]标簽中已定義)
注意:如果使用者對一個目錄具有某種權 限,那麼他對其子目錄也有同樣的權限(例 如:svnadmin),是以在授權時要特别注意,盡量隻付給滿足使用者需要的最小的權限。
4.4 運作獨立伺服器
在任意目錄下運作:
svnserve -d -r E:/svndemo/repository 我們的伺服器程式就已經啟動了。注意不要關閉指令 行視窗,關閉視窗也會把svnserve停止。為了友善,可以把svnserve作為服務,在2000下控制台視窗可以運作,建立服務指令:
sc.exe create SVNService binpath= "D:/Subversion/bin/svnserve.exe --service -r E:/svndemo/repository" depend= tcpip
如果加錯了可以用:sc delete "SVNService" 指令删除服務。
加好後可以在 控制台的服務選項中找到它,把它啟動類型設為手動,然後啟動一下看看有沒有問題。
注意:
1."D:/Subversion" 是SVN伺服器端的安裝路徑,"E:/svndemo/repository"是 版本庫的路徑,視具體情況而定。
2. 等号前無空格後有空格。
3. 應使用參數“--service”而不是“-d”,參數前面的橫線不是一個是兩個。
4. binpath内套的路徑如果包含空格,也需要使用雙引号,此時需要使用轉義符表示内部的引号(/")。
5.使用 “SVNService.exe”将SVN作為Window服務運作(Subversion1.4之前版本也可使用)
SVNService.exe -install -d -r E:/svndemo/repository
4.5 初始化導入
來到我們想 要導入的項目根目錄,在這個例子裡是E:/svndemo/wc1,目錄下有一個readme.txt檔案:
右鍵 ->TortoiseSVN->Import...
URL of repository輸入“svn://localhost/” ,如果服務安裝在其他機器則将localhost改換為目标機器的IP位址“svn://10.8.6.87/”。
ok
完成之後目錄 沒 有任何變化,如果沒有報錯,資料就已經全部導入到了我們剛才定義的版本庫中。
需要注意的是,這一步操作可以完全在另一台安裝了 TortoiseSVN的主機上進行。例如運作svnserve的主機的IP是 10.8.6.87,則URL部分輸入的内容就是“svn://10.8.6.87/”,一般為了便于管理不會導入到服務的根目錄下,而是導入到工程的子 目錄,如/truck,/sanguo,/ts。導入的URL就添svn://localhost/truck。
4.6 基本用戶端操作
取出版本庫到一個工作拷貝:
來到任意空目錄下,在本例中是 E:/svndemo/wc1,運作右鍵 ->Checkout,在URL of repository中輸入svn://localhost/,這樣我們就得到了一份工作拷貝。
在 工作拷貝中作出修改并送出:
打 開readme.txt,作出修改,然後右鍵->Commit...,這樣我們就把修改送出到了版本庫,我們可以運作。
察看所作 的修改:
readme.txt上右鍵 ->TortoiseSVN->Show Log,這樣我們就可以看到我們對這個檔案所有的送出。在版本1上右鍵->Compare with working copy,我們可以比較工作拷貝的檔案和版本1的差別。功能挺強大,具體使用不做詳解。
相關資源
Subversion http://subversion.tigris.org/
TortoiseSVN http://tortoisesvn.net/downloads http://tortoisesvn.tigris.org/
Svn1ClickSetup http://svn1clicksetup.tigris.org/
Subclipse http://subclipse.tigris.org/
Subversion 中文站 http://www.subversion.org.cn/
----------------------------------------------------------- 分 割 線 ---------------------------------------------------------------
(Reference: http://blog.csdn.net/wyqlxy/archive/2009/12/28/5090667.aspx)
一、基本概念
1、什麼是版本控制
2、什麼是 Subversion
3、版本庫(repository)
二、安裝
1、準備工作
2、安裝伺服器端和用戶端
3、建立版本庫(Repository)
4、運作獨立伺服器
三、基本配置
1、配置使用者和權限
2、初始化導入
四、基本操作流程
1、取出(check out)
2、存入(check in)/送出(commit)
------------------------------------------------------------------ 分 割 線 ---------------------------------------------------------------
一、基本概念
1、什麼是版本控制
簡單點來說,版本控制就是資料倉庫,它可以記錄 你對檔案的每次更改。這樣,就算你在昏天黑地的改了
幾個月後老闆說不要了,還是按照過去那樣,你也不會抓狂,簡單的恢複版本操作就搞定一切。
2、什麼是 Subversion
Subversion是一個自由/開源版本控制 系統,它管理檔案和目錄可以超越時間。一組檔案存放在中心版本庫
,這個版本庫很像一個普通的檔案伺服器,隻是它可以記錄每一次檔案和目錄的修改,這便使你可以取 得
資料 以前的版本,進而可以檢查所作的更改。從這個方面看,許多人把版本控制系統當作一種“時間機器”。
Subversion可以通過網絡通路它的版本 庫,進而使使用者可以在不同的電腦上使用。一定程度上可以說,允許
使用者在各自的地方修改同一份資料是促進協作。進展可能非常的迅速,并沒有一個所有的改變都會取得 效
果的 通道,由于所有的工作都有曆史版本,你不必擔心由于失去某個通道而影響品質,如果存在不正确的
改變,隻要取消改變。
一些版本控制系統也是軟體配置管理(SCM)系 統,這種系統經過特定的精巧設計來管理源代碼,有許多關于
軟體開發的特性—本身了解程式設計語言、或者提供建構程式的工具。然而,Subversion不是這 樣一個系統,它
是 一個通用系統,可以管理任何類型的檔案集,對你這可能是源代碼,對别人,可能是一個貨物報價單或
者是書稿,或者是電影剪輯等。
3、版本庫(repository)
Subversion 的核心就是 repository ,中文翻譯成“版本庫”。就是位于伺服器端,統一管理和儲存資料的地
方。
二、安裝
Subversion的設計包括一個抽象的網絡 層,這意味着版本庫可以通過各種伺服器程序通路。理論上講,
Subversion可以使用無限數量的網絡協定實作,目前實踐中存在着兩種伺服器。
• SVNServer:svnserve 是一個小的(也叫輕型的)、獨立伺服器,使用自己定義的協定和用戶端。(作者注
:以下稱這種伺服器為“svnserver伺服器”。)
• ApacheSVN:Apache是最流行的web伺服器,通過使用 mod_dav_svn 子產品,Apache可以通路版本庫,
并且可以使用戶端使用HTTP的擴充協定 WebDAV/DeltaV進行通路。(作者注:以下稱這種伺服器為
“ApacheSVN伺服器”。)
下面介紹 SVNServer 伺服器的安裝,ApacheSVN 伺服器的安裝使用請看我寫的《Subversion進階應用:
SVN的多種認證方式》。
環境
OS:Windows XP SP2
Web:Apache 2.2.6
SVN:svn-win32-1.4.6
準備工作。
(1)擷取 Subversion 伺服器程式。
到 官方網站( http://subversion.tigris.org/ ) 下載下傳最新的伺服器安裝程式。目前最新的是1.4.6版本,具體下載下傳
位址在: http://subversion.tigris.org/servlets/ProjectDocumentList ?
folderID=8100&expandFolder=8100&folderID=91 ,注意找 for apache 2.2.x 版本的。
(2)擷取 TortoiseSVN 用戶端程式。
從官方網站 http://tortoisesvn.net/downloads 擷取最新的 TortoiseSVN 。TortoiseSVN 是一個用戶端程
序,用來與 subvers 伺服器端通訊。Subversion 自帶一個用戶端程式 svn.exe ,但 TortoiseSVN 更好操作
,提高效率。
2、安裝伺服器端和用戶端
首先安裝 Apache 2.2.6 ,具體安裝方法大家參考相關資料,或者參看我寫的《Windows下安裝Apache
2.2.x》。
其次安裝 Subversion(以下簡稱SVN)的伺服器端和用戶端。下載下傳下來的伺服器端是個 zip 壓縮包,直接解壓
縮即可,比如我解壓到 E:/subversion 。用戶端安裝檔案是個 exe 可執行檔案,直接運作按提示安裝即可
(這裡提示一下:服務端也可以下載下傳 EXE檔案,按照提示安裝就可以了)
,用戶端安裝完成後提示重新開機。
3、建立版本庫(Repository)
運作Subversion伺服器需要首先要建立 一個版本庫(Repository)。版本庫可以看作是伺服器上集中存放和管
理資料的地方。
開始建立版本庫。首先建立 e:/svn 空檔案夾作為所有版本庫的根目錄。然後,進入指令行并切換到
subversion的bin目錄。輸入如下指令:
svnadmin create E:/svn/repos1
此指令在 E:/svn 下建立一個版本庫 repos1 。repos1 下面會自動生成一些檔案夾和檔案。
我們也可以使用 TortoiseSVN 圖形化的完成這一步:
先 建立空目錄 E:/svn/repos1 ,注意一定是要空的。然後在 repos1 檔案夾上“右鍵->TortoiseSVN-
>Create Repository here...”,然後可以選擇版本庫模式,這裡使用預設的FSFS即可,然後就建立了一系列
檔案夾和檔案,同指令行建立的一樣。
4、運作獨立伺服器
此時 subversion 服務還沒有開始,隻是通過它的指令建立了版本庫。繼續在剛才的指令視窗輸入:
svnserve.exe –daemon
svnserve 将會在端口 3690 等待請求,--daemon(兩個短橫線)選項告訴 svnserve 以守護程序方式運作,
這樣在手動終止之前不會退出。注意不要關閉指令 行視窗,關閉視窗會把 svnserve 停止。
為了驗證svnserve正常工作,使用TortoiseSVN -> Repo-browser 來檢視版本庫。在彈出的 URL 對話框中
輸入:
svn://localhost/svn/repos1
點 OK 按鈕後就可以看見 repos1 版本庫的目錄樹結構了,隻不過這時 repos1 是個空庫。
你也可以使用--root選項設定根位置來限制伺服器的通路目錄,進而增加安全性和節約輸入 svnserve URL的
時間: svnserve.exe --daemon --root drive:/path/to/repository
以前面的測 試作為例,svnserve 将會運作為:
svnserve.exe --daemon --root e:/svn
然後TortoiseSVN中的版本庫浏覽器URL縮減 為:
svn://localhost/repos1
三、基本配置
SVNServer伺服器安裝完成後,必須經過基本配置才能使用。
1、配置使用者和權限
用文本編輯器打開E:/svn/repos1 /conf目錄,修改svnserve.conf:
将:
# password-db = passwd
改為:
password-db = passwd
即去掉前面的 # 注釋符,注意前面不能有空格。
然後修改同目錄的passwd檔案,增加一個帳号:
将: [users]
# harry = harryssecret
# sally = sallyssecret
增加 帳号:
[users]
#harry = harryssecret
#sally = sallyssecret
test = test
2、初始化導入
下面就是将我們的資料(項目)導入到這個版本 庫,以後就由版本庫管理我們的資料。我們的任何改動都會被
版本庫記錄下來,甚至我們自己丢失、改錯資料時版本庫也能幫我們找回資料。
比如,我在 d:/wwwroot 下有個 guestbook 檔案夾,裡面存放的是我編寫的留言簿程式。在此檔案夾上“
右鍵 -> TortoiseSVN -> Import...” ,在彈出對話框的“URL of repository”輸入
“svn://localhost/repos1/guestbook”。在“Import message”輸入“導入整個留言簿”作為注釋。
點 OK 後要求輸入帳号。我們在使用者名和密碼處都輸入 test 。完成後 guestbook 中的内容全部導入到了
svn://localhost/svn/repos1/guestbook 。
我們看到在 e:/svn/repos1 沒有任何變化,連個 guestbook 檔案夾都沒有建立,唯一的變化就是
e:/svn/repos1容量變大了。實際上我們源guestbook中的内容已 經導入 repos1 版本庫了,源 guestbook
檔案夾可以删除了。
需要注意的是,這一步操作可以完全在另一台安裝了 TortoiseSVN 的客戶機上進行。例如運作svnserve的
主機的IP是133.96.121.22,則URL部分輸入的内容就是 “svn://133.96.121.22” 。
四、基本操作流程
1、取出(check out)
取出版本庫到一個工作拷貝:
來到任意空目錄下,比如在f分區建立一個空檔案 夾 f:/work 。“右鍵 -> SVN Checkout”。在“URL of
repository”中輸入 “svn://localhost/svn/repos1/guestbook”,這樣我們就得到了一份 guestbook 中内容的
工作拷貝。
2、存入(check in)/送出(commit)
在工作拷貝中作出修改并送出:
在 guestbook 工作拷貝中随便打開一個檔案,作出修改,然後“右鍵 -> SVN Commit... ”。這樣我們就把
修改送出到了版本庫,版本庫根據情況存儲我們送出的資料。
在修改過的檔案上“右鍵 -> TortoiseSVN -> Show Log” ,可以看到對這個檔案所有的送出。在不同的
revision 條目上“右鍵 -> Compare with working copy”,我們可以比較工作拷貝的檔案和所選 revision 版
本的差別。
------------------以上資訊 轉載自 http://www.svn8.com/svnpz/20090625/6850_2.html ------------------------
還有一些後續的操作看下面:
用Apache架設svn服務
用Apache架設有什麼好處呢?我覺得吧,可以使用http意味着可以使用固定的域名,開發的時候IP發生改變也無所謂,而且apache不會有那個 不 能關掉的視窗,雖然svnserve也可以加到系統的服務裡面.另外apache配置十分靈活,且具有了許多svnserve所沒有的特性,當然靈活也造 成了一定的複雜性。
首先安裝好Apache 2.2.x,這個不用多說,然後把subversion安裝目錄下的bin目錄中的 intl3_svn.dll,libdb44.dll,mod_authz_svn.so,mod_dav_svn.so這幾個檔案複制到apache的 子產品目錄modules下。然後修改apache的配置檔案httpd.conf來使apache加載mod_dav_svn子產品。
将
#LoadModule dav_module modules/mod_dav.so
前面的”#”号去掉,然後在後面添加:
LoadModule dav_svn_module modules/mod_dav_svn.so
注意它一定要加在mod_dav的後面。
現在已經設定好了Apache和Subversion,但是Apache不知道如何處理Subversion的用戶端Tortoisesvn,為了讓 apache知道哪個目錄是用來作為subversion的版本庫,需要在配置檔案httpd.conf後面添加以下代碼:
<Location /repository/>
DAV svn
SVNPath D:/svn/repos1
</Location>
這個配置告訴apache首先要啟動dav_module,然後加載dav_svn_module,版本庫對外的URL是 http://伺服器IP/repository/,Subversion版本庫實體位置在D:/svn/repos1下。配置好重新開機apache,就可 以正常使用了。并且subversion的各種用戶端也可以通過http協定通路版本庫。
如果要指定多個版本庫可以使用多個Location标簽,也可以用SVNParentPath代替SVNPath來指定版本庫 的父級目錄,如D:/svn下有多個版本庫,repos1,repos2等,就可以使用以下代碼:
<Location /repository/>
DAV svn
SVNParentPath D:/svn
</Location>
“SVNParentPath D:/svn”表示D:/svn下的每個子目錄都是一個版本庫,通路可以通過”http://伺服器IP/repository/repos1″ ,”http://伺服器IP/repository/repos2/”等來通路。
現在版本庫對于任何來訪者都是具有完全的權限的我們需要對其進行權限設定,這裡隻介紹基本的http認證。apache提供了一個htpasswd工具 來 管理一個使用者檔案,這個檔案包含使用者名和加密後的密碼,htpasswd在Apache的bin目錄下,具體使用方法如下:
htpasswd -c E:/user/apache/passwd.conf user
其作用是建立passwd.conf檔案,并建立使用者user,輸入指令回車後會要求輸入密碼。
htpasswd [-m] E:/user/apache/passwd.conf Newuser
這個用于添加新使用者,-m表示密碼用MD5加密。
htpasswd [-m] E:/user/apache/passwd.conf user
末尾參數為已有使用者則可以用于修改使用者密碼。
htpasswd -D E:/user/apache/passwd.conf user
删除用 戶,注意參數D要大寫。
然後修改apache的httpd.conf,在Location标簽中加入以下内容:
AuthType Basic
AuthName “KeyPark Studio”
AuthUserFile E:/user/apache/passwd.conf
Require valid-user
AuthType Basic表示啟用基本驗證。
AuthName “KeyPark Studio”表示認證對話框中顯示的伺服器資訊,這裡不要用中文,因為Tortoisesvn不支援中文。
AuthUserFile E:/user/apache/passwd.conf 訓示了E:/user/apache/passwd.conf作為使用者檔案進行驗證。
Require valid-user表示隻有輸入了正确的使用者名密碼才可以通路相關路徑。
驗證就講這些了,在網上還可以找到使用svn的子產品進行更為細緻的通路控制的設定方法,在這裡就不再介紹了。
權限設定:
Subversion的權限控制
1,認 證(Authentication)和授權(Authorization)
這兩個術語經常一起出現。其中認證的意思 就是鑒别使用者的身份,最常見的方式就是使用使用者名和密碼,授權就是判斷使用者是否具備某種操作的權限,在Subversion裡提供了“authz-db” 檔案,實作了以路徑為基礎的授權,也就是判斷使用者是否有操作對應路徑的權限,在Subversion 1.3之後,svnserve和Apache一樣都可以使用“authz-db”檔案。
2. svnserve下的配置檔案
因為本文是以 svnserve為例的,是以先介紹一下版本庫目錄的結構:
D:/SVNROOT/PROJECT1 ├─conf ├─dav ├─db │ ├─revprops │ ├─revs │ └─transactions ├─hooks └─locks |
其中conf下面有三個檔案:
authz passwd svnserve.conf |
其中的“svnserve.conf”是這個版 本庫的配置檔案,當使用svnserve時,這個配置檔案決定了使 用什麼認證和授權檔案:
password-db = passwd authz-db = authz |
上面的配置說明使用“svnserve.conf”同目錄的passwd和 authz,其中的password- db指定了使用者密碼檔案,authz-db是我們的授權檔案,也就是我們本文主要介紹的檔案。
注意:使用Apache作為伺服器時,根本就不 會參考“svnserve.conf”檔案的内容,而是會參考 Apache的配置。
3,基于svnserve的版本庫檔案布局
使用 svnserve時,為了管理的友善,應該使用相同的認證和授權檔案,是以應該讓所有版本庫的配置檔案svnserve.conf指向同一個 password-db和authz-db檔案。下面是一個多版本庫的目錄:
D:/SVNROOT ├─project1 │ ├─conf │ ├─dav │ ├─db │ │ ├─revprops │ │ ├─revs │ │ └─transactions │ ├─hooks │ └─locks └─project2 ├─conf ├─dav ├─db │ ├─revprops │ ├─revs │ └─transactions ├─hooks └─locks |
D:/SVNROOT下有兩個目錄 project1和project2,都已經建立了版本庫,是以我們修改每個 conf目錄下的svnserve.conf,使之指向同一個password-db和authz-db檔案。
password-db = ../../passwd
authz-db = ../../authz這樣,D:/SVNROOT/passwd和D:/SVNROOT/authz就控制了所有版本庫的svnserve通路。另外在 後面的操作中要關閉匿名通路,應該去掉“anon-access = none”前的“#”号,保證隻有認證使用者可以通路。
注意:還有一點需要注意,那就是 svnserve的“realm”的值,在上面的設定下,應該保證所有的版本庫使 用相同的realm值,這樣,對版本庫的密碼緩存可以在多個版本庫之間共享,更多細節見用戶端憑證緩存。
4,測試使用者群組說明
版本庫禁止任何匿名使用者的通路,隻對 認證使用者有效。
root: 配置管理管理者,對版本庫有完全的管理權限。
p1_admin1:project1的管理者,對project1有完全權限。
p1_d1:project1的開發者,對project1的trunk有完全的權限,但是對其中的/trunk/admin目錄沒有任何權限。
p1_t1:project1的測試者,對project1的trunk有完全的讀權限,但是對其中的/trunk/admin目錄沒有任何權限。
p2_admin1:project2的管理 員,對project2有完全權限。
p2_d1:project2的開發者,對project2的trunk有完全的權限,但是對其中的/trunk/admin目錄沒有任何權限。
p2_t1:project2的測試者,對project2的trunk有完全的讀權限,但是對其中的/trunk/admin目錄沒有任何權限。
對應的組及組的使用者:
p1_group_a:p1_admin1 p1_group_d:p1_d1 p1_group_t:p1_t1 p2_group_a:p2_admin1 p2_group_d:p2_d1 p2_group_t:p2_t1 |
5,修改D:/SVNROOT/passwd文 件
前面 已經說過了,使用者和密碼檔案應該是在D:/SVNROOT/passwd,是以我們為每一位使用者設定權限,文 件内容如下:
[users] p1_admin1 = p1_admin1 p1_d1 = p1_d1 p1_t1 = p1_t1 p2_admin1 = p2_admin1 p2_d1 = p2_d1 |
p2_t1 = p2_t1為了便于驗證,所有密碼和使用者名一緻,如果你使用的是其他認證方式,這一步可能不同,但是使用者名應該都是一樣的。
6,配置授權,修改D:/SVNROOT /authz
[groups] # 定義組資訊 p1_group_a = p1_admin1 p1_group_d = p1_d1 p1_group_t = p1_t1 p2_group_a = p2_admin1 p2_group_d = p2_d1 p2_group_t = p2_t1 [/] # 指定所有的版本庫預設隻讀,root可讀寫 * = r root = rw [project1:/] # 指定對版本庫project1根目錄的權限 @p1_group_a = rw @p1_group_d = rw @p1_group_t = r [project1:/trunk/admin] # 指定對版本庫project1的/trunk/admin根目錄的權限, # p1_group_a讀寫,p1_group_d和p1_group_t沒有任何權限。 @p1_group_a = rw @p1_group_d = @p1_group_t = [project2:/] # 指定對版本庫project2根目錄的權限 @p2_group_a = rw @p2_group_d = rw @p2_group_t = r [project2:/trunk/admin] # 指定對版本庫project1的/trunk/admin根目錄的權限 @p2_group_a = rw @p2_group_d = @p2_group_t = |
經過以上設定以後,你會發現一些有趣的事情。當 使用使用者“p1_d1”,檢出project1的trunk時,目 錄是空的,好像admin目錄根本不存在一樣,當使用p1_d1使用者浏覽版本庫時,能夠看到admin目錄,但是其中的内容卻無法看到。
關于中文目錄,也是沒有問題的,隻是注意要把 authz檔案轉化為UTF-8格式,在我的WINXP的 UltraEdit裡顯示的檔案格式為U8-DOS,具體的做法是用UltraEdit打開authz檔案,然後選擇“檔案->轉換 ->ASCII轉UTF-8”,然後儲存。
再複雜的情況也不過如此,在實際的工作中要首先規劃好權限,隻賦給使用者最小的權限,保證以最小的 配置實作最複雜的 權限控制。
Subversion備份
版本控制最關鍵的一 件事是保證資料的安全性,不能因為磁盤損壞,程式故障造成版本庫無可挽回的錯誤,為此必須制定較完備的備份政策。在Subversion中,我們有三種備 份方式:完全備份,增量備份和同步版本庫。
1, 完全備份
最常見和簡單的備份就是直接使用拷貝指令, 将版本庫目錄拷貝到備份目錄上,就可以了。但是這樣不是很安全的方式,因為如果在拷貝時版本庫發生變化,将會造成備份的結果不夠準确,失去備份的作用,為 此Subversion提供了“svnadmin hotcopy”指令,可以防止這種問題。
還記得我們的版本庫目錄嗎?
D:/SVNROOT ├─project1 │ ├─conf │ ├─dav │ ├─db │ │ ├─revprops │ │ ├─revs │ │ └─transactions │ ├─hooks │ └─locks └─project2 ├─conf ├─dav ├─db │ ├─revprops │ ├─revs │ └─transactions ├─hooks └─locks |
如果要把project1備份到 d:/svnrootbak目錄下,隻需要運作:
svnadmin hotcopy d:/svnroot/project1 d:/svnrootbak/project1
但是我們作為配置管理者,必須想辦法優化這個過程,如果我們這個目錄下有許多版本庫,需要為每個 版本庫寫這樣一條 語句備份,為此我寫了下面的腳本,實作備份一個目錄下的所有版本庫。我們在D:/SVNROOT下建立了兩個檔案,simpleBackup.bat:
@echo 正在備份版本庫%1......
@%SVN_HOME%/bin/svnadmin hotcopy %1 %BACKUP_DIRECTORY%/%2
@echo 版本庫%1成功備份到了%2!
這個檔案僅僅是對“svnadmin hotcopy”的包裝,然後是backup.bat:
echo off
rem Subversion的安裝目錄
set SVN_HOME="D:/Subversion"
rem 所有版本庫的父目錄
set SVN_ROOT=D:/svnroot
rem 備份的目錄
set BACKUP_SVN_ROOT=D:/svnrootbak
set BACKUP_DIRECTORY=%BACKUP_SVN_ROOT%/%date:~0,10%
if exist %BACKUP_DIRECTORY% goto checkBack
echo 建立備份目錄%BACKUP_DIRECTORY%>>%SVN_ROOT%/backup.log
mkdir %BACKUP_DIRECTORY%
rem 驗證目錄是否為版本庫,如果是則取出名稱備份
for /r %SVN_ROOT% %%I in (.) do @if exist "%%I/conf/svnserve.conf" %SVN_ROOT%/simpleBackup.bat "%%~fI" %%~nI
goto end
:checkBack
echo 備份目錄%BACKUP_DIRECTORY%已經存在,請清空。
goto end
:end
你在使用的時候,隻需要修改backup.bat開頭的三個路徑,将兩個腳本拷貝到 “SVN_ROOT”下就可以 了。根據以上的配置,你隻需要運作backup.bat,就可以把“SVN_ROOT”下的版本庫都備份到“BACKUP_SVN_ROOT”裡,并且存 放在備份所在日的目錄裡,例如“D:/svnrootbak/2006-10-22”。
雖然這部分工作很簡單,可是必須有人定時地去執 行這個操作(例如每周一淩晨),為了避免發生遺忘的情況,我們可以 将這個操作加入到系統的at任務當中去,例如還是上面的環境,為了安裝at任務,我們運作:
at 1:00 /every:M D:/svnroot/backup.bat這樣在每周一淩晨1:00都會執行這個備份過程。當然備份在本機也是不安全的,你也許需要上傳到别的機器,這 個就要靠你自己去實作了。
2, 增量備份
盡管完全備份非常簡單,但是也是有代價的, 當版本庫非常巨大時,經常進行完全備份是不現實的,也并不必要,但是一旦版本庫在備份之間發生問題,該如何呢,這裡我們就用到了增量備份。
增量備份通常要與完全備份結合使用,就像 oracle資料庫的歸檔日志,記錄着每次Subversion送出的變 化,然後在需要恢複時能夠回到最新的可用狀态。在我們這個例子中我們使用的是,svnadmin dump指令進行增量的備份,使用方法是:
svnadmin dump project1 --revision 15 --incremental > dumpfile2
上面的指令實作了對修訂版本15進行增量的備 份,其中的輸出檔案dumpfile2隻儲存了修訂版本15更改的内 容。
為了記錄每次送出的結果,我們需要使用一項Subversion的特性--鈎子 (hook),看看我們的 project1目錄:
├─project1 │ ├─conf │ ├─dav │ ├─db │ │ ├─revprops │ │ ├─revs │ │ └─transactions │ ├─hooks │ └─locks |
其中的hooks目錄裡存放的就是鈎子腳本,我 們在此處隻使用post-commit鈎子,這個鈎子會在每次送出 之後執行,為了實作我們的備份功能,我們在hooks下建立一個檔案post-commit.bat,内容如下:
echo off set SVN_HOME="C:/Program Files/Subversion" set SVN_ROOT=D:/svnroot set UNIX_SVN_ROOT=D:/svnroot set DELTA_BACKUP_SVN_ROOT=D:/svnrootbak/delta set LOG_FILE=%1/backup.log echo backup revision %2 >> %LOG_FILE% for /r %SVN_ROOT% %%I in (.) do if D:/svnroot/%%~nI == %1 %SVN_ROOT%/%%~nI/hooks/deltaBackup.bat %%~nI %2 goto end :end |
通過這個腳本,可以實作D:/svnroot下 的版本庫送出時自動增量備份到D:/svnrootbak /delta(确定這個目錄存在),其中使用的deltaBackup.bat其實可以放在任何地方,隻是對腳本的svnadmin dump的包裝,内容如下:
@echo 正在備份版本庫%2......
%SVN_HOME%/bin/svnadmin dump %SVN_ROOT%/%1 --incremental --revision %2 >> %DELTA_BACKUP_SVN_ROOT%/%1.dump
@echo 版本庫%2成功備份到了%3!
以上兩個腳本可以直接拷貝到project2的 hooks目錄下,不需要修改就可以實作project2的自動備 份。
以上的操作已經OK了,現在需要做的是将完全備份和增量備份結合起來,也就是在完全 備份後清理增量備份的結果,使 之隻儲存完全備份後的結果。
當果真出現版本庫的故障,就要求我們實作版本庫的恢複操作了,這是用要使用svnadmin load指令,同時也需要上次的完全備份例如要把上次完全備份backuprepo,和之後的增量備份dumpfile:
svnadmin load backuprepo < dumpfile
最後的結果,可以下載下傳svnroot.rar,将之解壓縮到d:/下,然後修改幾個bat檔案的 SVN_HOME 就可以使用了。
3, 版本庫同步
Subversion 1.4增加了同步機制,可以實作一個版本庫同另一個版本庫的同步(但好像隻是單向的),我們可以用來實作版本庫的備份或鏡像。
3.1. 對目标庫初始化
svnsync init svn://localhost/project2 svn://localhost/project1
其中project2是目标的版本 庫,而project1是源版本庫。其中的目标版本庫必須為空,而且必須允許修訂版本屬性的修改,也就是在目标的版本庫的hooks目錄裡添加一個檔案 pre-revprop-change.bat,内容為空即可。
3.2. 同步project2到project1
svnsync sync svn://localhost/project2
這時候你update一下你的project2的一個工作拷 貝,就會發現有了project1的所有内容。如果project1又有送出,這時候project2的版本庫無法看到最新的變化,還需要再運作一遍 sync操作,這樣才能将最新的變化同步。需要注意的是,目标版本庫隻能做成隻讀的,如果目标版本庫發生了變更,則無法繼續同步了。
3.3. 同步曆史屬性的修改
因為同步不會更新對曆史屬性 的修改,是以svnsync還有子指令copy-revprops,可以同步某個版本的屬性。
3.4. 鈎子自動同步
希望在每次送出時同步,則需要在源 版本庫增加post-commit腳本,内容如下:
echo off set SVN_HOME="D:/Subversion" %SVN_HOME%/bin/svnsync sync --non-interactive svn://localhost/project2 |
把以上内容存放為post- commit.bat,然後放到版本庫project1下的hooks目錄下,這樣 project1每次送出,都會引起project2的同步。
apache裝完後為什麼顯示no service installed?
安裝完apache之後(不是按照預設路徑安裝的,例如是 D:/ )右下方哪個小羽毛圖示是沒有啟動的,左鍵不好使,而且提示“No services installed”,提示伺服器沒有被安裝。
解決方 法: 找到 apache2 目錄下的 bin 目錄 有個apache.exe 檔案,在運作中鍵入:cmd ,出來DOS視窗
鍵入: d:/ 注釋:進入D盤,假如apache安裝在D盤
鍵入: cd apache2 注釋:進入D:/apache2/目錄
鍵入: cd bin 注釋:進入D:/apache2/bin/ 目錄
鍵入: httpd.exe -k install -n apache2 注釋:添加了apache2這個服務了,下面我們要啟動它
鍵入: net start apache2 注釋:啟動apache2服務 關閉伺服器是: net stop apache2
OK,問題解決.
-----------------------------轉載自: http://hi.baidu.com/mops/blog/item/a0c07efb3811aa62024f56b5.html ---
4:VS2008中使用用ANKHSVN插件
插件安裝很簡單,在經過以上步驟後,并且确認你已經在vs中安裝好了ankhsvn插件,那麼恭喜你,你已經可以在VS中使用svn的強大代碼管理功能 了。首先打開Visual Studio,點選 File(檔案)你将會看到多出了Subversion選項,點選Open from subversion…URL中輸入http://伺服器IP/repository/repos1,然後會提示輸入http認證的使用者名和密碼,輸入确 定後就可以看到已經建立好的項目了選中要打開的項目.sln檔案打開,然後需要制定一個本地存放路徑,設定好後點選OK,就可以看到程式從伺服器傳到了本 地。