## 什么是版本控制
版本控制(Revision control)是一種在開發的過程中用于管理我們對文件、目錄或工程等內容的修改歷史,方便查看更改歷史記錄,備份以便恢復以前的版本的軟件工程技術。
* 實現跨區域多人協同開發
* 追蹤和記載一個或者多個文件的歷史記錄
* 組織和保護你的源代碼和文檔
* 統計工作量
* 并行開發、提高開發效率
* 跟蹤記錄整個軟件的開發過程
* 減輕開發人員的負擔,節省時間,同時降低人為錯誤
簡單說就是用于管理多人協同開發項目的技術。
沒有進行版本控制或者版本控制本身缺乏正確的流程管理,在軟件開發過程中將會引入很多問題,如軟件代碼的一致性、軟件內容的冗余、軟件過程的事物性、軟件開發過程中的并發性、軟件源代碼的安全性,以及軟件的整合等問題。
無論是工作還是學習,或者是自己做筆記,都經歷過這樣一個階段!我們就迫切需要一個版本控制工具!
## 常見的版本控制工具
我們學習的東西,一定是當下最流行的!
主流的版本控制器有如下這些:
* Git
* SVN(Subversion)
* CVS(Concurrent Versions System)
* VSS(Micorosoft Visual SourceSafe)
* TFS(Team Foundation Server)
* Visual Studio Online
版本控制產品非常的多(Perforce、Rational ClearCase、RCS(GNU Revision Control System)、Serena Dimention、SVK、BitKeeper、Monotone、Bazaar、Mercurial、SourceGear Vault),現在影響力最大且使用最廣泛的是Git與SVN
## 版本控制分類
1、本地版本控制
記錄文件每次的更新,可以對每個版本做一個快照,或是記錄補丁文件,適合個人用,如RCS。

2、集中版本控制 ?SVN
所有的版本數據都保存在服務器上,協同開發者從服務器上同步更新或上傳自己的修改

所有的版本數據都存在服務器上,用戶的本地只有自己以前所同步的版本,如果不連網的話,用戶就看不到歷史版本,也無法切換版本驗證問題,或在不同分支工作。而且,所有數據都保存在單一的服務器上,有很大的風險這個服務器會損壞,這樣就會丟失所有的數據,當然可以定期備份。代表產品:SVN、CVS、VSS
3、分布式版本控制 Git
每個人都擁有全部的代碼!安全隱患!
所有版本信息倉庫全部同步到本地的每個用戶,這樣就可以在本地查看所有版本歷史,可以離線在本地提交,只需在連網時push到相應的服務器或其他用戶那里。由于每個用戶那里保存的都是所有的版本數據,只要有一個用戶的設備沒有問題就可以恢復所有的數據,但這增加了本地存儲空間的占用。
不會因為服務器損壞或者網絡問題,造成不能工作的情況!

## Git與SVN的主要區別
SVN是集中式版本控制系統,版本庫是集中放在中央服務器的,而工作的時候,用的都是自己的電腦,所以首先要從中央服務器得到最新的版本,然后工作,完成工作后,需要把自己做完的活推送到中央服務器。集中式版本控制系統是必須聯網才能工作,對網絡帶寬要求較高。
Git是分布式版本控制系統,沒有中央服務器,每個人的電腦就是一個完整的版本庫,工作的時候不需要聯網了,因為版本都在自己電腦上。協同的方法是這樣的:比如說自己在電腦上改了文件A,其他人也在電腦上改了文件A,這時,你們兩之間只需把各自的修改推送給對方,就可以互相看到對方的修改了。Git可以直接看到更新了哪些代碼和文件!
Git是目前世界上最先進的分布式版本控制系統。
聊聊Git的歷史
同生活中的許多偉大事物一樣,Git 誕生于一個極富紛爭大舉創新的年代。
Linux 內核開源項目有著為數眾廣的參與者。絕大多數的 Linux 內核維護工作都花在了提交補丁和保存歸檔的繁瑣事務上(1991-2002年間)。到 2002 年,整個項目組開始啟用一個專有的分布式版本控制系統 BitKeeper 來管理和維護代碼。
Linux社區中存在很多的大佬!破解研究 BitKeeper !
到了 2005 年,開發 BitKeeper 的商業公司同 Linux 內核開源社區的合作關系結束,他們收回了 Linux 內核社區免費使用 BitKeeper 的權力。這就迫使 Linux 開源社區(特別是 Linux 的締造者 Linus Torvalds)基于使用 BitKeeper 時的經驗教訓,開發出自己的版本系統。(2周左右!) 也就是后來的 Git!
Git是免費、開源的,最初Git是為輔助 Linux 內核開發的,來替代 BitKeeper!
下載git如果很慢的話可以使用鏡像下載:[http://npm.taobao.org/mirrors/git-for-windows/](http://npm.taobao.org/mirrors/git-for-windows/)
- Python學習
- Python基礎
- Python初識
- 列表生成式,生成器,可迭代對象,迭代器詳解
- Python面向對象
- Python中的單例模式
- Python變量作用域、LEGB、閉包
- Python異常處理
- Python操作正則
- Python中的賦值與深淺拷貝
- Python自定義CLI三方庫
- Python并發編程
- Python之進程
- Python之線程
- Python之協程
- Python并發編程與IO模型
- Python網絡編程
- Python之socket網絡編程
- Django學習
- 反向解析
- Cookie和Session操作
- 文件上傳
- 緩存的配置和使用
- 信號
- FBV&&CBV&&中間件
- Django補充
- 用戶認證
- 分頁
- 自定義搜索組件
- Celery
- 搭建sentry平臺監控
- DRF學習
- drf概述
- Flask學習
- 項目拆分
- 三方模塊使用
- 爬蟲學習
- Http和Https區別
- 請求相關庫
- 解析相關庫
- 常見面試題
- 面試題
- 面試題解析
- 網絡原理
- 計算機網絡知識簡單介紹
- 詳解TCP三次握手、四次揮手及11種狀態
- 消息隊列和數據庫
- 消息隊列之RabbitMQ
- 數據庫之Redis
- 數據庫之初識MySQL
- 數據庫之MySQL進階
- 數據庫之MySQL補充
- 數據庫之Python操作MySQL
- Kafka常用命令
- Linux學習
- Linux基礎命令
- Git
- Git介紹
- Git基本配置及理論
- Git常用命令
- Docker
- Docker基本使用
- Docker常用命令
- Docker容器數據卷
- Dockerfile
- Docker網絡原理
- docker-compose
- Docker Swarm
- HTML
- CSS
- JS
- VUE