<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                >http://blog.csdn.net/eggcalm/article/details/6606520 [TOC] svn 是基于客戶/服務器模式: ![](https://img.kancloud.cn/01/37/0137cfc69806f8223eb82c36b9f18ec0_554x415.png) 復制-修改-合并方案(Subversion默認的模式): 在這種模型里,每一個客戶讀取項目配置庫建立一個私有工作副本——版本庫中文件和目錄的本地映射。用戶并行工作,修改各自的工作副本,最終,各個私有的復制合并在一起,成為最終的版本,這種系統通常可以輔助合并操作,但是最終要靠人工去確定正誤。 鎖定-修改-解鎖方案: 在這樣的模型里,在一個時間段里配置庫的一個文件只允許被一個人修改。 此模式不適合軟件開發這種工作。 # SVN使用教程總結 --- ## [原文地址](http://www.cnblogs.com/armyfai/p/3985660.html) ## 為什么要使用SVN? ??目前,絕大多數開源軟件和企業代碼管理,都使用SVN作為代碼版本管理軟件。 ??程序員在編寫程序的過程中,每個程序員都會生成很多不同的版本,這就需要程序員有效的管理代碼,在需要的時候可以迅速,準確取出相應的版本。 ## Subversion是什么? ??它是一個自由/開源的版本控制系統,一組文件存放在中心版本庫,記錄每一次文件和目錄的修改,Subversion允許把數據恢復到早期版本,或是檢查數據修改的歷史,Subversion可以通過網絡訪問它的版本庫,從而使用戶在不同的電腦上進行操作。 ## 一:SVN服務器搭建和使用。 1. 首先來下載和搭建[SVN服務器](http://subversion.apache.org/packages.html),進入網址后,滾動到瀏覽器最底部看到如下截圖: ![](https://box.kancloud.cn/2016-06-22_576a0c31d90de.png) 個人認為最好用VisualSVN server 服務端和 TortoiseSVN客戶端搭配使用. 點開上面的VisualSVN連接,下載VisualSVN server,下載完成后雙擊安裝,如下圖: ![](https://box.kancloud.cn/2016-06-22_576a0c3200e96.png) ![](https://box.kancloud.cn/2016-06-22_576a0c322a37e.png) ![](https://box.kancloud.cn/2016-06-22_576a0c325a791.png) ![](https://box.kancloud.cn/2016-06-22_576a0c3280930.png) Location是指VisualSVN Server的安裝目錄,Repositorys是指定你的版本庫目錄.Server Port指定一個端口,Use secure connection勾山表示使用安全連接, 點擊Next,進入下一步,如下圖: ![](https://box.kancloud.cn/2016-06-22_576a0c32a0ecf.png) ![](https://box.kancloud.cn/2016-06-22_576a0c32c2834.png) 點擊【Finish】即可完成安裝。安裝完成后,啟動VisualSVN Server Manager,如圖: ![](https://box.kancloud.cn/2016-06-22_576a0c32ec42c.png) 可以在窗口的右邊看到版本庫的一些信息,比如狀態,日志,用戶認證,版本庫等. 要建立版本庫,需要右鍵單擊左邊窗口的Repositores,如下圖: ![](https://box.kancloud.cn/2016-06-22_576a0c3316a5a.png) 在彈出的右鍵菜單中選擇Create New Repository或者新建->Repository: ![](https://box.kancloud.cn/2016-06-22_576a0c33375e3.png) ![](https://box.kancloud.cn/2016-06-22_576a0c3354efa.png) ![](https://box.kancloud.cn/2016-06-22_576a0c3380420.png) ![](https://box.kancloud.cn/2016-06-22_576a0c339e6b3.png) 點擊【Finish】即可完成基本創建。 2. 需要建立用戶和組,并且需要分配權限。 1.1 在VisualSVN Server Manager窗口的左側右鍵單擊用戶組,選擇Create User或者新建->User,如圖: ![](https://box.kancloud.cn/2016-06-22_576a0c33c2df3.png) 點擊User后,進入如下圖: ![](https://box.kancloud.cn/2016-06-22_576a0c33df328.png) 填寫Username和password后,點擊ok按鈕后,進入如下圖: ![](https://box.kancloud.cn/2016-06-22_576a0c3408316.png) 點擊上面的【Add】按鈕后,如下圖 ![](https://box.kancloud.cn/2016-06-22_576a0c342619f.png) 增加longen0707到用戶中(如果有多個用戶,操作一樣)。 2.1 然后我們建立用戶組,在VisualSVN Server Manager窗口的左側右鍵單擊用戶組,選擇Create Group或者新建->Group,如圖: ![](https://box.kancloud.cn/2016-06-22_576a0c344229d.png) 點擊【Group】按鈕后,進入如下圖: ![](https://box.kancloud.cn/2016-06-22_576a0c345dc00.png) 在彈出窗口中填寫Group name為Developers,然后點Add按鈕,在彈出的窗口中選擇Developer,加入到這個組,然后點Ok. 接下來我們需要給用戶組設置權限,在MyRepository上單擊右鍵,選擇屬性,如圖: ![](https://box.kancloud.cn/2016-06-22_576a0c34790ec.png) 在彈出的對話框中,選擇Security選項卡,點擊Add按鈕,選中longen0707,然后添加進來,權限設置為Read/Write,如下圖: ![](https://box.kancloud.cn/2016-06-22_576a0c34972f6.png) 點擊【確定】按鈕即可。 ### 二:客戶端SVN安裝。 1. 首先我們需要下載 ”svn小烏龜”后,進行安裝。 安裝完成后,比如在我的項目在qiandaun1中,我右鍵就可以看到如下: ![](https://box.kancloud.cn/2016-06-22_576a0c34bacd1.png) 2. checkout項目文件。 新建或者進入目錄下(比如qianduan1),右鍵 --> Svn Checkout --> ![](https://box.kancloud.cn/2016-06-22_576a0c34d71fc.png) 其中URL我可以在SVN服務器獲取到,我在myRepositories下右鍵新建文件 ![](https://box.kancloud.cn/2016-06-22_576a0c3502477.png) qianduan文件被建立,然后比如我這樣右鍵 --> copy下 ![](https://box.kancloud.cn/2016-06-22_576a0c35281b3.png) 即可。 將復制的版本庫URL粘貼上,如下圖: ![](https://box.kancloud.cn/2016-06-22_576a0c3547b08.png) 點擊【ok】按鈕后,就可以檢索出來,如下: ![](https://box.kancloud.cn/2016-06-22_576a0c3568593.png) **注意事項**: .svn這個隱藏目錄記錄著兩項關鍵信息:工作文件的基準版本和一個本地副本最后更新的時間戳,千萬不要手動修改或者刪除這個.svn隱藏目錄和里面的文件!!,否則將會導致你本地的工作拷貝(靜態試圖)被破壞,無法再進行操作。 1) TortoiseSVN圖標介紹 ![](https://box.kancloud.cn/2016-06-22_576a0c35879b8.png) 一個新檢出的工作復本使用綠色的對勾重載,表示Subversion狀態正常。 ![](https://box.kancloud.cn/2016-06-22_576a0c359d76b.png) 在你開始編輯一個文件之后,狀態就變成了已修改,而圖標重載已變成了紅色感嘆號。通過這種方式,你可以很容易地看出那些文件從你上次更新工作復本被修改過,且需要提交。 ![](https://box.kancloud.cn/2016-06-22_576a0c71adcca.png) 如果在提交的過程中出現了沖突,圖標就會變成了黃色感嘆號。 ![](https://box.kancloud.cn/2016-06-22_576a0c71c31bc.png) 加號告訴你有一個文件或者目錄已經被計劃加入到版本控制中。 ### TortoiseSVN Client基礎操作: #### 1. SVN檢出(SVN Checkout) 在文件夾或者目錄下單擊右鍵 –> 選擇SVN檢出,如下圖所示: ![](https://box.kancloud.cn/2016-06-22_576a0cadd4712.png) 點擊后,在彈開窗口的版本庫url框中輸入版本庫的目錄地址,然后點擊確定,如下圖: ![](https://box.kancloud.cn/2016-06-22_576a0cae0e104.png) 再點擊ok按鈕后,如下圖: 在彈出的對話框中輸入用戶名和密碼,驗證成功后,項目文件開始從遠程服務器下載到本地工作目錄中。 ![](https://box.kancloud.cn/2016-06-22_576a0cae30f92.png) 點擊ok按鈕后,即可獲取完成,如下圖所示: #### 2. 增加(Add) 在test項目文件下,新建一個b.txt文件,提交到版本庫的方法如下2種: 1. 先提到變更列表中,再commit到配置庫中,選擇新增文件,右鍵SVN菜單執行“Add“操作提交到”變更列表中”,然后右鍵SVN菜單執行”SVN Commit”提交到版本庫中。 2. 不提交到變更列表中,而是直接commit配置庫中,選擇該文件,右鍵svn菜單執行”SVN Commit”操作。 #### 3. 刪除(Delete) 如果被刪除的文件還未入版本庫,則可以直接使用操作系統的刪除操作刪除該文件。 如果被刪除的文件已入版本庫,則刪除的方法如下: 選擇被刪除文件,右鍵svn菜單執行”delete”操作,然后選擇被刪除文件的父目錄,右鍵svn菜單執行”SVN Commit”. 使用操作系統的刪除操作刪除該文件,然后選擇被刪除文件的父目錄,右鍵svn菜單執行”SVN Commit”,在變更列表中選擇被刪除的文件。如下圖: ![](https://box.kancloud.cn/2016-06-22_576a0cae53717.png) #### 4. 改名(Rename) 修改文件名,選中需要重命名的文件或文件夾,然后右鍵“TortoiseSVNàRename“,在彈出的對話框中輸入新名稱,點擊”ok”按鈕,并將修改文件名后的文件或文件夾通過 “SVN Commit”提交到SVN服務器上。 #### 5. SVN還原(SVN Revert) 右擊想要回退的文件或者文件夾,在TortoiseSVN彈出菜單中選擇”Update to reversion…” 然后會彈出一個窗口,如下: ![](https://box.kancloud.cn/2016-06-22_576a0cae7284f.png) 比如說我們要回退到第10個版本只需要在Revision中填寫相應的版本號,然后點擊ok即可。 #### 6. 檢查更新(Check for modifications) 此功能可以顯示你所做的修改有哪些還沒有提交的,此功能不光能看到對文件的修改變化,所有的變化都能看到,包括增加文件或者目錄,刪除文件或者目錄,移動文件或者目錄等,如果你點擊了檢查版本庫,那你還可以看到版本庫里的改動,既別人提交了哪些文件的改動,你還沒更新到本地,如下: ![](https://box.kancloud.cn/2016-06-22_576a0cae8e421.png) #### 7. SVN更新(SVN Update) 更新本地代碼與SVN服務器上最新的版本一致,只要在需要更新的文件夾上點擊右鍵或者在文件下空白處點擊右鍵,選擇”SVN Update” (獲取指定版本中的內容,點擊右鍵執行SVN菜單中的“Update to reversion“),就可以了。 ##### 7.1 如何解決沖突文件 對于每個沖突的文件Subversion在你的目錄下放置了三個文件:如下: ![](https://box.kancloud.cn/2016-06-22_576a0caea63d1.png) 為什么會產生沖突代碼呢?原因很簡單就是因為不同的人,同時修改了同一個文件的同一個地方,這時候,他提交了,我沒有提交,我就提交不了,這個時候我們要進行先更新,然后在進行提交即可,那如果產生沖突,會生成如上3個文件。 **解決方案如下**: 首先我們可以看下`1.txt`代碼如下: <<<<<<< .mine aaaasdf11222333 dderderder ======= b>>>>>>> .r5 然后我去掉多余的代碼,`1.txt`變成這樣 `aaaasdf11222333 dderderder` 進行提交,還是提交不了,如下所示: ![](https://box.kancloud.cn/2016-06-22_576a0caebfd0b.png) 為什么?因為沖突會產生上面的三個文件,有上面3個文件存在肯定提交不了,這三個文件代碼及解釋如下: `1.txt.mine` 是沖突前自己的文件。可以看下內容如下: aaaasdf11222333 dderderder 2. `1.txt.r4` 是沖突前本地的版本文件 內容如下:`aaaasdf11222333` 3. `1.txt.r5` 是別人趕在你之前提交的版本 內容如下: b 其中,`<<<<<<<<.mine .....=======`之間的代碼是你自己的,而`======......>>>>>>>.r5`是別人與你沖突的代碼部分 這樣就不難理解為什么會產生沖突這種奇怪的東西了,因為你們修改的同一塊代碼,當然會產生沖突。 **解決方案如下**: 假如我現在的1.txt中的沖突內容如下: <<<<<<< .mine 6666666666666600000 ======= 66666666666aaaaaaaaaa666 >>>>>>> .r16 前面說過 `<<<<<<< .mine …… =======` ……之間的代碼是我未產生沖突之前修改的代碼, `======= ………>>>>>>> .r16` 這中間……的代碼是別人與我沖突代碼的部分,從上面的代碼可以看到 aaaaaaaaa是我同事新增的 ,00000是我后增加的。 使用revert(回滾)操作,該操作表示用戶放棄自己的更新代碼,然后直接提交,這個時候你的代碼就會使服務器上最新的代碼,即A用戶提交的新代碼,你的代碼不會被提交,如下所示: ![](https://box.kancloud.cn/2016-06-22_576a0caee4561.png) ![](https://box.kancloud.cn/2016-06-22_576a0caf1501b.png) 點擊ok按鈕后 可以看到其他三個文件都自動刪掉了,1.txt代碼變成如下代碼: 66666666666aaaaaaaaaa666 也就是a用戶提交的代碼,我自己更新的代碼需要自己動手復制進去即可提交commit。 假如我現在3.txt產生沖突代碼如下: <<<<<<< .mine 333333338888888888888======= 3333cccccccccc3333>>>>>>> .r16 通過第一點我們知道,`333333338888888888888`這個內容是我修改后,未產生沖突之前的內容,`3333cccccccccc3333`這個代碼是A用戶提交的代碼,從上面得知 A用戶新增內容是`ccccccc`,而我新增的內容是`8888888`。 那么第二種解決方法如下: 選擇文件->右鍵Editconficts:這種方法需要沖突雙方經過協商之后將代碼更改統一之后再提交。不僅解決了沖突而且還保證了代碼是正確的,因為只有一方的代碼被提交. ![](https://box.kancloud.cn/2016-06-22_576a0caf33efd.png) 如上圖所示,紅色的部分是沖突代碼:theirs表示當前服務器端最新的代碼,Mine表示自己修改后的代碼,Merged表示合并后的代碼。點擊紅色后右鍵選擇:use this text block就可以將該部分代碼作為合并后的代碼 接下來再說說由于沖突導致重要代碼被覆蓋的情況。沖突發生時如果采取的措施不對可能會導致部分代碼丟失,如果想要還原之前的代碼也很容易。 選擇文件->右鍵選擇show log在這里面你可以看見之前提交的所有版本,找到你想要恢復的版本右鍵選擇revert to this version 就可以恢復了. #### 8. SVN提交(SVN Commit) Svn的提交是將在工作空間做的修改進行提交,包括文件內容的修改,文件或目錄的添加,刪除,命名,移動等操作。如下圖所示: ![](https://box.kancloud.cn/2016-06-22_576a0caf53d26.png) #### 9. 顯示日志(Show log) 通過此功能可以查到誰,什么時候,對那個目錄下的那些文件進行了那些操作,如下圖: ![](https://box.kancloud.cn/2016-06-22_576a0caf86447.png) #### 10. 版本庫瀏覽(Repo-browser) 此功能是用來瀏覽需要查看的資料庫,在本地文件夾下點擊右鍵,選擇TortoiseSVNàRepo-browser,在彈出的對話框中輸入資料庫地址,再輸入用戶名和密碼,就能查看到你需要查看到版本庫的內容,在這你還能看到那些文件被誰鎖定了,如下圖: ![](https://box.kancloud.cn/2016-06-22_576a0cafa335f.png) ###三:創建分支合并相互操作 **項目中為何要創建分支,及合并?** 比如我現在項目所有的文件放在主干上(trunk)中,由于需求的變更,需要增加新的需求,但是我們主干上還要繼續往下開發,在此我們可以新建一個分支,來做增加新的需求那一塊,主干上繼續開發,等分支上代碼沒有問題的時候,再合并到主干上來。 創建分支的最大的目的就是跟主線進行并行開發時候不影響主線的開發。 **如何操作?** 假如我本地新建一個文件夾test下有2個文件夾trunk(存放主干上的代碼)和branch(存放分支上的代碼),如下所示: ![](https://box.kancloud.cn/2016-06-22_576a0cafc2d3c.png) ####一:先提取主干上的代碼。 點擊trunk --> 鼠標右鍵 --> 點擊SVN Checkout --> 彈出一個對話框,如下圖所示: ![](https://box.kancloud.cn/2016-06-22_576a0cafdd233.png) 其中上面的URL是從服務器VisualSVN Server上獲取的,如下所示: ![](https://box.kancloud.cn/2016-06-22_576a0cb008612.png) 直接右鍵qianduan3 --> Copy URL to Clipboard 即可。 其中qianduan3項目有如下文件,如下圖所示: ![](https://box.kancloud.cn/2016-06-22_576a0cb0281c5.png) 最后點擊上面的checkout按鈕后,就可以在主干上把代碼從遠程服務器上獲取到,如下所示: ![](https://box.kancloud.cn/2016-06-22_576a0cb04c12e.png) #### 二:新建分支 從trunk(主干上)創建分支(branch)步驟如下: 1. 右鍵trunk --> branch/Tag 如下圖: ![](https://box.kancloud.cn/2016-06-22_576a0cb067b86.png) 在彈出的對話框如下圖: ![](https://box.kancloud.cn/2016-06-22_576a0cb0965dc.png) 點擊ok按鈕后,就可以在VisualSVN Serval服務器上新增newBranch,是從如上服務器qianduan3上的文件拷貝一份的,如下所示: ![](https://box.kancloud.cn/2016-06-22_576a0cb0bce89.png) 現在我們可以再來看看本地branch文件夾了,我現在直接進入branch文件下,右鍵 --> Chenckout下,就可以把newBranch下的所有文件提取出來了,如下所示: ![](https://box.kancloud.cn/2016-06-22_576a0cb1550a7.png) ![](https://box.kancloud.cn/2016-06-22_576a0cb175296.png) 點擊ok按鈕就可以把文件提取出來了,如下圖所示: ![](https://box.kancloud.cn/2016-06-22_576a0cb1911d0.png) 分支目前建立在svn的服務器端,本地并沒有更新,對本地branch文件夾 右鍵--> update即可,就可以更新到分支代碼,如下所示: ![](https://box.kancloud.cn/2016-06-22_576a0cb1b10c0.png) #### 三:合并分支到主干上 比如我現在對branch分支上新增3.txt文件,然后提交上去,如下所示: ![](https://box.kancloud.cn/2016-06-22_576a0cb1d0b87.png) 我現在想把分支上的代碼3.txt合并到主干上trunk,現在要怎么合并呢?步驟如下: 1. 回到我們剛剛的主干(trunk)文件夾下,鼠標右鍵該文件夾 --> TortoiseSVN --> Merge 如下圖所示: ![](https://box.kancloud.cn/2016-06-22_576a0cb1ee21a.png) 在彈出的窗口,如下圖所示: ![](https://box.kancloud.cn/2016-06-22_576a0cb221c1a.png) ![](https://box.kancloud.cn/2016-06-22_576a0cb242506.png) ![](https://box.kancloud.cn/2016-06-22_576a0cb294072.png) ![](https://box.kancloud.cn/2016-06-22_576a0cb2b7707.png) 就可以看到主干trunk上多加了一個3.txt,就是從分支上合并過來的。 #### 四:合并主干到分支。 如果主干上有一些更新,比如說jar包更新等等,那么這些要更新到分支上去,如何操作呢?比如我現在在主干上新建一個4.txt文件,比如如下: ![](https://box.kancloud.cn/2016-06-22_576a0cb2d7d09.png) 我現在的分支上目錄如下: ![](https://box.kancloud.cn/2016-06-22_576a0cb30b683.png) 現在是想把主干上的4.txt合并到分支上來,要如何操作? 步驟如下,還是和剛剛操作類似. 1. 我們在分支點擊branch --> 右鍵TortoiseSVN --> Merge 如下圖所示: ![](https://box.kancloud.cn/2016-06-22_576a0cb32c7a2.png) 在彈出新窗口后,如下圖所示: ![](https://box.kancloud.cn/2016-06-22_576a0cb35d604.png) ![](https://box.kancloud.cn/2016-06-22_576a0cb381326.png) ![](https://box.kancloud.cn/2016-06-22_576a0cb3bae84.png) 最后直接merge,就可以看到分支branch上也有主干上的4.txt文件了,也就是說,合并主干到分支上也是可以的,如下圖所示: ![](https://box.kancloud.cn/2016-06-22_576a0cb3e9789.png) ### Branches與Tags 在版本控制的系統中,我們經常需要對開發周期中的單獨生命線作單獨的修改,這條單獨的開發生命線就可以稱為Branches即分支。分支經常用于添加新的功能以及產品發布后的bug修復等,這樣可以不影響主要的產品開發線以及避免編譯錯誤等。當我們添加的新功能完成后可以將其合并到主干中。 Tags即標簽:主要用于項目開發中的里程碑,比如開發到一定階段可以單獨一個版本作為發布等,它往往代表一個可以固定的完整的版本,這根VSS中的Tag大致相同。 SVN中的Branches以及Tags經常容易混淆,因為在TortoiseSVN中創建方法是一致的,而且它們都是通過存儲類似Linux中的lunch快捷方式一樣,只是創建了指向某個版本的鏈接,而不會真正將此版本的內容復制到分支或者標簽中,這樣既可以節省空間,也可以很快速的創建。 為了便于創建分支和標簽,我們習慣于將Repository版本庫的結構布置為: ~~~ /branches,/tags,/trunk。 分別代表分支,標簽以及主干。 ~~~ 還有一點值得注意的是,**SVN不推薦在創建的Tag基礎上Revision**,這種情況應用Branches,因為Tag一般保持不變不作任何修改。 ### SVN命令行操作 #### 創建分支 `svn cp -m "create branch" http://svn_server/xxx_repository/trunk http://svn_server/xxx_repository/branches/br_feature001 ` #### 切出指定版本 `svn copy svn://192.168.1.52/help/branches/help_forShop_140307 -r 170 svn://192.168.1.52/help/branches/help_forPm_141010 -m "*切出分支"` #### 更改版本名稱 `svn move -m "更改分支名字" svn://192.168.1.52/help/branches/help_forPmv2 svn://192.168.1.52/help/branches/help_forPmv2_141010` #### 獲得分支 `svn co http://svn_server/xxx_repository/branches/br_feature001 ` #### 合并主干上的最新代碼到分支上 ~~~ cd br_feature001 svn merge http://svn_server/xxx_repository/trunk ~~~ 如果需要預覽該刷新操作,可以使用svn mergeinfo命令,如: `svn mergeinfo http://svn_server/xxx_repository/trunk --show-revs eligible` 或使用svn merge --dry-run選項以獲取更為詳盡的信息。 #### 分支合并到主干 一旦分支上的開發結束,分支上的代碼需要合并到主干。SVN中執行該操作需要在trunk的工作目錄下進行。命令如下: ~~~ cd trunk svn merge --reintegrate http://svn_server/xxx_repository/branches/br_feature001 ~~~ 分支合并到主干中完成后應當刪該分支,因為在SVN中該分支已經不能進行刷新也不能合并到主干。 #### 合并版本并將合并后的結果應用到現有的分支上 `svn -r 148:149 merge http://svn_server/xxx_repository/trunk` ## 建立tags tags存放某個版本狀態的標簽,比如驗收測試版、1.0.3版等。 **branches和tags本質沒有區別**,都是通過svn copy方式建立的,差異在于通常branches中的內容是需要繼續修改或開發的,tags中的內容是存放不再修改的,這一般通過權限設置來解決,tags通常只給管理員開發寫權限。 我們的項目開發到一個穩定版本都需要打個tag,進行總結與備份。 **其中tags目錄需要只讀,可以使用SVN中的authz文件控制該目錄的訪問權限為只讀。** 現在可以用svn的hooks功能來完成禁止tags修改功能。hook是什么?網上有很多資料,我就不再這兒廢話了。只想說hook可以是任何形式的可執行程序,如shell script, PHP, Python, 你自己寫c程序. 唯一要注意的是它的程序名字一定要是hooks/pre-commit.tmpl 模板名的前綴名,即 pre-commit。 實現"禁止修改tag"功能,就是在pre-commit中實現的,我這里用的是bash shell script完成。 產品開發已經基本完成,并且通過很嚴格的測試,這時候我們就想發布給客戶使用,發布我們的1.0版本 * 命令行: `svn cp http://svn_server/xxx_repository/trunk http://svn_server/xxx_repository/tags/release-1.0 -m "1.0 released"` * TortoiseSVN: 1)右擊要打tag的目錄--->TortoiseSVN--->branch/tag 2)再彈出來的對話框中,要求輸入分支或標記的目標路徑 3)創建分支或標記的時候,你有三個選項版本庫中的最新版本,版本庫中的指定版本,工作副本。 最新版本(HEAD revision in the repository)——直接從版本庫中最新創建,由于不需要從你的工作拷貝中傳輸數據,創建過程會很快。 版本庫中的指定版本(Specific revision in the repository)——同樣是從版本庫中創建,不同的是你可以指定一個版本號。如果你忘了版本號,可以通過顯示版本記錄來找到你想要的版本號(如下圖)。這種方式同樣不需要從你的工作拷貝中傳輸數據,創建過程也很快。 工作副本——這種方式會依據當前工作拷貝的版本狀況(無論是你做了本地的修改,或是將其中的某些文件更新到了一個歷史版本)來創建分支拷貝。這種創建方式會根據工作副本中每個文件的版本情況來決定是否要從工作拷貝向版本庫中傳輸數據。 4)最后一個選項就是“切換工作副本至分支/標記”選項,如果選中這個選項,顧名思義你用來創建分支或標記的工作拷貝就會自動切換到指定創建的版本或標記的。當然你可以通過Switch(重新定位)和Checkout(檢出)功能來完成切換的工作。 #### 刪除分支或tags ~~~ svn delete -m "*刪除 無用的分支" http://svn_server/xxx_repository/branches/br_feature001 svn rm http://svn_server/xxx_repository/tags/release-1.0 ~~~ ## Refs: [svn操作項目實戰](http://blog.csdn.net/vbirdbest/article/details/51122637) [SVN創建分支、打標簽-腳本](http://buddie.iteye.com/blog/1885364)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看