有關版本控制--SVN

什麼是版本控制?

這個以前有記錄過相關的內容程序員

版本管理就是管理更新的歷史記錄,
它給咱們提供了一些在軟件開發過程當中必不可少的功能,例如:服務器

  • 記錄一款軟件添加或更改源代碼的過程
  • 回滾到特定階段,恢復誤刪除的文件
  • 合併多人協做的文件等
  • 多人協同,文件傳輸

版本控制分類

  • 集中式
    • SVN
  • 分佈式
    • Git

SVN

SVN 全稱 Apache Subversion,是一個開放源代碼的集中式版本管理系統。
在 2000 年由 CollabNet 開發,現已發展成爲 Apache 軟件基金會的一個開源項目。分佈式

集中式

早期的版本管理就是以 Apache Subversion 爲表明的集中式版本管理,
集中式版本管理將全部的數據集中存放在服務器中,這是有便於統一管理的優勢。
可是一旦開發者所處的環境不能鏈接服務器,就沒法獲取最新源代碼,開發也就沒法進行。
服務器宕機時也是一樣的道理,並且萬一服務器故障致使數據丟失,
恐怕開發者就再也見不到最新的源代碼了。svn

簡而言之:開放源代碼

  • 中央服務器比如是一個圖書館
  • 你要改一本書,必須先從圖書館借出來(checkout)
  • 而後回到家本身改,改完了,再放到圖書館(commit)

一些術語

  • 源代碼庫(repository):源代碼統一存放的地方
  • 檢出(checkout):當你手上沒有源代碼的時候,就須要從 responsive checkout 一份
  • 提交(commit):當你已經修改了代碼,就須要 commit 到 repository
  • 更新(update):當你已經 checkout 了一份源代碼,Update 一下就能夠和 repository 上的源代碼同步,你手上的代碼就會有最新的變動

使用 VisualSVN 搭建 SVN 服務器

安裝完畢以後,基本使用流程以下:版本控制

  • 建立用戶
  • 建立版本倉庫
  • 設定用戶權限

使用 TortoiseSVN 做爲 SVN 客戶端

SVN 客戶端:用戶經過SVN客戶端同SVN服務器交互日誌

TortoiseSVN 客戶端基本操做流程

  • 檢出項目:checkout
    • 在沒有源代碼的前提下,須要經過 tortoise-svn 客戶端下載
  • 提交修改:commit
    • 幫你記錄當前開發的軟件的狀態
  • 更新文件或目錄:update(更新)
    • 別的開發人員在已有源代碼的前提下能夠經過 update 更新服務器上最新的版本
  • 查看版本日誌:log(日誌)

關於衝突

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

良好的使用習慣就是,提交以前,先更新。開發

爲了不衝突,別人的文件你最好不要動,
萬一你要修改公共的文件或者是別人的文件,
跟別人最好口頭溝通好,就是你改動的時候,
別人最好不要去改動,這樣才能最大程度上避免衝突的問題。同步

多人協做時,同個目錄或同個文件須要不一樣成員共同開發,
這個時候 commit 和 update 就可能出現衝突。

  • 兩個程序員只要不是修改了同一行程序,SVN 能夠經過 update 自動合併修改
  • 可是若是兩個程序員修改了同一行程序, SVN 會提示文件 conflict,須要手動肯定

如何解決?

第一種解決方法:手動合併衝突的內容

第二種解決方法:每次修改某個文件的時候對文件上鎖,這樣你在修改的過程當中別人就沒法更新這個文件

建議:

  • 一個文件最好同一時間只被一我的修改提交
  • 多跟團隊成員溝通
  • 不要隨便去修改別人的文件

版本管理使用建議

  • 不要頻繁的提交版本
    • 通常有比較成熟的功能模塊的時候,再去提交
    • 修復了功能性 bug 的時候再去提交
    • 提交的代碼最好無 bug
  • 每次 commit 以前都要 update
    • 由於你在編輯這個文件的時候,可能比人已經編輯並提交了某個版本
    • 因此先 update,目的是爲了檢查一下服務器上有沒有最新版,若是有,直接更新
      • 更新的過程當中若是遇到衝突,不要慌,去手動解決
  • 每次 commit 的時候都務必要寫提交日誌
    • 這個提交日誌就比如你保存副本的時候加的一個標記
    • 目的是爲了往後作版本的回退查找以及查看記錄更新狀態

使用總結

  • 版本控制管理系統
  • 源代碼倉庫 repository
  • 檢出代碼 checkout
  • 更新最新源代碼 update
  • 提交修改 commit
相關文章
相關標籤/搜索