Subversion是近期在開源社區(qū)中非常流行的一款版本控制軟件,它是CVS的替代產(chǎn)物。 · CVS大部分的功能。 · 支持“目錄”級別的版本管理,并且解決了CVS中遲遲未能解決的文件重命名和移動等問題。甚至對文件或文件夾的屬性都提供了版本管理。 · “提交(commit)”實現(xiàn)了真正意義上的原子操作。也就是類似數(shù)據(jù)庫中的事務(wù)的功能。 · 版本號依據(jù)每次提交而改變,不再針對每個文件。日志信息也是針對每次提交而設(shè)置。所以看到版本號是幾百或者幾千也不用太驚訝,表示方式不一樣罷了。 · 通過WebDAV/DeltaV協(xié)議,可以與Apache的網(wǎng)絡(luò)服務(wù)無縫銜接(通過Apache來運行)。這樣就能提供一些額外的功能,例如:認證,壓縮傳輸,以及數(shù)據(jù)倉庫(Repository,見下)的瀏覽等。 · 也可以作為獨立服務(wù)器運行,但這樣的話提供的功能較為簡單薄弱。 · 兩種運行模式都支持SSH(當(dāng)然需要各自的支持和配置) · 降低了分支(Branch)和標簽(tag)上的時間消耗。底層設(shè)計理念和實現(xiàn)上的不同,不細說了。 · 時間消耗依據(jù)的是文件改變部分的大小,而不是數(shù)據(jù)總量。 · 創(chuàng)建數(shù)據(jù)倉庫時,用戶可以指定是使用內(nèi)嵌的 BerkeleyDB 數(shù)據(jù)庫,還是特定格式的文件系統(tǒng)。 其他還有些零星的小功能,具體可以參閱:http://subversion.tigris.org/roadmap.html 這里解釋一下數(shù)據(jù)倉庫的概念: ※下載※ Subversion 1.2.3: TortoiseSVN: Apache 2.0.55: ※安裝使用※ 下面說一下安裝,分兩種平臺(windows,linux)及兩種模式(與Apache綁定 vs. Stand-alone) 另外,SVN是支持SSL的,但是這個配置牽涉到其他太多東西,本文就不過多涉及了。真的有需要可以參考SVN的手冊(英文)。 方便起見,用幾個變量代表具體的值,請自行加以調(diào)整: %SystemRoot% — windows的系統(tǒng)所在目錄,一般類似這樣:C:"WINNT 另外,安裝過程默認使用文件系統(tǒng)做后臺數(shù)據(jù)庫,文中不再加以說明。如需使用BerkeleyDB,請自行參考SVN文檔。 Windows上的服務(wù)器端安裝 1.雙擊下載得來的”svn-1.2.3-setup.exe”并安裝到”%SVN_HOME%” 2.安裝完畢后,”%SVN_HOME%"bin”應(yīng)該已經(jīng)自動加入到系統(tǒng)路徑(%PATH%)中。如果沒有,請手工添加。 3.用命令行來測試安裝結(jié)果是否正確: 1.cmd 2.svnadmin 如果返回這樣的錯誤信息:”svnadmin.exe - Unable To Locate DLL”,那就需要嘗試一下步驟的中的一種或幾種: 4.使用以下命令創(chuàng)建一個數(shù)據(jù)倉庫,用來存放項目的源代碼和其他文件: 1.cmd 2.svnadmin create %SVN_REPO_PARENT%"%PROJECT_NAME% 5.其中%SVN_REPO_PARENT%是包含所有數(shù)據(jù)倉庫的目錄,%PROJECT_NAME%是所創(chuàng)建的數(shù)據(jù)倉庫對應(yīng)的項目名。
6.從命令行啟動SVN Server: 1.cmd 2.svnserve -d -r %SVN_REPO_PARENT% 注意里面的參數(shù) r 限定了瀏覽全部數(shù)據(jù)倉庫的根目錄 當(dāng)然如果覺得每次這樣啟動太麻煩的話,也有SVN Serveice的包裝程序(http://dark.clansoft.dk/~mbn/svnservice/)。通過它能夠以windows service的方式運行SVN Server(其本質(zhì)還是Stand-alone),運行起來相對比較方便。 7.創(chuàng)建用戶數(shù)據(jù)庫(其實就是一個txt文本,就叫它”users.conf”吧,你也可以改名),保存到 1.[users] 2.your_username = your_password 注意這里密碼是明文存放的,所以也是這種方式的不足之處。 8.在”%SVN_REPO_PARENT%"%PROJECT_NAME%"conf”目錄下找到這個”svnserve.conf”文件,用任何文本編輯器打開,為剛才創(chuàng)建的那些用戶添加讀寫權(quán)限: 1.[general] 2.anon-access = none # 匿名訪問權(quán)限 3.auth-access = write # 認證用戶的權(quán)限 4.password-db = users.conf # 認證用戶數(shù)據(jù)庫 5.realm = Anything you want, but generally we use "%PROJECT_NAME%" # 在用戶認證界面上出現(xiàn)的提示語句 里面的”users.conf”就是剛才在第7步創(chuàng)建的用戶文件。 9.最后,重啟SVN Server(什么?你不知道怎么重啟?關(guān)掉窗口再重新用命令行啟動啦;包裝成Service的話么就更加簡單了) 現(xiàn)在已經(jīng)可以使用客戶端來連接SVN Server,進行import等操作了。 1.svn://%SERVER_NAME_OR_IP%/%PROJECT_NAME% 具體步驟,請參閱第20步。
10.首先要了解的是SVN設(shè)計的時候只考慮了兼容Apache2.x,所以在Apache1.x下是不能正常工作的。 11.安裝Apache2 12.檢查Apache2的安裝是否成功 13.打開Apache的配置文件: “%APACHE_HOME%"conf"httpd.conf” 1.# LoadModule dav_module modules/mod_dav.so 完成之后看起來應(yīng)該是這樣: 1.LoadModule dav_module modules/mod_dav.so 另外在這行下面再添加兩行(請注意把路徑中的”"”替換成”/”): 1.LoadModule dav_svn_module %SVN_HOME%/bin/mod_dav_svn.so 2.LoadModule authz_svn_module %SVN_HOME%/bin/mod_authz_svn.so 特別需要注意的是:由于模塊依賴關(guān)系,這三行的出現(xiàn)順序千萬不能顛倒。 14.再來配置一下”httpd.conf”的其他部分,告訴Apache2 SVN的數(shù)據(jù)倉庫所在。 · 按照下述配置,所有數(shù)據(jù)倉庫將共享密碼文件及權(quán)限文件 · 如果需要為每個數(shù)據(jù)倉庫創(chuàng)建獨立的設(shè)置,請查閱SVN的文檔(”Authorization Option”章節(jié)) 添加下述內(nèi)容: 1.<Location /svn> 2. 3. DAV svn 4. SVNParentPath %SVN_REPO_PARENT% 6. #設(shè)置通過瀏覽器訪問Repository時的XML格式文件,可以省略 7. SVNIndexXSLT "/svnindex.xsl" 8. 9. # 存取權(quán)限控制文件所在地 10. AuthzSVNAccessFile %SVN_REPO_PARENT%/AccessFile 11. 12. # 先嘗試匿名操作,如有必要再轉(zhuǎn)向用戶認證 13. Satisfy Any 14. Require valid-user 15. 16. # 如何驗證用戶 17. AuthType Basic 18. AuthName "Anything you want, but generally we use %PROJECT_NAME%" 19. AuthUserFile %SVN_REPO_PARENT%/passwd 20. 21. #輸出時調(diào)用Apache的Deflate模塊,必須有啟用此模塊才能這樣配,否則刪除此行 22. SetOutputFilter DEFLATE 23. 24.</Location> 這里涉及到兩個文件: “%SVN_REPO_PARENT%/AccessFile” 及 “%SVN_REPO_PARENT%/passwd”. 15.保存”httpd.conf”并退出,這里Apache2的配置告一段落。 16.”%SVN_REPO_PARENT%/AccessFile”文件的內(nèi)容 1.[/] 2.* = r 3.user1 = rw 4.user2 = r 5.admin = rw 6. 7.[%PROJECT_NAME%:/src/test] 8.user2 = rw 其中: · [/] 指代所有數(shù)據(jù)倉庫的根目錄,匿名用戶默認的權(quán)限為只讀。 · 對于”user1″和”admin”,他們對所有數(shù)據(jù)倉庫都有讀寫權(quán)限。 · 對于”user2″,它對所有數(shù)據(jù)倉庫僅有只讀權(quán)限。但是下方又額外指定了他對”%PROJECT_NAME%:/src/test”目錄具有讀寫權(quán)限。 · 綜上,他對’test’目錄及其子目錄(自動繼承,除非特別指定)具有讀寫權(quán)限,其他則均為只讀權(quán)限。 你可以根據(jù)需要來設(shè)定不同的權(quán)限,更詳細的說明還需要參考SVN文檔中的權(quán)限設(shè)置章節(jié)。 17.”%SVN_REPO_PARENT%/passwd”文件的內(nèi)容 1.cmd 2.cd /D %APACHE_HOME%"bin 3.# 參數(shù)c僅在第一次運行時使用,用來創(chuàng)建一個新文件 4.htpasswd –cm %SVN_REPO_PARENT%"passwd user1 5.# 以后添加用戶可用此命令,參數(shù)m表明需要加密 6.htpasswd –m %SVN_REPO_PARENT%"passwd user2 此時用文本編輯器打開”%SVN_REPO_PARENT%/passwd”,可以看到里面內(nèi)容是類似這樣的: 1.admin:$apr1$HLWV7/..$upZwVGvge0sc28fEp7mGM0 2.user1:$apr1$8sbRo...$hNMdkTvO4t8POVmOkV3Vg. 3.user2:$apr1$ZXzcE/..$5Ir0V8VQQtNYTNnnOp.EU1 18.把SVN自帶的XSLT文件拷貝到網(wǎng)站根目錄, 1.#這里假設(shè)你的網(wǎng)站根目錄是 /var/www/html 2.mv /tmp/subversion-1.2.3/tools/xslt/svnindex* /var/www/html 3.chown apache:apache /var/www/html/svnindex* 4.chmod 644 /var/www/html/svnindex* 5. 6.#設(shè)置所有者和權(quán)限(將權(quán)限賦給apache運行的用戶身份) 7.chown -R apache:apache %SVN_REPO_PARENT% 8.chmod -R 766 %SVN_REPO_PARENT% 19. 重啟Apache2服務(wù): 1.cmd 2.net stop Apache2 3.net start Apache2 20.打開瀏覽器,訪問:http://%SERVER_NAME_OR_IP%/svn/
21.和CVS一樣,SVN在最初的時候需要將已有項目導(dǎo)入到數(shù)據(jù)庫中。 1.svn import c:"temp"myproject svn://%SERVER_NAME_OR_IP%/%PROJECT_NAME% -m "initial import" --username your_username --password your_password 或者(Apache2 module): 1.svn import c:"temp"myprojecthttp://%SERVER_NAME_OR_IP%/svn/%PROJECT_NAME%-m "initial import" --username your_username --password your_password 其中: 22.然后,需要從Server端再次checkout到本地: 1.cmd 2.cd /D anywhere_you_want_to_put_your_versioned_project_files 3.svn co svn://myserver/myproject/trunk . --username your_username --password your_password 注意: 23.對于向SVN Serer增加,移動,刪除,或者修改后提交某些文件,參考使用以下命令: 1.Add: svn add src/myfile.java -m "adding a file" 2.Move: svn move src/myfile.java src/mynewfile.java -m "moved myfile.java to mynewfile.java" 3.Delete: svn delete src/myfile.java -m "removing a file" 4.Commit: svn commit src/myfile.java -m "the message" 對于上面的客戶端操作,如果安裝了TortoiseSVN,一切就變得簡單多了。 ※總結(jié)※ 使用Eclipse的朋友還可以參考這里:http://subclipse.tigris.org/ 另外,具體的設(shè)置,參數(shù)說明等還是需要自己去查閱SVN的文檔(在安裝server端的時候已經(jīng)附帶) |