版本控制系統(Version Control System - VCS)
版本控制系統(VCS)最基本的功能是版本管理。所謂版本控制,意思就是在文件的修改歷程中保留修改歷史,讓你可以方便地撤銷之前對文件的修改操作。
①:基本功能(版本管理)
當我們在編輯文件的時候誤改或者誤刪的時候,我們會通過ctrl+z來撤銷自己的操作,回到前一步甚至前幾十步的操作,版本控制也有這樣一個功能,它可以使你的文件,目錄,項目很容易回到前幾個版本,但是這里說的git不會自動幫你記錄你的每一次修改操作,它只會記錄你主動提交
到版本倉庫的文件或者項目。
②:中央倉庫(多人合作開發)
版本控制系統可以幫你記錄任何一個項目的版本,但是在實際開發中,一個項目往往由許多人一起共同開發,所以版本控制系統就提供了一個中心倉庫來存儲所有人共同開發的代碼,所有人改動后上傳的代碼都會被中心倉庫記錄,我們可以很方便的查看每個人的更改記錄,也可以很方便的回退到以前的任何一個版本。
所以根據上面所說的
版本控制
、主動提交
、中央倉庫
這三個要素,共同構成了版本控制系統(VCS)的核心:開發團隊中的每個人向中央倉庫主動提交自己的改動和同步別人的改動,并在需要的時候查看和操作歷史版本,這就是版本控制系統。
集中式版本控制(CVCS)和分布式版本控制(DVCS)
集中化的版本控制系統(Centralized Version Control Systems,簡稱 CVCS)。 這類系統,諸如 CVS、Subversion 以及 Perforce 等,都有一個單一的集中管理的服務器,保存所有文件的修訂版本,而協同工作的人們都通過客戶端連到這臺服務器,取出最新的文件或者提交更新。
集中式版本控制雖然簡單,但是也存在很大的風險,當所有人都依賴這臺中央電腦的時候,這臺電腦崩了,所有人都會在這臺電腦恢復之前不能開發,如果這臺電腦只是單純的崩了,好了之后大家又都可以使用,當這臺電腦磁盤壞了,所有數據都沒了,那就損失大了,沒有一個人有完整的代碼,所以這樣存在很大的風險。
分布式版本控制系統(Distributed Version Control System,簡稱 DVCS)。 在這類系統中,像 Git、Mercurial、Bazaar 以及 Darcs 等,客戶端并不只提取最新版本的文件快照,而是把代碼倉庫完整地鏡像下來。 這么一來,任何一處協同工作用的服務器發生故障,事后都可以用任何一個鏡像出來的本地倉庫恢復。 因為每一次的克隆操作,實際上都是一次對代碼倉庫的完整備份。
所以在分布式版本控制系統中,即使中央倉庫沒了 ,每個人本地倉庫中都會有一份完整的代碼,
但是分布式也有缺點:
- 由于每一個機器都有完整的本地倉庫,所以初次獲取項目(Git clone)的時候會比較耗時;
- 由于每個機器都有完整的本地倉庫,所以本地占用的存儲比中央式 (CVCS) 要高。
Git,Github,以及Gitlab
才接觸這些東西的時候是相當懵的,根本不知道這些都是干嘛的 ,現在想想也把它們都記錄下來吧。
Git:
分布式版本控制系統,記錄文件或者項目的每一次修改。
GitHub:
是2008年由Ruby on Rails編寫而成。GitHub同時提供付費賬戶和免費賬戶。這兩種賬戶都可以創建公開的代碼倉庫,但是付費賬戶也可以創建私有的代碼倉庫。我們可以通過Git命令代碼存放在github倉庫中。
Gitlab:
GitLab擁有GitHub擁有的一切,但他擁有更多——讓團隊對它們的repositories擁有更多的控制,它的特色:
- 非常便捷的用戶界面,在同一界面上獲取到:projects,最近的projects,用戶,最近的用戶,群組和狀態;
- 允許設置倉庫權限是公用的還是私有的;
- “Snippet support”讓用戶分享一個project的部分代碼,而不是整個project。
- 受保護的分支是一種提升代碼安全性的新方法,它們允許用戶設置project的獲取權限,所以一個團隊中只有特定的人可以push,force push或者刪除一個分支的代碼。
- Authentication levels更進一步的提升安全性,允許用戶給人讀寫以外的權限。舉例來說,你可以給一個組員跟蹤變動的權限卻不給他獲取代碼的權限。
- 你可以設置獲取到團隊的整體的改進進度,而不是你個人的進度。
- 開發者通過打上“仍在進行中”狀態標簽讓其他成員知道代碼沒有完成,從而阻止未完成的代碼合并到其他的代碼中。
- “innersourcing”公司的資源如果員工不再權限范圍內,將不知道這個資源的存在。