• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 298  文章 - 377  trackbacks - 0
            <2025年7月>
            293012345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789

            常用鏈接

            留言簿(34)

            隨筆分類

            隨筆檔案

            文章檔案

            相冊

            收藏夾

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            版權(quán)聲明:轉(zhuǎn)載時請以超鏈接形式標(biāo)明文章原始出處和作者信息及本聲明
            http://egeho123.blogbus.com/logs/18119163.html

            Subversion快速指南

            Subversion(簡寫為SVN)作為開源社區(qū)貢獻(xiàn)的新一代版本控制系統(tǒng),已經(jīng)得到越來越廣泛的使用。我用過CVS(Concurent Version System,SVN的前身)和微軟的VSS(Visual SourceSafe),相比之下,SVN具有更強(qiáng)大的功能和更簡單的操作特性。

            網(wǎng)上已有一些文章介紹SVN的安裝和使用,不過我在第一次配置時仍然遇到了幾個問題。這里,我按照自己的思路來進(jìn)行講解,以期對那些初次使用SVN并且對一些問題存在疑問的朋友有所幫助。

            1. SVN簡介

            光說SVN好,那SVN究竟有什么優(yōu)點(diǎn)呢?在SVN的手冊里有著詳細(xì)的說明,下面簡單介紹幾個重要方面:

            1) 基于目錄的版本控制

            傳統(tǒng)的CVS或VSS都是基于單個文件進(jìn)行版本控制的,這實(shí)際上滿足不了實(shí)際需求,因?yàn)樵趯?shí)際應(yīng)用中,我們都希望按照項(xiàng)目或者工程進(jìn)行管理,例如假設(shè)我們想要取出某個歷史時間點(diǎn)的整個項(xiàng)目文件,那么基于文件的版本控制系統(tǒng)就存在弊端,只能單個單個文件的處理。而SVN則能很方便的做到這一點(diǎn),你可以隨意的取出任何一個文件、任何一個目錄的任何一個歷史版本。

            SVN還允許對文件和目錄進(jìn)行增加、刪除以及復(fù)制和重命名等操作,這些都會被記錄到歷史信息中,實(shí)現(xiàn)真正的版本控制功能。

            2) 原子提交

            SVN里的每次操作都是原子的,要么全部成功,要么全部失敗。假設(shè)你要提交多個文件,如果有一個存在沖突,那么其它修改都不會被提交。

            3) 高效的分支(branching)與標(biāo)簽(tagging)功能

            先說標(biāo)簽功能,通俗的講,標(biāo)簽就是某個時間點(diǎn)的快照(snapshot),我們可以在項(xiàng)目進(jìn)行到一些重要的里程碑之時為之建立標(biāo)簽,這樣可以方便以后隨時取出這些歷史版本。我想你會有一個疑問:SVN不是本身就有隨意取出任何一個歷史版本的功能嗎?是的,標(biāo)簽的作用主要是為了給這些特定的歷史版本取一個友好的名字,以方便使用和維護(hù)。

            分支則是用于創(chuàng)建多個并行的工作線,比如,當(dāng)我們的一個項(xiàng)目需要為某個用戶提供一些特殊的功能時,那么就可以為之創(chuàng)建一個分支,這樣能夠保正大部分代碼的共用,也使得整個項(xiàng)目變得容易維護(hù)和管理。

            SVN對于分支和標(biāo)簽的實(shí)現(xiàn)都是一樣的,并且采用了與Unix/Linux硬鏈接(Hard-Link)類似的機(jī)制,即是說,當(dāng)我們創(chuàng)建分支或標(biāo)簽時,SVN并不會立即為之創(chuàng)建一份拷貝,而是創(chuàng)建一個鏈接,只有當(dāng)這些文件以后被修改時才會真正產(chǎn)生一份副本。這種“緩式拷貝”方法是一種常見的優(yōu)化方法,能夠有效的節(jié)約空間。

            那分支和標(biāo)簽又有什么不同呢?不同之處僅僅在于其“約定成俗”的含義,標(biāo)簽意味著你不會再對其進(jìn)行修改,而分支意味著你會對它進(jìn)行開發(fā)。

            4) 多種訪問方式

            SVN提供了一個抽象的網(wǎng)絡(luò)訪問層,可以通過不同的協(xié)議來對其進(jìn)行訪問。首先,SVN提供了自定義的svn協(xié)議訪問方式,通過形如svn://host/repository的URL就能使用。再有,SVN還提供了與Apache Web服務(wù)器相集成的功能,這樣,我們就可以通過http://host/repository的方式來訪問SVN了。

            5) 對二進(jìn)制文件的支持

            CVS雖然對二進(jìn)制文件也有支持,但實(shí)現(xiàn)得并不完善,你或許遇到過文本文件里有中文字符而被認(rèn)為是二進(jìn)制文件的事情,SVN則提供了對二進(jìn)制文件全面的支持,使得非文本文件也能跟文本文件一樣進(jìn)行良好的版本控制。

            6) Windows下與資源管理器集成的客戶端:TortoiseSVN

            SVN本身只提供命令行的操作方式,TortoiseSVN是第三方開發(fā)的圖形化界面,它的出現(xiàn)使Windows下的版本管理變得非常方便。不過,由于是嵌入到資源管理器中,它可能會影響系統(tǒng)的速度——微乎其微,你可以自己評測一下。

            7) 平臺無關(guān)

            SVN秉承了開源軟件的一貫優(yōu)點(diǎn),無論是Windows還是Linux平臺,都可以相互訪問SVN服務(wù)器。

             

            如果你過去是VSS用戶,那么這里還要提一點(diǎn),與VSS相比,SVN還有一個理念不一樣,VSS將版本沖突控制放在操作之前,你要操作某個項(xiàng)目必須先執(zhí)行CheckOut以進(jìn)行鎖定、防止他人同時修改。SVN提供了同樣的Lock功能,但通常情況下,我們只需各自獨(dú)立的進(jìn)行修改而無需鎖定項(xiàng)目,如果有沖突在提交的時候再做處理,也就是說,SVN是將沖突控制放在操作之后、提交之時。也許你會覺得VSS更合理,但實(shí)際情況卻相反,因?yàn)樵谖覀兊膶?shí)際使用中經(jīng)常發(fā)生有人將整個項(xiàng)目CheckOut后忘了CheckIn,或者未選擇Recursive忘了將子目錄中的文件CheckIn,這就讓其他人無法修改,于是不得不人為的通知其本人,非常麻煩。

             

            2. SVN服務(wù)器搭建

            本節(jié)是針對管理員寫的,普通用戶可以跳過本節(jié)。我這里只以Windows上的安裝為例,Linux上可按類似方式進(jìn)行(有些配置參數(shù)會存在差別,具體參考幫助手冊)。

            1) 安裝SVN服務(wù)器

            a. 下載

            SVN的官方網(wǎng)站為http://subversion.tigris.org/,當(dāng)前最新版本為1.4.2。Windows下的二進(jìn)制安裝包分為兩種,一種是以setup結(jié)尾的安裝文件,另一種是普通的壓縮包文件,setup文件會自動注冊一些信息,比如環(huán)境變量以及服務(wù)等,這些都是可以自己手動實(shí)現(xiàn)的。在我寫這篇文章時,官方網(wǎng)站上就只有普通二進(jìn)制文件,估計(jì)setup文件稍晚些時候會出來。特別注意,下載時要詳細(xì)閱讀注意事項(xiàng),看清與之配套的軟件的版本號,避免出現(xiàn)問題。

            我選擇的版本為svn-win32-1.4.2.zip

            b. 安裝

            將svn-win32-1.4.2.zip解壓縮到安裝目錄下,我選擇的是C:/Program Files/Subversion,如果是setup文件,直接運(yùn)行安裝文件即可。對于壓縮包,我們可以將bin路徑添加到系統(tǒng)環(huán)境變量中,以方便操作。可以看到,bin目錄下主要有如下幾個文件:

            svnadmin:倉庫管理工具,包括創(chuàng)建、修復(fù)和備份等操作。
            svnlook:倉庫查看工具,包括信息、日志和鎖定狀態(tài)等內(nèi)容,不會造成倉庫的改動。
            svnserve:svn服務(wù)程序,允許通過svn網(wǎng)絡(luò)協(xié)議來訪問倉庫。
            svn:SVN客戶端,用于訪問倉庫,對項(xiàng)目進(jìn)行版本管理。
            svnversion:客戶端工具,用于查看本地拷貝的修訂信息。
            c. 創(chuàng)建倉庫(Repository)

            SVN是以倉庫為版本控制單位的,一個SVN服務(wù)器可以管理多個倉庫,每個倉庫擁有獨(dú)立的修訂號(REVISION),倉庫中的任何一次更新都會帶來修訂號的遞增。你可以根據(jù)需要選擇建立一個或者多個倉庫,這里,我以創(chuàng)建多個倉庫為例子,假設(shè)我們將倉庫都放到D:/SVN_REPOS目錄下,下面的命令將會在該目錄下創(chuàng)建一個Test倉庫:

            svnadmin create D:/SVN_REPOS/Test
            如果創(chuàng)建成功,D:/SVN_REPOS/下將會多一個Test目錄。
            2) 搭建svnserve訪問方式

            svn和http是兩種并列的訪問方式,你可以選擇其中一種,也可以都采用。

            a. 注冊服務(wù)

            為了讓SVN服務(wù)程序每次開機(jī)后自動運(yùn)行,我們需要將其注冊為服務(wù)。在控制臺中執(zhí)行如下命令:

            sc create svnservice binPath= "\"C:\Program Files\Subversion\bin\svnserve.exe\" --service -r D:/SVN_REPOS" start= auto
            注意,上述命令均在一行中。sc.exe是Windows 2000以后系統(tǒng)自帶的一個工具,2000下沒有,可以從XP上拷過來。svnservice為服務(wù)名稱,后面的參數(shù)格式有嚴(yán)格要求,等號前面沒有空格而后面有。binPath本身帶有多個參數(shù),因此用引號括起來,而由于路徑里面又有空格,因此又加上了一層引號。 --service和-r均為svnserve.exe的參數(shù),前者要求它作為服務(wù)運(yùn)行,后者指明了倉庫的根路徑(多倉庫為倉庫的父目錄)。
            帶安裝包的SVN會自動注冊服務(wù),這時我們可能需要修改-r參數(shù),命令如下:

            sc config svnservice binPath= "\"C:\Program Files\Subversion\bin\svnserve.exe\" --service -r D:/SVN_REPOS"
            b. 訪問

            注冊完后,通過運(yùn)行sc start svnservice或者服務(wù)管理器(service.msc)啟動服務(wù)。
            接下來,我們就可以通過下面的命令來測試系統(tǒng)是否工作正常:

            svn info svn://localhost/Test
            如果正確的顯示出倉庫的相關(guān)信息,那么就大功告成了,否則請檢查服務(wù)的參數(shù)是否配置正確,比如,如果未在服務(wù)參數(shù)中指定正確的-r值,就會得到如下錯誤:

            No repository found in 'svn://localhost/Test'
            如果安裝了TortoiseSVN,則可以直接在瀏覽器中輸入svn://localhost/Test,這樣會調(diào)出TortoiseSVN的Repos-Browser。到此,你就可以通過TortoiseSVN來導(dǎo)入工程進(jìn)行版本管理了(參見后文)。

            c. 權(quán)限配置

            在進(jìn)行權(quán)限配置前,所有的用戶都能進(jìn)行任何操作,在很多情況下是不允許的。在創(chuàng)建倉庫時,倉庫目錄下都會生成好幾個文件夾,其中conf里面存儲的是配置信息,包括三個文件:

            authz:訪問權(quán)限配置
            passwd:用戶名和密碼配置
            svnserve.conf:基本配置信息
            先配置svnserve.conf,將里面幾項(xiàng)配置前的注釋去掉,最后的內(nèi)容如下:

            [general]
            anon-access = read
            auth-access = write
            password-db = passwd
            authz-db = authz
            這些參數(shù)的含義文件里都有詳細(xì)說明,其中,anon-access和auth-access分別是對匿名用戶以及認(rèn)證用戶的訪問控制,password-db指明用戶密碼文件路徑,authz-db指明權(quán)限配置文件路徑。另外還有一個參數(shù)realm用于指明倉庫所屬的認(rèn)證域,默認(rèn)情況下每個倉庫位于不同的域(每個倉庫有一個唯一的uuid),因此我們可以不設(shè)置該項(xiàng),除非多個倉庫需要共用同一份passwd配置。

            passwd文件的配置很簡單,格式如下(等號前面為用戶名,后面為密碼):

            [users]
            harry = 123
            sally = 123
            guest = 123
            authz則可以創(chuàng)建用戶組并精確配置某個用戶或用戶組對某個文件或目錄的訪問權(quán)限,下面是一個例子:

            [groups]
            harry_and_sally = harry,sally
             

            [/]
            * = r

            [/project1]
            * =
            harry = rw
            sally = r

            [/project1/foo]
            sally =

            [/project2]
            @harry_and_sally = rw
            guest = r

            文件內(nèi)容其實(shí)很簡單易懂,groups用于定義用戶組,后面便是對資源的具體訪問控制,/表示倉庫根目錄,*表示所有用戶,用戶組前面需加上@符號,r表示可讀,w表示可寫,等號右邊為空則表示沒有權(quán)限。注意對于目錄結(jié)構(gòu),當(dāng)用戶訪問某個資源時,SVN會先看有沒有直接針對該資源的訪問控制,如果沒有找到,則會繼承上一級目錄的訪問權(quán)限,如此遞推。

            再提一點(diǎn),當(dāng)我們有多個倉庫時,我們會發(fā)現(xiàn)這些倉庫的用戶帳號在大多數(shù)情況下都是相同的,因此,我們可以將passwd文件放到公共的地方,然后將所有倉庫的password-db配置都指向該文件。相應(yīng)的,authz-db也可以共用一個文件,不過需要在配置具體的訪問控制時指明所屬的倉庫,如下:

            [/]
            * = r
             

            [repos1:/project1]
            * = r
            harry = rw

            [repos2:/project1]
            * = r
            sally = rw

            上述配置表明,所有人對所有倉庫的根目錄都有讀權(quán)限,但只有harry對倉庫repos1里的project1有讀寫權(quán)限,只有sally對倉庫repos2里的project1有讀寫權(quán)限。
            3) 搭建HTTP訪問方式

            SVN可以通過Apache實(shí)現(xiàn)Web訪問方式,但這不是必需的,除非你有此需求。

            a) 下載

            Apache的官方網(wǎng)站為http://www.apache.org/,注意不要使用最新的2.2.x,而要選擇2.0.x,這一點(diǎn)在SVN官方網(wǎng)站上有特別說明,當(dāng)初我就沒有注意到這一點(diǎn),而導(dǎo)致Apache2.2啟動時無法加載SVN的模塊,出現(xiàn)“perhaps this is not an Apache module DSO”錯誤。

            我下載的版本為apache_2.0.59-win32-x86-no_ssl.msi

            b) 安裝和注冊

            執(zhí)行Apache安裝程序。由于2.0的版本不會自動注冊為服務(wù),因此我們需要手工處理。運(yùn)行cmd.exe,進(jìn)入apache安裝目錄下的bin文件夾,執(zhí)行如下命令即可:

            apache -k install
            更多的命令可以通過apache help查看。

            注冊完后,就可以通過系統(tǒng)托盤里的Apache Monitor來啟動服務(wù)。如果80端口未被占用,那么服務(wù)器應(yīng)正常啟動,通過http://127.0.0.1就能看到Apache的測試頁面。

            c) 配置

            Apache是通過conf目錄中的httpd.conf文件進(jìn)行配置的,比如,默認(rèn)的監(jiān)聽端口為80,在文件中搜索Listen 80,將80改成你所需的其它端口即可。配置完后必須重起Apache才能生效。更多關(guān)于Apache的配置說明請參見其幫助手冊或google之。下面網(wǎng)站為幫助手冊的中文版本。

            為了讓Apache支持SVN,比如增加一些配置項(xiàng),一個典型的配置如下:

            # 加載mod_dav模塊,它是對WebDAV(Web-based Distributed Authoring and Versioning)協(xié)議的支持,由Apache自帶
            LoadModule dav_module modules/mod_dav.so

             

            # 加載mod_dav_svn模塊,它與mod_dav通信,使Apache支持SVN,它位于SVN的bin目錄下。
            LoadModule dav_svn_module "D:/Program Files/Subversion/bin/mod_dav_svn.so"

             

            # 加載mod_authz_svn模塊,用于進(jìn)行權(quán)限管理
            LoadModule authz_svn_module "D:/Program Files/Subversion/bin/mod_authz_svn.so"

             

            # 配置SVN的訪問路徑以及相關(guān)相關(guān)參數(shù)
            <Location /svn/>                             # 通過http://HOST/svn/訪問SVN服務(wù)器
                DAV svn                                  # 必需
                SVNParentPath D:/SVN_REPOS               # 說明D:/SVN_REPOS下的所有目錄均為倉庫
                SVNListParentPath on                     # 在網(wǎng)頁中列出D:/SVN_REPOS下的所有倉庫
               
                AuthType Basic                           # 基本的用戶名密碼驗(yàn)證方式
                AuthName "SVN REPOS"                     # 認(rèn)證名稱,作提示用
                AuthUserFile D:/SVN_REPOS/users          # 用戶名密碼文件
                AuthzSVNAccessFile D:/SVN_REPOS/authz    # 權(quán)限控制文件

                Require valid-user                       # 只有通過認(rèn)證才能訪問網(wǎng)頁
            </Location>

             

            # 重定向處理,用于將http://HOST/svn地址重定向?yàn)?a href="http://host/svn/" minmax_bound="true">http://HOST/svn/
            RedirectMatch ^(/svn)$ $1/

            下面對幾個重要的地方作以說明:

            i. 網(wǎng)上很多文章提到將mod_dav_svn.so和mod_authz_svn.so兩個文件直接拷貝到Apache的modules目錄下,當(dāng)初我按照這種方法做時結(jié)果在一臺Windows 2000 Server上無法啟動Apache服務(wù),為此折騰了半天。后來才明白,這些模塊文件其實(shí)就是一些動態(tài)鏈接庫,它需要依賴SVN的bin目錄下的其它幾個dll文件(可以把后綴改為dll,然后通過VC帶的depends查看其依賴關(guān)系),因此如果沒有設(shè)置環(huán)境變量,那么Apache加載這些模塊時就會失敗,當(dāng)然也可以把所有依賴文件(主要是libdb43.dll )拷貝過去。實(shí)際上,我們只需要通過絕對路徑來引用這些模塊即可,這樣SVN升級后也不用再次拷貝。

            ii. URL的訪問路徑為/svn/而不是/svn,因?yàn)楹笳呖赡苡袉栴},導(dǎo)致通過http://HOST/svn訪問出現(xiàn)如下錯誤信息

            iii. SVNParentPath用于有多個倉庫的情況,如果只有單個倉庫,可以直接用SVNPath指明倉庫路徑。

            iv. AuthUserFile指明用戶名密碼文件,但它與前面提到的SVN倉庫下的passwd文件不是同一個文件,AuthUserFile是Apache的認(rèn)證文件格式,二者的區(qū)別主要是用戶名和密碼的分割符不同,passwd是等號,這里的users是冒號,當(dāng)初我就是把它們當(dāng)成一個文件而造成客戶端無法訪問(為什么SVN不把passwd的格式定義成和AuthUserFile的一樣呢?這樣二者可以共用一個文件)。如果要對密碼加密,那么users文件需通過Apache附帶的htpasswd工具生成,實(shí)際上我們也可直接采用明文方式。

            v. 權(quán)限控制文件AuthzSVNAccessFile與前面SVN里的authz一樣,因此可以共用。

            4) 其它管理功能

            a. 備份

            b. 修復(fù)

             

            3. SVN客戶端使用

            本節(jié)針對客戶端用戶,主要介紹一些常用的操作方法。

            1) 客戶端安裝

            客戶端可以采用命令行方式,也可以采用TortoiseSVN圖形化方式,個人認(rèn)為還是后者方便些。

            TortoiseSVN從http://tortoisesvn.tigris.org/上獲取,注意版本應(yīng)與服務(wù)器保持一致。如果是命令行方式的話,那么從http://subversion.tigris.org/下載一個SVN二進(jìn)制包就行了,此處不多講。

            TortoiseSVN屬于圖形化的客戶端軟件,其實(shí)前面的SVN安裝包里已經(jīng)含有客戶端程序,只不過是命令行方式的,你可以根據(jù)需要選擇是否安裝。TortoiseSVN的官方網(wǎng)站為http://tortoisesvn.tigris.org/,同樣,注意選擇與SVN服務(wù)器配套的版本。

            我這里使用的版本為TortoiseSVN-1.4.0.7501-win32-svn-1.4.0.msi

            安裝完后,會提示重起機(jī)器,實(shí)際上不用重起就能直接使用,只不過重起后會更新SVN文件圖標(biāo)的顯示。下圖是SVN工作區(qū)的右鍵菜單內(nèi)容:


            2) 主要操作

            TortoiseSVN使用起來很簡單,所有操作都通過右鍵菜單來完成。命令內(nèi)容也很直觀,而且有非常詳細(xì)的幫助手冊,這里只簡單的介紹一下。

            a) 導(dǎo)入項(xiàng)目(Import)

            首先要把需要進(jìn)行版本管理的工程(目錄)整理好,去掉不必要的文件,比如編譯器生成的臨時文件。然后在最上層文件夾上單擊右鍵,選擇“TortoiseSVN -> Import...”,輸入要存放的SVN服務(wù)器路徑,確認(rèn)即可。這樣就將本地的項(xiàng)目導(dǎo)入到了服務(wù)器上。

            命令行:svn import [PATH] URL

            b) 檢出項(xiàng)目(Checkout)

            項(xiàng)目初次導(dǎo)入成功后,剛才本地的內(nèi)容就沒有用了,我們需要建立一個新的工作區(qū),重新從SVN服務(wù)器下載受控的項(xiàng)目文件,執(zhí)行“TortoiseSVN -> Checkout...”,選擇或者輸入項(xiàng)目的URL,確認(rèn)即可,以后的工作都應(yīng)在這個工作區(qū)里進(jìn)行。

            默認(rèn)是獲取項(xiàng)目的最新版本(HEAD),如果要獲取歷史版本,指定相應(yīng)的修訂號(Revision)即可。

            命令行:svn checkout URL[@REV]... [PATH]

            c) 更新與提交(Update and Commit)

            他人修改了項(xiàng)目,我們需要從服務(wù)器下載最新版本,這通過“SVN Update”右鍵菜單實(shí)現(xiàn)。

            命令行:svn update [PATH...]

            如果是自己本地作了修改,則應(yīng)及時將修改更新到服務(wù)器上去,這通過“SVN Commit...”實(shí)現(xiàn)。一個好的習(xí)慣是每次提交都應(yīng)注明修改內(nèi)容,以方便日后查證。

            命令行:svn commit [PATH...]

            d) 增加和刪除文件(Add and Delete)

            如果我們要向一個受控項(xiàng)目中添加新文件或文件夾,只需在目標(biāo)上執(zhí)行“TortoiseSVN -> Add”操作。注意,這里只是本地添加,要提交到服務(wù)器,還必須執(zhí)行Commit才行。

            命令行:svn add PATH...

            同樣,要刪除受控文件或文件夾只需執(zhí)行“TortoiseSVN -> Delete”操作。

            命令行:svn delete PATH/URL...

            TortoiseSVN還提供了一個重命名操作“TortoiseSVN -> Rename”,這其實(shí)是添加和刪除的組合。

            e) 撤銷操作(Revert)

            有時候,我們可能進(jìn)行了錯誤的修改或者增加和刪除,只要未進(jìn)行提交,我們都可以通過“TortoiseSVN -> Revert”命令來撤銷本地的所有更改。

            命令行:svn revert PATH...

            f) 查看信息

            SVN提供了幾種信息查看方式,其中Show log用于顯示每次版本變更的日志信息,Repo-brower是倉庫瀏覽器,類似于資源管理器,Revision graph則以圖形化的方式讓我們很直觀的看到版本的變更情況,尤其是對于分支和標(biāo)簽管理很有幫助。

            3) 其它操作

            a) 沖突解決(Resolved)

            如果我們本地進(jìn)行了修改,而別人又把他的修改提交到了服務(wù)器上,這時我們執(zhí)行Update就可能出現(xiàn)沖突(Conflict)。Resolved的作用不是解決沖突,它不進(jìn)行任何合并,而是忽略掉他人的修改,允許我們將自己的版本提交到服務(wù)器上。

            簡單的說,Revent是撤銷本地修改,而Resolved是保留本地修改。

            b) 清除異常狀態(tài)(Cleanup)

            如果在執(zhí)行某個命令的時候出現(xiàn)異常,比如服務(wù)器突然掛了,本地的工作區(qū)就會處于一種異常狀態(tài),通過Cleanup能夠清除這種狀態(tài),使工作區(qū)不受到影響。

            c) 鎖定(Get lock)和解鎖(Release lock)

            沖突都是由于不同的開發(fā)人員同時修改了同一份文件造成的,因此,為了避免這種情況,我們可以強(qiáng)行鎖定自己要修改的內(nèi)容,這樣其他人在我們解鎖前就無法提交其修改。

            d) 分支和標(biāo)簽(Branch/tag)

            本文最開始就有說明,分支的目的是為了創(chuàng)建并行的工作線,標(biāo)簽的作用是為了保存項(xiàng)目某個版本的快照。二者在實(shí)現(xiàn)上卻是一樣的,都是通過Branch/tag命令執(zhí)行。

            e) 導(dǎo)出(Export)

            為了實(shí)現(xiàn)版本管理,SVN會在工作區(qū)的每個目錄下都生成一個隱藏的.svn文件夾,而我們有時卻希望得到一個干凈的沒有.svn文件夾的項(xiàng)目結(jié)構(gòu),比如發(fā)布軟件時,這種情況下就可以使用Export功能。

            f) 重定向(Relocate)

            有時候,SVN服務(wù)器的IP地址可能會發(fā)生變動,如果遇到這種情況,我們每個人的本地工作區(qū)都要重新下載嗎?不用,只需通過Relocate重新配置一下本地工作區(qū)所對應(yīng)的服務(wù)器地址就可以。

            g) 補(bǔ)丁管理(patch)

            不要被patch的名稱迷惑,實(shí)際上它不屬于SVN版本管理的范疇。這里所謂的patch是指那些對項(xiàng)目沒有寫權(quán)限(Commit)的人所作的修改,通過“TortoiseSVN -> Create Patch”生成,然后他們采用電子郵件等方式將patch發(fā)給項(xiàng)目管理員,由管理員執(zhí)行“TortoiseSVN -> Apply Patch”并確認(rèn)修改內(nèi)容后再進(jìn)行提交。該功能主要用于開源項(xiàng)目的管理。

            posted on 2008-10-28 10:32 聶文龍 閱讀(2694) 評論(2)  編輯 收藏 引用 所屬分類: Visual C++軟件應(yīng)用

            FeedBack:
            # re: SVN-Subversion快速指南 2009-01-08 10:33 楊吉
            TortoiseSVN -> Apply Patch
            請問這個具體怎么用?
            我的QQ156551800  回復(fù)  更多評論
              
            # re: SVN-Subversion快速指南 2013-04-24 10:16 聶文龍
            sc create svnservice binPath= "\"C:\Program Files (x86)\Subversion\bin\svnserve.exe\" --service -r F:/SVN-HOME" start= auto


            注冊svnserve到系統(tǒng)服務(wù)

            安裝目錄不帶空格
            sc create svnserve binpath= "c:\svnserve\svnserve.exe --service
            --root c:\repos" displayname= "Subversion" depend= tcpip
            start= auto

            安裝目錄帶空格
            sc create svnserve binpath= "
            \"C:\Program Files\Subversion\bin\svnserve.exe\"
            --service --root c:\repos" displayname= "Subversion"
            depend= tcpip start= auto

            設(shè)置服務(wù)描述
            sc description svnserve "Subversion server (svnserve)"
            注意 sc 的命令行很特殊。在 key= value 對中,key 與 = 之間不能有空格,但是在 value 之前,必須有空格。  回復(fù)  更多評論
              
            久久亚洲av无码精品浪潮| 日韩中文久久| 国产精品99久久久久久www| 亚洲日本va午夜中文字幕久久| 久久人妻少妇嫩草AV蜜桃| 国产精品久久久久9999| 日本高清无卡码一区二区久久| 熟妇人妻久久中文字幕| 久久久久无码国产精品不卡| 日韩精品久久无码人妻中文字幕| 久久久91人妻无码精品蜜桃HD| 国产精品99久久99久久久| 亚洲精品无码久久不卡| 久久精品国产只有精品2020| 久久精品一区二区三区AV| 久久久99精品成人片中文字幕 | 亚洲综合婷婷久久| 亚洲精品乱码久久久久久中文字幕 | www.久久99| 亚洲精品乱码久久久久久自慰 | 7777久久亚洲中文字幕| 久久亚洲日韩看片无码| 久久亚洲欧洲国产综合| 99国内精品久久久久久久| 久久久久AV综合网成人| 一本色道久久88—综合亚洲精品| 色婷婷综合久久久久中文字幕| 久久97久久97精品免视看秋霞| 久久亚洲精品视频| 老司机国内精品久久久久| 77777亚洲午夜久久多喷| 欧洲精品久久久av无码电影| 亚洲成色WWW久久网站| 99精品久久精品一区二区| 漂亮人妻被中出中文字幕久久| 久久久久久久91精品免费观看| 四虎影视久久久免费观看| 热RE99久久精品国产66热| 久久久久婷婷| 中文字幕无码久久久| 99久久这里只精品国产免费|