什么是版本控制?
這個之前有記錄過相關的內容
版本管理就是管理更新的歷史記錄,
它給我們提供了一些在軟體開發程序中必不可少的功能,例如:
- 記錄一款軟體添加或更改源代碼的程序
- 回滾到特定階段,恢復誤洗掉的檔案
- 合并多人協作的檔案等
- 多人協同,檔案傳輸
版本控制分類
- 集中式
- SVN
- 分布式
- Git
SVN
SVN 全稱 Apache Subversion,是一個開放源代碼的集中式版本管理系統,
在 2000 年由 CollabNet 開發,現已發展成為 Apache 軟體基金會的一個開源專案,
集中式
早期的版本管理就是以 Apache Subversion 為代表的集中式版本管理,
集中式版本管理將所有的資料集中存放在服務器中,這是有便于統一管理的優點,
但是一旦開發者所處的環境不能連接服務器,就無法獲取最新源代碼,開發也就無法進行,
服務器宕機時也是同樣的道理,而且萬一服務器故障導致資料丟失,
恐怕開發者就再也見不到最新的源代碼了,
簡而言之:
- 中央服務器好比是一個圖書館
- 你要改一本書,必須先從圖書館借出來(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 版本上作的修改,所以導致提交失敗,
良好的使用習慣就是,提交之前,先更新,
為了避免沖突,別人的檔案你最好不要動,
萬一你要修改公共的檔案或者是別人的檔案,
跟別人最好口頭溝通好,就是你改動的時候,
別人最好不要去改動,這樣才能最大程度上避免沖突的問題,
多人協作時,同個目錄或同個檔案需要不同成員共同開發,
這個時候 commit 和 update 就可能出現沖突,
- 兩個程式員只要不是修改了同一行程式,SVN 可以通過 update 自動合并修改
- 但是如果兩個程式員修改了同一行程式, SVN 會提示檔案 conflict,需要手動確定
如何解決?
第一種解決方法:手動合并沖突的內容
第二種解決方法:每次修改某個檔案的時候對檔案上鎖,這樣你在修改的程序中別人就無法更新這個檔案
建議:
- 一個檔案最好同一時間只被一個人修改提交
- 多跟團隊成員溝通
- 不要隨便去修改別人的檔案
版本管理使用建議
- 不要頻繁的提交版本
- 一般有比較成熟的功能模塊的時候,再去提交
- 修復了功能性 bug 的時候再去提交
- 提交的代碼最好無 bug
- 每次 commit 之前都要 update
- 因為你在編輯這個檔案的時候,可能比人已經編輯并提交了某個版本
- 所以先 update,目的是為了檢查一下服務器上有沒有最新版,如果有,直接更新
- 更新的程序中如果遇到沖突,不要慌,去手動解決
- 每次 commit 的時候都務必要寫提交日志
- 這個提交日志就好比你保存副本的時候加的一個標記
- 目的是為了日后做版本的回退查找以及查看記錄更新狀態
使用總結
- 版本控制管理系統
- 源代碼倉庫 repository
- 檢出代碼 checkout
- 更新最新源代碼 update
- 提交修改 commit
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/3068.html
標籤:其他
下一篇:git命令小匯總和github
