天天看點

svn的基本使用方法

一,svn的介紹

    Subversion(SVN) 是一個開源的版本控制系統, 也就是說 Subversion 管理着随時間改變的資料。 這些資料放置在一個中間資料檔案庫(repository) 中。 這個檔案庫很像一個普通的檔案伺服器, 不過它會記住每一次檔案的變動。 這樣你就可以把檔案恢複到舊的版本, 或是浏覽檔案的變動曆史。

二,svn的概念

  • repository(源代碼庫):源代碼統一存放的地方
  • Checkout(提取):當你手上沒有源代碼的時候,你需要從repository checkout一份
  • Commit(送出):當你已經修改了代碼,你就需要Commit到repository
  • Update (更新):當你已經Checkout了一份源代碼, Update一下你就可以和Repository上的源代碼同步,你手上的代碼就會有最新的變更

    日常開發過程其實就是這樣的(假設你已經Checkout并且已經工作了幾天):Update(獲得最新的代碼) -->作出自己的修改并調試成功 --> Commit(大家就可以看到你的修改了) 。

    如果兩個程式員同時修改了同一個檔案呢, SVN可以合并這兩個程式員的改動,實際上SVN管理源代碼是以行為機關的,就是說兩個程式員隻要不是修改了同一行程式,SVN都會自動合并兩種修改。如果是同一行,SVN會提示檔案Confict, 沖突,需要手動确認。

三,svn的主要功能

  • 1)目錄版本控制

    CVS 隻能跟蹤單個檔案的曆史, 不過 Subversion 實作了一個 "虛拟" 的版本控管檔案系統, 能夠依時間跟蹤整個目錄的變動。 目錄和檔案都能進行版本控制。

  • (2)真實的版本曆史

    自從CVS限制了檔案的版本記錄,CVS并不支援那些可能發生在檔案上,但會影響所在目錄内容的操作,如同複制和重命名。除此之外,在CVS裡你不能用擁有同樣名字但是沒有繼承老版本曆史或者根本沒有關系的檔案替換一個已經納入系統的檔案。在Subversion中,你可以增加(add)、删除(delete)、複制(copy)和重命名(rename),無論是檔案還是目錄。所有的新加的檔案都從一個新的、幹淨的版本開始。

  • (3)自動送出

    一個送出動作,不是全部更新到了檔案庫中,就是完全不更新。這允許開發人員以邏輯區間建立并送出變動,以防止當部分送出成功時出現的問題。

  • (4)納入版本控管的中繼資料

    每一個檔案與目錄都附有一組屬性關鍵字并和屬性值相關聯。你可以建立, 并儲存任何你想要的Key/Value對。 屬性是随着時間來作版本控管的,就像檔案內容一樣。

  • (5)選擇不同的網絡層

    Subversion 有抽象的檔案庫存取概念, 可以讓人很容易地實作新的網絡機制。 Subversion 可以作為一個擴充子產品嵌入到Apache HTTP 伺服器中。這個為Subversion提供了非常先進的穩定性和協同工作能力,除此之外還提供了許多重要功能: 舉例來說, 有身份認證, 授權, 線上壓縮, 以及檔案庫浏覽等等。還有一個輕量級的獨立Subversion伺服器, 使用的是自定義的通信協定, 可以很容易地通過 ssh 以 tunnel 方式使用。

  • (6)一緻的資料處理方式

    Subversion 使用二進制差異算法來異表示檔案的差異, 它對文字(人類可了解的)與二進制檔案(人類無法了解的) 兩類的檔案都一視同仁。 這兩類的檔案都同樣地以壓縮形式儲存在檔案庫中, 而且檔案差異是以兩個方向在網絡上傳輸的。

  • (7)有效的分支(branch)與标簽(tag)

    在分支與标簽上的消耗并不必一定要與項目大小成正比。 Subversion 建立分支與标簽的方法, 就隻是複制該項目, 使用的方法就類似于硬連接配接(hard-link)。 是以這些操作隻會花費很小, 而且是固定的時間。

  • (8)Hackability

    Subversion沒有任何的曆史包袱; 它主要是一群共用的 C 程式庫, 具有定義完善的API。這使得 Subversion 便于維護, 并且可被其它應用程式與程式語言使用。

四,svn的好處 

    1、原子送出。一次送出不管是單個還是多個檔案,都是作為一個整體送出的。在這當中發生的意外例如傳輸中斷,不會引起資料庫的不完整和資料損壞。

    2、重命名、複制、删除檔案等動作都儲存在版本曆史記錄當中。

    3、對于二進制檔案,使用了節省空間的儲存方法。(簡單的了解,就是隻儲存和上一版本不同之處)

    4、目錄也有版本曆史。整個目錄樹可以被移動或者複制,操作很簡單,而且能夠保留全部版本記錄。

    5、分支的開銷非常小。

    6、優化過的資料庫通路,使得一些操作不必通路資料庫就可以做到。這樣減少了很多不必要的和資料庫主機之間的網絡流量。

五,svn的基本使用方法

    安裝:http://www.runoob.com/svn/svn-install.html

   1、将檔案checkout到本地目錄

   svn checkout path(path是伺服器上的目錄)

   例如:svn checkout svn://192.168.1.1/pro/domain

   簡寫:svn co

   2、往版本庫中添加新的檔案

   svn add file

   例如:svn add test.php(添加test.php)

   svn add *.php(添加目前目錄下所有的php檔案)

   3、将改動的檔案送出到版本庫

   svn commit -m "LogMessage" [-N] [--no-unlock] PATH(如果選擇了保持鎖,就使用--no-unlock開關)

   例如:svn commit -m "add test file for my test" test.php

   簡寫:svn ci

   4、加鎖/解鎖

  svn lock -m "LockMessage" [--force] PATH

  例如:svn lock -m "lock test file" test.php

  svn unlock PATH

    5、更新到某個版本

   svn update -r m path

   例如:

   svn update如果後面沒有目錄,預設将目前目錄以及子目錄下的所有檔案都更新到最新版本。

   svn update -r 200 test.php(将版本庫中的檔案test.php還原到版本200)

   svn update test.php(更新,于版本庫同步。如果在送出的時候提示過期的話,是因為沖突,需要先update,修改檔案,然後清除svn resolved,最後再送出commit)

   簡寫:svn up

    6、檢視檔案或者目錄狀态

  1)svn status path(目錄下的檔案和子目錄的狀态,正常狀态不顯示)

   【?:不在svn的控制中;M:内容被修改;C:發生沖突;A:預定加入到版本庫;K:被鎖定】

  2)svn status -v path(顯示檔案和子目錄狀态)

   第一列保持相同,第二列顯示工作版本号,第三和第四列顯示最後一次修改的版本号和修改人。

   注:svn status、svn diff和 svn revert這三條指令在沒有網絡的情況下也可以執行的,原因是svn在本地的.svn中保留了本地版本的原始拷貝。

   簡寫:svn st

  7、删除檔案

  svn delete path -m "delete test fle"

  例如:svn delete svn://192.168.1.1/pro/domain/test.php -m "delete test file"

  或者直接svn delete test.php 然後再svn ci -m \'delete test file‘,推薦使用這種

  簡寫:svn (del, remove, rm)

    8、檢視日志

       svn log path

       例如:svn log test.php 顯示這個檔案的所有修改記錄,及其版本号的變化

   9、檢視檔案詳細資訊

     svn info path

     例如:svn info test.php

   10、比較差異

      svn diff path(将修改的檔案與基礎版本比較)

      例如:svn diff test.php

       svn diff -r m:n path(對版本m和版本n比較差異)

       例如:svn diff -r 200:201 test.php

      簡寫:svn di

   11、将兩個版本之間的差異合并到目前檔案

      svn merge -r m:n path

      例如:svn merge -r 200:205 test.php(将版本200與205之間的差異合并到目前檔案,但是一般都會産生沖突,需要處理一下)

   12、SVN 幫助

      svn help

      svn help ci

  13、版本庫下的檔案和目錄清單

      svn list path

      顯示path目錄下的所有屬于版本庫的檔案和目錄

      簡寫:svn ls 

    14、建立納入版本控制下的新目錄

    svn mkdir: 建立納入版本控制下的新目錄。

    用法: 1、mkdir PATH...

       2、mkdir URL...

    15、恢複本地修改

   svn revert: 恢複原始未改變的工作副本檔案 (恢複大部份的本地修改)。revert:

   用法: revert PATH...

   注意: 本子指令不會存取網絡,并且會解除沖突的狀況。但是它不會恢複

        被删除的目錄

    16、代碼庫URL變更

    svn switch (sw): 更新工作副本至不同的URL。

    用法: 1、switch URL [PATH]

          2、switch --relocate FROM TO [PATH...]

          1、更新你的工作副本,映射到一個新的URL,其行為跟“svn update”很像,也會将

             伺服器上檔案與本地檔案合并。這是将工作副本對應到同一倉庫中某個分支或者标記的

             方法。

          2、改寫工作副本的URL中繼資料,以反映單純的URL上的改變。當倉庫的根URL變動

             (比如方案名或是主機名稱變動),但是工作副本仍舊對映到同一倉庫的同一目錄時使用

             這個指令更新工作副本與倉庫的對應關系。

   17、解決沖突

       svn resolved: 移除工作副本的目錄或檔案的“沖突”狀态。

       用法: resolved PATH...

       注意: 本子指令不會依文法來解決沖突或是移除沖突标記;它隻是移除沖突的

       相關檔案,然後讓 PATH 可以再次送出。

    18、輸出指定檔案或URL的内容。

    svn cat 目标[@版本]...如果指定了版本,将從指定的版本開始查找。

    svn cat -r PREV filename > filename (PREV 是上一版本,也可以寫具體版本号,這樣輸出結果是可以送出的)

svn的基本使用方法