神秘的 J2ee 殿堂

          ·古之學(xué)者必有師·做學(xué)者亦要做師者·FIGHTING·

          Subversion(SVN)版本控制安裝使用指南

           

          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)和標(biāo)簽(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ù)倉庫的概念:
          一個數(shù)據(jù)倉庫對應(yīng)的可以是一個項目,也可以是多個項目。SVN是基于數(shù)據(jù)倉庫進行管理的。
          按照用戶習(xí)慣,可以只在每個數(shù)據(jù)倉庫內(nèi)僅放置一個項目的內(nèi)容。

          下載

          Subversion 1.2.3:
          http://subversion.tigris.org/project_packages.html
          SVNServer端,分不同操作系統(tǒng)的版本,這里我下載的是for windowsfor linux的)

          TortoiseSVN:
          http://tortoisesvn.tigris.org/download.html
          windows下的SVN客戶端,以shell方式集成在系統(tǒng)右鍵菜單中)

          Apache 2.0.55:
          http://httpd.apache.org/download.cgi
          (視操作系統(tǒng)而下)

          安裝使用

          下面說一下安裝,分兩種平臺(windowslinux)及兩種模式(與Apache綁定 vs. Stand-alone
          具體在Apache上的配置倒是大同小異。

          另外,SVN是支持SSL的,但是這個配置牽涉到其他太多東西,本文就不過多涉及了。真的有需要可以參考SVN的手冊(英文)。

          方便起見,用幾個變量代表具體的值,請自行加以調(diào)整:

          %SystemRoot% — windows的系統(tǒng)所在目錄,一般類似這樣:C:"WINNT
          %SVN_HOME% — SVN的安裝目錄
          %SVN_REPO_PARENT% — SVN所有數(shù)據(jù)倉庫的根目錄(就是存放全部版本文件的總目錄)
          %PROJECT_NAME%項目名,嚴格的來說它對應(yīng)的是一個數(shù)據(jù)倉庫,但是這里遵從用戶習(xí)慣,以項目名稱方式來命名。
          %SERVER_NAME_OR_IP%服務(wù)器名或IP地址
          %APACHE_HOME% — Apache2的安裝路徑

          另外,安裝過程默認使用文件系統(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”,那就需要嘗試一下步驟的中的一種或幾種:
          安裝VC++ 6.0(主要是安裝VC的運行庫)
          或者直接從別的機器上拷貝一個”msvcp60.dll”文件到本機的”%SystemRoot%"system32″

          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)的項目名。


          *************************
          *
          Stand-alone 模式運行 *
          *************************

          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”吧,你也可以改名),保存到
          %SVN_REPO_PARENT%"%PROJECT_NAME%"conf
          目錄(那個conf子文件夾在創(chuàng)建數(shù)據(jù)倉庫時已被自動創(chuàng)建好),然后在這個文件內(nèi)添加需要的用戶名和密碼。基本的樣例如下:

          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等操作了。
          連接ServerURL應(yīng)該是類似這樣的:

          1.svn://%SERVER_NAME_OR_IP%/%PROJECT_NAME%

          具體步驟,請參閱第20步。


          ************************
          *
          Apache的模塊方式運行 *
          ************************

          10.首先要了解的是SVN設(shè)計的時候只考慮了兼容Apache2.x,所以在Apache1.x下是不能正常工作的。

          11.安裝Apache2
          如果事先啟動了IIS之類的其他webserver,請先停止那些服務(wù)(端口被占用會導(dǎo)致Apache安裝失敗)。
          其他問題可以參考Apache的安裝手冊。
          這里假設(shè)安裝目錄為:%APACHE_HOME%

          12.檢查Apache2的安裝是否成功
          打開瀏覽器,訪問: http://localhost/
          如果出現(xiàn)的是默認的歡迎頁面,那就沒有問題了。否則請仔細檢查,重新安裝。

          13.打開Apache的配置文件: “%APACHE_HOME%"conf"httpd.conf”
          查找”LoadModule”這個關(guān)鍵字,找到導(dǎo)入模塊的區(qū)塊(section
          反注釋掉下面這樣,從而加載Subversion所需要的DAV模塊:

          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ù)倉庫所在。
          (為避免不必要的麻煩,所有路徑中的”"”都請?zhí)鎿Q成”/”
          注意:

          ·    按照下述配置,所有數(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%

          5. 

          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)用ApacheDeflate模塊,必須有啟用此模塊才能這樣配,否則刪除此行

          22.    SetOutputFilter DEFLATE

          23. 

          24.</Location>

          這里涉及到兩個文件: “%SVN_REPO_PARENT%/AccessFile” “%SVN_REPO_PARENT%/passwd”.
          并不一定非要放到”%SVN_REPO_PARENT%”目錄下,我圖方便而已。覺得不安全可以移到另外地方。
          這兩個文件里面具體內(nèi)容的設(shè)置請參考第1617步。

          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)容
          這個文件是通過”%APACHE_HOME%"bin"htpasswd.exe”自動生成的:

          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)站根目錄,
          然后設(shè)置合理權(quán)限(windows平臺則不必考慮)

          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/
          如果返回的頁面是”403 Forbidden”,可能是由于Apache2默認沒有打開目錄的瀏覽權(quán)限(Option Indexes,參閱Apache2文檔),但這并不影響使用。
          現(xiàn)在已經(jīng)可以用客戶端導(dǎo)入項目并開始使用了。
          具體步驟,請參閱第20步。


          ***********************************************
          *
          注意:以下步驟/命令需要在裝有SVN客戶端的機器上執(zhí)行 *
          * Windows
          下安裝服務(wù)器端的時候已經(jīng)同時安裝了客戶端 *
          * Linux
          下尚待查證。 *
          ***********************************************

          21.CVS一樣,SVN在最初的時候需要將已有項目導(dǎo)入到數(shù)據(jù)庫中。
          從命令行執(zhí)行以下命令(Stand-alone):

          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"myproject http://%SERVER_NAME_OR_IP%/svn/%PROJECT_NAME% -m "initial import" --username your_username --password your_password

          其中:
          A) c:"temp"myproject
          里面包含了你所要導(dǎo)入的項目文件的內(nèi)容
          B) %SERVER_NAME_OR_IP%
          SVN Server的名字或者IP地址,上面存有第5步中創(chuàng)建的數(shù)據(jù)倉庫
          C) %PROJECT_NAME%
          是要導(dǎo)入到的數(shù)據(jù)倉庫名稱,這里選擇跟項目名一致
          D)
          參數(shù) m 表明此次導(dǎo)入操作的注釋,SVN的注釋是按每次提交來定義的,導(dǎo)入也是提交的一種。
          E) your_username
          your_password是第717步創(chuàng)建的用戶及密碼,注意該用戶必須對上面的%PROJECT_NAME%數(shù)據(jù)倉庫有寫權(quán)限才能成功。

          22.然后,需要從Server端再次checkout到本地:
          (這點感覺不是太方便,為啥不做成import的時候有個選項,本地目錄可以自動生成版本信息呢?)

          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

          注意:
          “co”
          ”checkout”的一個別名
          那個點[.]代表當(dāng)前目錄,checkout出來的文件會自動放到這個目錄下。也可以改為某個絕對路徑。

          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/
          它以插件的形式向Eclipse提供了SVN的支持。

          另外,具體的設(shè)置,參數(shù)說明等還是需要自己去查閱SVN的文檔(在安裝server端的時候已經(jīng)附帶)

          參考文獻及資料:
          _________________________________________

          http://subversion.tigris.org/
          http://www-128.ibm.com/developerworks/cn/opensource/os-subversion/
          http://www.javayou.com/showlog.jspe?log_id=972

          轉(zhuǎn)自:http://hi.baidu.com/injava/blog/item/125ab9512ac1098e8c5430a6.html

          posted on 2007-09-17 15:49 月芽兒 閱讀(516) 評論(0)  編輯  收藏 所屬分類: J2EE學(xué)習(xí)摘錄

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿(2)

          隨筆分類

          隨筆檔案

          相冊

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 玛曲县| 英德市| 周口市| 瑞丽市| 湘潭市| 长丰县| 新竹县| 延寿县| 阜南县| 孝义市| 泽普县| 宁晋县| 澳门| 涡阳县| 新河县| 蓬溪县| 准格尔旗| 岗巴县| 连城县| 察哈| 天镇县| 灵川县| 兰坪| 清丰县| 涟源市| 石泉县| 彩票| 嫩江县| 通山县| 乐业县| 无棣县| 花垣县| 梅河口市| 蓬溪县| 新兴县| 克山县| 专栏| 灌阳县| 图片| 梁河县| 仪征市|