蘿卜青菜的BLOG

          路漫漫其修遠(yuǎn)兮,吾將上下而求索!~
          隨筆 - 21, 文章 - 10, 評(píng)論 - 6, 引用 - 0

          導(dǎo)航

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(1)

          隨筆分類

          文章分類

          常用java學(xué)習(xí)網(wǎng)站

          最新隨筆

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          SVN使用技巧


          ?

          程序員編寫程序的過程中,每個(gè)程序都會(huì)有很多不同的版本,這就需要程序員很好的管理代碼,在需要的時(shí)間可以取出需要的版本,并且每個(gè)版本都有一個(gè)完整的說明。

          我們使用Sub Version(簡(jiǎn)稱SVN)作為版本管理工具。這里著重介紹SVN作為跨平臺(tái)的多人協(xié)作使用方法。在多個(gè)程序員管理同一段代碼的過程中,版本的管理顯得尤為重要,使用SVN可以方便的進(jìn)行分支、合并,記錄下所有的版本。

          基本配置

          在開始某項(xiàng)軟件、文檔的開發(fā)與撰寫時(shí),首先由配置管理負(fù)責(zé)人建立SVN倉(cāng)庫(kù)、用戶名及其權(quán)限,并通知相關(guān)人員SVN倉(cāng)庫(kù)地址、SVN倉(cāng)庫(kù)負(fù)責(zé)人。

          SVN倉(cāng)庫(kù)的負(fù)責(zé)人把工程的tsvn:logminisize設(shè)置為1,以便強(qiáng)制注釋。設(shè)置方法:在你的工程文件夾右鍵->屬性中,進(jìn)入Subversion標(biāo)簽,選中tsvn: logminisize,確保復(fù)選框recursive選中,然后點(diǎn)擊Set按鈕把它的值設(shè)為1,其意思是指提交的注釋最短長(zhǎng)度為一個(gè)字。如圖:

          2 . 1

          軟件配置

          l??????? 忽略文件

          SVN [Setting] [General] , 設(shè)置需要忽略的文件以便忽略掉一些臨時(shí)的、無用的文件 , 常被忽略的文件有 *.opt *.ncb *.suo *.plg *.pch *.idb *.pdb *.scc *.obj Debug Release *.o *.bin *.out *.ilk *.aps debug release *.clw *.bak 。每個(gè)程序員可以根據(jù)自己的需要進(jìn)行修改忽略文件,上面只是使用VC++Tornado編程時(shí)常用的一些忽略文件。

          2 . 2

          以上說的忽略文件是指全局的忽略文件。SVN還能在特定的目錄中指定需要忽略的文件。忽略文件支持通配符。

          l??????? 合并比較工具

          Merge Tool中可以選擇用來合并的工具,強(qiáng)烈推薦用Araxis Merge。在[Setting]->[Diff]中填入"C:\Program Files\Araxis\Araxis Merge v6.5\Merge.exe";在[Setting]->[Merge]的選項(xiàng)中,填入"C:\Program Files\Araxis\Araxis Merge v6.5\Merge.exe" %theirs %mine %merged ;其中"C:\Program Files\Araxis\Araxis Merge v6.5\Merge.exe"是指合并工具的路徑,%theirs %mine %merged分別指..將要合并到主干的分支,主干,及合并后的結(jié)果。

          2 . 3

          倉(cāng)庫(kù)目錄結(jié)構(gòu)

          SVN倉(cāng)庫(kù)的負(fù)責(zé)人規(guī)劃好倉(cāng)庫(kù)的目錄結(jié)構(gòu)。推薦的目錄結(jié)構(gòu)如下圖所示。

          倉(cāng)庫(kù)的一級(jí)目錄只有兩個(gè),分別為codedoc。其中,doc主要用來放置先期的文檔,code主要用來放置工程的代碼,也可以包含后期的文檔。

          倉(cāng)庫(kù)的二級(jí)目錄只可以是branchtrunk兩個(gè)目錄,分別存放主干與分支。trunk目錄下直接存放工程文件。branch目錄下包括一些子目錄分別對(duì)應(yīng)各個(gè)分支。

          2 . 4

          SVN 倉(cāng)庫(kù)中取出代碼時(shí) ,一定 不要把整個(gè)倉(cāng)庫(kù)取出來 , 而應(yīng)該只取出 trunk 目錄 或只取出 branch 下的某個(gè)分支目錄 (比 如上圖中的 svn:\\code\branch\xw_051206 。

          一個(gè)項(xiàng)目會(huì)有多個(gè)人共同合作開發(fā)完成?;玖鞒淌牵?/span>

          l??????? 各開發(fā)成員建立自己的分支,并在此分支上開發(fā);

          l??????? 各開發(fā)成員把分支合并到主干上并形成較為穩(wěn)定的版本;

          l??????? 各個(gè)成員重新從主干上建立新的分支,在此分支上開發(fā) ( 即回到第一步 )

          l??????? 循環(huán)往復(fù),直到工程結(jié)束。

          下面我用一個(gè)例子來說明合作開發(fā)的基本流程。

          現(xiàn)在xblzj兩個(gè)開發(fā)人員要共同開發(fā)一個(gè)工程onlytest,其這個(gè)工程的主干的SVN倉(cāng)庫(kù)地址如下圖。

          2 . 5

          xblzj分別在onlytest這個(gè)工程中建立兩個(gè)分支,分別為xb _051115lz_051115。

          在這里分支命名要采用[姓名縮寫_6個(gè)數(shù)的日期_后綴(可選)]的形式,比如xb_051208_1xb_051212之類的。創(chuàng)建完分支后我們可以看到這個(gè)工程的目錄結(jié)構(gòu)如下圖所示:

          2 . 6 分支目錄

          建完之后, xblzj分別在本地取出對(duì)應(yīng)的分支進(jìn)行開發(fā)。

          當(dāng) 程序到達(dá)一個(gè)比較穩(wěn)定的階段,就需要把分支合并到主干上,下面講述一下合并的流程。

          在本節(jié)中繼續(xù)使用上一節(jié)中所示的工程與SVN倉(cāng)庫(kù)講解。

          1.2.3.1 xb lzj 分別修改自己分支上的代碼

          現(xiàn)在 , 主干上的 test_SVN.txt 是空文檔。

          xb lzj 修改提交后 , 兩個(gè)分支中 test_SVN.txt 分別如下兩圖所示

          2 . 7 xb_051129 分支下的 test_SVN.txt

          2 . 8 lzj_051129 分支下的 test_SVN.txt

          1.2.3.2 xb xb_051129 分支合并到主干

          xb 先把主干 check out 到本地。然后在主干的目錄上右鍵 選擇svn->merge,彈出如下窗口:

          2 . 9 合并對(duì)話框

          此對(duì)話框的含義是把From指定的分支版本到To指定的分支版本之間的差異合并到主干上。

          在這里分支選的是xb_051129。版本號(hào)的選定方法是點(diǎn)擊From中的Show Log,在Log窗口中按住Ctrl鍵,點(diǎn)擊選擇”made a copy”之上的那個(gè)版本,以及最頂上的那個(gè)版本,如2.11所示。然后點(diǎn)擊確定回到上圖中的對(duì)話框,會(huì)自動(dòng)填寫FromTo中的Revision號(hào)。

          2 . 10 選擇需要合并的版本

          然后直接點(diǎn)擊merge進(jìn)行合并,你也可以通過dry run來看是不是兩者之間有差異。由于沒有其它人修改主干,所以合并的很順利,下圖是xb_051115與主干合并后的結(jié)果。合并完畢之后,由xb對(duì)主干進(jìn)行提交。

          2 . 11 合并后,主干上的 test_SVN.txt

          ?

          1.2.3.3 lzj lzj_051129 分支合并到主干,解決沖突

          xb合并完畢之后,lzj要將他的分支合并到主干上去,方法同上。但是由于xb已經(jīng)修改過主干,所以產(chǎn)生了沖突,會(huì)彈出一個(gè)沖突對(duì)話框。雙擊對(duì)話框中的產(chǎn)生沖突的文件名,就可以調(diào)出工具對(duì)此文件進(jìn)行合并,下圖是我們用merge工具顯示的界面。

          2 . 12

          l??????? 首先比較第一個(gè)窗口與第二個(gè)窗口,把結(jié)果修改合并到第二個(gè)窗口。

          l??????? 然后確保光標(biāo)處于第二個(gè)窗口時(shí),點(diǎn)擊上圖中紅色圈圈所示的按鈕。這樣會(huì)把第二個(gè)窗口的內(nèi)容全部復(fù)制到第三個(gè)容口。之后保存,退出。

          l??????? 然后在工程目錄上點(diǎn)右鍵,進(jìn)行SVN->Resolved。這樣會(huì)刪除無用的臨時(shí)文件。

          l??????? 最后提交所作的修改,并添加詳細(xì)的注釋。

          中的標(biāo)簽

          CVS不同,使用SVN時(shí)不用專門為目錄添加標(biāo)簽,因?yàn)?/span>SVN也對(duì)目錄進(jìn)行版本管理。

          我們?cè)谔峤粫r(shí)寫好注釋(比如重要的版本提交時(shí)使用 051201 之類的日期作為開頭),就可以通過注釋來查找比較重要的目錄版本號(hào),相當(dāng)于 CVS VSS 中的標(biāo)簽。

          另外,每個(gè)工程都會(huì)有一個(gè)版本說明文件,通過此文件可以查找關(guān)鍵版本。

          你可以重命名、移動(dòng)或刪除你的文件或文件夾,但請(qǐng)使用SVN進(jìn)行這些操作,否則之前的版本信息會(huì)丟失。

          使用SVN刪除、移動(dòng)與重命名文件夾的方法是在文件/文件夾上點(diǎn)右鍵進(jìn)行SVN操作,或直接在資源瀏覽器中使用右鍵拖放(會(huì)彈出SVN選項(xiàng))。

          文件的刪除、移動(dòng)與重命名之前,必須保證工作目錄是最新的版本;進(jìn)行這些操作之后,需要進(jìn)行提交。

          1.3.3 版本的回退

          在代碼的編寫過程中,難免會(huì)有不盡人意的地方,你也許需要回退到某一個(gè)版本,但是在這個(gè)過程中可能有一些文件你想保留,也有一些文件你不想保留,這就牽扯到很復(fù)雜的版本管理過程,在這里給大家推薦幾種方法。

          1.??????? 若是你編輯了工程,在沒有提交的前提下,你想放棄這些修改,你可以直接選擇 revert 就可以更新到工程的最新的版本。

          2.??????? 若是你想退回到某一個(gè)版本,你就可以直接選擇 update to reversion 如圖 , 這樣我們就可以把我們的版本回退到你選中的版本去,這種情況下 SVN 并沒有顯示出有什么沖突,并且新建立的文件也還在,但是在這種情況下你并不能直接在你回退后的版本上進(jìn)行編輯,因?yàn)?/span> SVN 的版本控制還是在最新的主干上。我們需要 update 并解決沖突。

          3.??????? 你可以直接選擇 revert changes from this revision 如圖,這樣的話你可以直接解決沖突并提交。不過這種方法的不足是,你新建的文件都沒有了,整個(gè)工程都回退到之前的版本了。

          4.??????? 我推薦的一種方法是,直接 export 一個(gè)你需要的版本,然后用你 export 的版本覆蓋你的最新的版本,這樣你就可以不丟失你新建的文件,同時(shí)獲得 head SVN 控制文件。

          13

          ?

          每個(gè)工程會(huì)有很多個(gè)小模塊,當(dāng)某個(gè)模塊達(dá)到穩(wěn)定的時(shí)候,你就需要提交一次,以免寫下個(gè)模塊代碼的時(shí)候出現(xiàn)不可恢復(fù)的錯(cuò)誤。

          每一次提交需要前,需要通過pclint檢查,保證是一個(gè)編譯沒有錯(cuò)誤的版本。當(dāng)提交比較穩(wěn)定的版本的時(shí)候,同時(shí)要修改你的版本號(hào)。

          1.3.5 版本說明文件

          版本說明文件為xml表格,可用excel編輯,它會(huì)記錄下關(guān)鍵的版本信息。

          版本說明文件內(nèi)容如下表。發(fā)布版本是指用戶對(duì)外公布的版本號(hào),后文中有詳細(xì)描述;RevisionSVN內(nèi)部的工程文件夾的版本號(hào)。一個(gè)發(fā)布版本可能對(duì)應(yīng)多個(gè)Revision

          發(fā)布版本

          Revision

          詳細(xì)說明

          1,0,0,12

          76

          加入了抗干擾日志,需長(zhǎng)時(shí)間測(cè)試

          程序代碼進(jìn)行了重構(gòu),已經(jīng)調(diào)試通過

          77

          xxx @#$%^&

          78

          ...

          1,0,0,13

          81

          測(cè)試過的穩(wěn)定版本

          1,0,0,14

          99

          fix some bug,沒有測(cè)試

          ?

          ?

          ?

          ?
          附件 大小
          svn版本管理教程.rar 474.51 KB

          posted on 2006-10-18 10:43 蘿卜青菜 閱讀(231) 評(píng)論(0)  編輯  收藏 所屬分類: 技術(shù)類

          主站蜘蛛池模板: 察隅县| 潜江市| 万山特区| 盐亭县| 桓仁| 建始县| 平昌县| 电白县| 栾城县| 南陵县| 青阳县| 侯马市| 奉节县| 集贤县| 曲水县| 汪清县| 从化市| 安龙县| 库伦旗| 九台市| 东海县| 平乡县| 略阳县| 龙陵县| 平和县| 景德镇市| 霍林郭勒市| 南陵县| 遂宁市| 马龙县| 女性| 梓潼县| 霍林郭勒市| 宜良县| 桓仁| 辽宁省| 饶河县| 娄底市| 乌拉特前旗| 全州县| 阿图什市|