SVN

SVN

主要內容

SVN介紹

簡介

​ SVN全稱Subversion,是一個開放源代碼的版本控制系統,Subversion 在 2000 年由 CollabNet Inc 開發,如今發展成爲 Apache 軟件基金會的一個項目,一樣是一個豐富的開發者和用戶社區的一部分。html

​ SVN是一個開放源代碼的版本控制系統,管理着隨時間改變的數據。這些數據放置在一箇中央資料檔案庫(repository) 中。 這個檔案庫很像一個普通的文件服務器, 不過它會記住每一次文件的變更。 這樣你就能夠把檔案恢復到舊的版本, 或是瀏覽文件的變更歷史。說得簡單一點SVN就是用於多我的共同開發同一個項目,共用資源的目的程序員

主要做用

  1. 目錄版本控制

    Subversion 實現了一個 「虛擬」 的版本控管文件系統, 可以依時間跟蹤整個目錄的變更。 目錄和文件都能進行版本控制。安全

  2. 真實的版本歷史

    Subversion中,能夠增長(add)、刪除(delete)、複製(copy)和重命名(rename),不管是文件仍是目錄。全部的新加的文件都從一個新的、乾淨的版本開始。服務器

  3. 自動提交

    一個提交動做,不是所有更新到了檔案庫中,就是徹底不更新。這容許開發人員以邏輯區間創建並提交變更,以防止當部分提交成功時出現的問題。svn

    this

基本概念

  • Repository(源代碼庫):源代碼統一存放的地方
  • Checkout(提取):當你手上沒有源代碼的時候,你須要從repository checkout一份
  • Commit(提交):當你已經修改了代碼,你就須要Commit到repository
  • Update (更新):當你已經Checkout了一份源代碼, Update後就能夠和Repository上的源代碼同步

工做流程

開始新一天的工做.net

一、從服務器下載項目組最新代碼。(Checkout
二、若是已經Checkout而且有人已Commit了代碼,你能夠更新以得到最新代碼。(Update開放源代碼

三、進入本身的分支,進行工做,每隔一個小時向服務器本身的分支提交一次代碼(不少人都有這個習慣。由於有時候本身對代碼改來改去,最後又想還原到前一個小時的版本,或者看看前一個小時本身修改了哪些代碼,就須要這樣作了)。(Commit版本控制

四、下班時間快到了,把本身的分支合併到服務器主分支上,一天的工做完成,並反映給服務器。(Commitcode

注意:若是兩個程序員同時修改了同一個文件 _SVN能夠合併這兩個程序員的改動,實際上SVN管理源代碼是以行爲單位的,就是說兩個程序員只要不是修改了同一行程序,SVN都會自動合併兩種修改。若是是同一行,SVN會提示文件Confict, 衝突,須要手動確認。_

生命週期

建立版本庫

​ 版本庫至關於一個集中的空間,用於存放開發者全部的工做成果。版本庫不只能存放文件,還包括了每次修改的歷史,即每一個文件的變更歷史。

​ Create 操做是用來建立一個新的版本庫。大多數狀況下這個操做只會執行一次。當你建立一個新的版本庫的時候,你的版本控制系統會讓你提供一些信息來標識版本庫,例如建立的位置和版本庫的名字。

檢出

​ Checkout 操做是用來從版本庫建立一個工做副本。工做副本是開發者私人的工做空間,能夠進行內容的修改,而後提交到版本庫中。

更新

​ 顧名思義,update 操做是用來更新版本庫的。這個操做將工做副本與版本庫進行同步。因爲版本庫是由整個團隊共用的,當其餘人提交了他們的改動以後,你的工做副本就會過時。

​ 讓咱們假設 Tom 和 Jerry 是一個項目的兩個開發者。他們同時從版本庫中檢出了最新的版本並開始工做。此時,工做副本是與版本庫徹底同步的。而後,Jerry 很高效的完成了他的工做並提交了更改到版本庫中。

​ 此時 Tom 的工做副本就過時了。更新操做將會從版本庫中拉取 Jerry 的最新改動並將 Tom 的工做副本進行更新。

執行變動

​ 當檢出以後,你就能夠作不少操做來執行變動。編輯是最經常使用的操做。你能夠編輯已存在的文件來,例如進行文件的添加/刪除操做。

​ 你能夠添加文件/目錄。可是這些添加的文件目錄不會馬上成爲版本庫的一部分,而是被添加進待變動列表中,直到執行了 commit 操做後纔會成爲版本庫的一部分。

​ 一樣地你能夠刪除文件/目錄。刪除操做馬上將文件從工做副本中刪除掉,但該文件的實際刪除只是被添加到了待變動列表中,直到執行了 commit 操做後纔會真正刪除。

​ Rename 操做能夠更改文件/目錄的名字。"移動"操做用來將文件/目錄從一處移動到版本庫中的另外一處。

複查變化

​ 當你檢出工做副本或者更新工做副本後,你的工做副本就跟版本庫徹底同步了。可是當你對工做副本進行一些修改以後,你的工做副本會比版本庫要新。在 commit 操做以前複查下你的修改是一個很好的習慣。

​ Status 操做列出了工做副本中所進行的變更。正如咱們以前提到的,你對工做副本的任何改動都會成爲待變動列表的一部分。Status 操做就是用來查看這個待變動列表。

​ Status 操做只是提供了一個變更列表,但並不提供變更的詳細信息。你能夠用 diff 操做來查看這些變更的詳細信息。

修復錯誤

​ 咱們來假設你對工做副本作了許多修改,可是如今你不想要這些修改了,這時候 revert 操做將會幫助你。

​ Revert 操做重置了對工做副本的修改。它能夠重置一個或多個文件/目錄。固然它也能夠重置整個工做副本。在這種狀況下,revert 操做將會銷燬待變動列表並將工做副本恢復到原始狀態。

解決衝突

​ 合併的時候可能會發生衝突。Merge 操做會自動處理能夠安全合併的東西。其它的會被當作衝突。例如,「hello.c」 文件在一個分支上被修改,在另外一個分支上被刪除了。這種狀況就須要人爲處理。Resolve 操做就是用來幫助用戶找出衝突並告訴版本庫如何處理這些衝突。

提交更改

​ Commit 操做是用來將更改從工做副本到版本庫。這個操做會修改版本庫的內容,其它開發者能夠經過更新他們的工做副原本查看這些修改。

​ 在提交以前,你必須將文件/目錄添加到待變動列表中。列表中記錄了將會被提交的改動。當提交的時候,咱們一般會提供一個註釋來講明爲何會進行這些改動。這個註釋也會成爲版本庫歷史記錄的一部分。Commit 是一個原子操做,也就是說要麼徹底提交成功,要麼失敗回滾。用戶不會看到成功提交一半的狀況。

安裝配置

下載

https://www.visualsvn.com/downloads/ (服務器)

http://tortoisesvn.net/downloads.html (客戶端)

最後下載完成的安裝包

安裝

安裝 VisualSVN Server

  1. 雙擊安裝程序 VisualSVN-Server-4.2.1-x64.msi
  2. 勾選複選框選擇贊成,而後選擇 Next,選擇 Upgrade
  3. 選擇默認配置,選擇 Next
  4. 設置服務器的安裝路徑、資源的存放目錄及端口
  5. 使用默認配置,選擇Next
  6. 若是出現這個彈窗,選擇 Ignore 忽略便可
  7. 等待安裝,安裝完成後可勾選複選框,而後選擇 Finish
  8. 出現以下窗口,則表示安裝成功

安裝 TortoiseSVN

  1. 雙擊安裝程序 TortoiseSVN-1.13.1.28686-x64-svn-1.13.0.msi
  2. 選擇 Next,而後勾選 command line client tools,選擇 Next
  3. 設置TortoiseSVN的安裝路徑,勾選 command line client tools
  4. 進入到TortoiseSVN軟件使用協議界面,直接選擇 Install 進行安裝
  5. 安裝完成以後,直接選擇 Finish 便可
  6. 在任意空白地方,右鍵,出現以下內容,則表示安裝成功

配置

​ 說明:服務器端須要提供IP、端口、賬號、密碼供客戶端使用。即有以下配置

設置IP和端口

  1. 打開服務器,點擊 VisualSVN Server,選擇 Configure authentication options…
  2. 設置Server name ,建議使用當前IP

    Server name的值能夠設置爲:
        1.127.0.0.1 (只能本地本身訪問)
        2.電腦用戶名(只能本地本身訪問)
        3.當前IP(可以拼通IP的用戶都可訪問)
    Server Port使用默認值便可
    
    查看當前IP:
        打開dos窗口(Windows+R鍵),輸入ipconfig,按回車

新建帳號密碼

  1. 右鍵左側菜單 User,選擇 Create User
  2. 設置用戶的帳戶和密碼

新建分組

  1. 選擇 Group 右鍵,選擇 Create Group…
  2. 設置分組名稱,及爲分組添加用戶

SVN使用

新建版本庫

  1. 選擇 Repositories 右鍵,選擇 Create New Repository…
  2. 選擇默認設置,選擇下一步,設置倉庫名稱
  3. 設置倉庫目錄 (選擇任意一個選項均可)
  4. 設置倉庫的訪問權限(這裏設置全部svn用戶都有讀/寫權限)
  5. 倉庫建立完成

簽入項目到SVN(import)

  1. 拷貝遠程倉庫的地址
  2. 選擇任意項目,右鍵選擇 TortoiseSVN,選擇 import
  3. 將上一步拷貝的倉庫地址粘貼到地址欄
  4. 選擇永久接受
  5. 輸入用戶帳號和密碼
  6. 導入成功
  7. 倉庫右鍵,選擇刷新,在服務器中看到的效果

檢索項目(check out)

  1. 複製要下載的項目的遠程地址
  2. 在須要檢索項目的目錄中,右鍵選擇 SVN Checkout…
  3. 輸入遠程地址,設置項目的存放位置
  4. 檢索完成

提交代碼(commit)

  1. 新建文件,右鍵選擇 TortoiseSVN,選擇 Add,將文件添加到版本庫列表
  2. 再次點擊文件,右鍵,會出現 SVN Commit…
  3. 提交成功

更新代碼(update)

  1. 若是當前資源不是最新版本,則可在項目中空白地方右鍵,選擇 SVN Update
  2. 更新成功

版本衝突問題

版本衝突緣由

​ 假設A、B兩個用戶都在版本號爲100的時候,更新了kingtuns.txt這個文件,A用戶在修改完成以後提交kingtuns.txt到服務器,這個時候提交成功,這個時候kingtuns.txt文件的版本號已經變成101了。同時B用戶在版本號爲100的kingtuns.txt文件上做修改,修改完成以後提交到服務器時,因爲不是在當前最新的101版本上做的修改,因此致使提交失敗。此時用戶B去更新文件,若是B用戶和A用戶修改了文件的同一行代碼,就會出現衝突

版本衝突現象

​ 衝突發生時,subversion會在當前工做目錄中保存全部的目標文件版本[上次更新版本、當前獲取的版本(即別人提交的版本)、本身更新的版本、目標文件]。

假設文件名是kingtuns.txt

​ 對應的文件名分別是:

​ kingtuns.txt.r101

​ kingtuns.txt.r102

​ kingtuns.txt.mine

​ kingtuns.txt

​ 同時在目標文件中標記來自不一樣用戶的更改。

版本衝突解決

場景
  1. 如今A、B兩個用戶都更新項目文件到本地。

    用戶A

    用戶B

  2. 項目中的 hello.txt 文件原始內容爲:
  3. A用戶修改文件,添加內容 「A用戶修改內容」 ,完成後提交到服務器
  4. B用戶修改文件,添加內容 「B用戶修改內容」 ,完成後提交到服務器
  5. B用戶提交更新至服務器時提示以下
  6. B用戶將文件提交至服務器時,提示版本過時:首先應該從版本庫更新版本,而後去解決衝突,衝突解決後要執行svn resolved(解決),而後在簽入到版本庫。在衝突解決以後,須要使用svn resolved(解決)來告訴subversion衝突解決,這樣才能提交更新。
解決衝突的三種選擇
  1. 放棄本身的更新,使用svn revert(回滾),而後提交。在這種方式下不須要使用svn resolved(解決)
  2. 放棄本身的更新,使用別人的更新。使用最新獲取的版本覆蓋目標文件,執行resolved filename並提交(選擇文件—右鍵—解決)。
  3. 手動解決:衝突發生時,經過和其餘用戶溝通以後,手動更新目標文件。而後執行resolved filename來解除衝突,最後提交。
解決衝突
  1. 在B用戶當前目錄下,右鍵選擇"SVN Update",執行「update」(更新)操做
  2. B用戶中的 Hello.txt 文件出現衝突
  3. 在衝突的文件上(選中文件–右鍵菜單—TortoiseSVN—Edit conflicts(解決衝突))
  4. 打開編輯衝突的窗口

    Theirs窗口爲服務器上當前最新版本
    Mine窗口爲本地修改後的版本
    Merged窗口爲合併後的文件內容顯示
  5. 若是要使用服務器版本,在Theirs窗口選中差別內容,右鍵,選擇Use this text block(使用這段文本塊)。

    同理若是要使用本地版本,在協商後,在Mine窗口右鍵,選擇Use this text block(使用這段文本塊)。

  6. 修改完成後,選擇 「Mark as resolved」(標記爲解決),而後選擇"Save"(保存文件),關閉窗口便可
  7. 此時,當前衝突已解決,可再次選擇 "SVN Commit"提交文件

    注:也可先不標記爲解決,直接保存文件後,在B用戶的衝突目錄下,選中文件—右鍵菜單—TortoiseSVN—Resolved(解決)。而後再提交文件。

如何下降衝突解決的複雜度
  1. 當文檔編輯完成後,儘快提交,頻繁的提交/更新能夠下降在衝突發生的機率,以及發生時解決衝突的複雜度。
  2. 在提交時,寫上明確的message,方便之後查找用戶更新的緣由,畢竟隨着時間的推移,對當初更新的緣由有可能會遺忘
  3. 養成良好的使用習慣,使用SVN時每次都是先提交,後更新。天天早上打開後,首先要從版本庫獲取最新版本。天天下班前必須將已經編輯過的文檔都提交到版本庫。

Idea集成使用SVN

配置SVN環境

  1. File —> Other Settings(全局配置;Settings是局部配置) —> Version Control —> Subversion
  2. 配置svn

    找不到svn.exe文件,TortoiseSVN的bin目錄下面沒有svn.exe
    
    之因此沒有是由於安裝TortoiseSVN的時候沒有勾選指定安裝項,添加command line client tools
  3. 重啓Idea

檢索項目

  1. 選擇 VCS —> Checkout from Version Control —> Subversion
  2. 添加遠程倉庫中項目的URL
  3. 點擊添加的URL,選擇 Checkout
  4. 選擇檢索的項目的存放位置
  5. 選擇Destination,根據本身的偏好選擇,其餘配置默認,單擊 OK
  6. 選擇 1.8 Format,點擊 OK
  7. 已經check out一個項目,是否要打開,選擇 Yes
  8. 選擇 Add
  9. 此時,項目就能夠與遠程倉庫關聯

提交代碼

  1. 選擇 VCS —> Commit…
  2. 選擇須要提交的文件,填寫提交信息,選擇 Commit
  3. 提交成功後,會在Idea最下面顯示提交狀態

​ 注:項目提交前,最好先更新,而後再提交。

更新代碼

  1. 選擇 VCS —> Update Project…
  2. 默認便可,直接選擇 OK
  3. 更新成功的提示信息

導入項目

  1. 選擇 VCS —> Import into Version Control —> Import into Subversion
  2. 選擇 「+」 添加項目導入的地址(可手動添加一個文件夾,項目中的文件會放置在該文件夾中,文件名自定義)
  3. 選擇要導入的路徑,選擇 Import
  4. 選擇要導入的項目,點擊 OK
  5. 檢查導入的路徑,填寫導入信息,選擇 OK
  6. 在遠程倉庫中檢查是否導入成功便可。

版本衝突問題

  1. 若是未更新,就提交資源(有其餘用戶也提交過資源),則提交失敗
  2. 此時,執行更新操做,將其餘人提交過的資源更新到本地,會提示衝突
  3. 一般選擇合併,再選擇須要保留的代碼,選擇好以後選擇 Apply
  4. 提示更新成功
  5. 再次選擇提交,成功解決衝突
相關文章
相關標籤/搜索