什麼是版本控制?
這個以前有記錄過相關的內容程序員
版本管理就是管理更新的歷史記錄,
它給咱們提供了一些在軟件開發過程當中必不可少的功能,例如:服務器
- 記錄一款軟件添加或更改源代碼的過程
- 回滾到特定階段,恢復誤刪除的文件
- 合併多人協做的文件等
- 多人協同,文件傳輸
版本控制分類
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