Git學習01 版本控制

2022-08-01 08:36:08 字數 2746 閱讀 3862

版本控制是一種記錄乙個或若干檔案內容變化,以便將來查閱特定版本修訂情況的系統。

主要可以分為以下三類:

1.1 本地版本控制系統

許多人習慣用複製整個專案目錄的方式來儲存不同的版本,或許還會改名加上備份時間以示區別。這麼做唯一的好處就是簡單。不過壞處也不少:有時候會混淆所在的工作目錄,一旦弄錯檔案丟了資料就沒法撤銷恢復。

為了解決這個問題,人們很久以前就開發了許多種本地版本控制系統,大多都是採用某種簡單的資料庫來記錄檔案的歷次更新差異(見圖 1-1)。

圖 1-1. 本地版本控制系統

其中最流行的一種叫做 rcs,現今許多計算機系統上都還看得到它的蹤影。甚至在流行的 mac os x 系統上安裝了開發者工具包之後,也可以使用 rcs 命令。它的工作原理基本上就是儲存並管理檔案補丁(patch)。檔案補丁是一種特定格式的文字檔案,記錄著對應檔案修訂前後的內容變化。所以,根據每次修訂後的補丁,rcs 可以通過不斷打補丁,計算出各個版本的檔案內容。

1.2 集中化的版本控制系統

接下來人們又遇到乙個問題,如何讓在不同系統上的開發者協同工作?於是,集中化的版本控制系統( centralized version control systems,簡稱 cvcs )應運而生。這類系統,諸如 cvs,subversion 以及 perforce 等,都有乙個單一的集中管理的伺服器,儲存所有檔案的修訂版本,而協同工作的人們都通過客戶端連到這台伺服器,取出最新的檔案或者提交更新。多年以來,這已成為版本控制系統的標準做法(見圖 1-2)。

圖 1-2. 集中化的版本控制系統

這種做法帶來了許多好處,特別是相較於老式的本地 vcs 來說。現在,每個人都可以在一定程度上看到專案中的其他人正在做些什麼。而管理員也可以輕鬆掌控每個開發者的許可權,並且管理乙個 cvcs 要遠比在各個客戶端上維護本地資料庫來得輕鬆容易。

事分兩面,有好有壞。這麼做最顯而易見的缺點是**伺服器的單點故障。如果宕機一小時,那麼在這一小時內,誰都無法提交更新,也就無法協同工作。要是**伺服器的磁碟發生故障,碰巧沒做備份,或者備份不夠及時,就會有丟失資料的風險。最壞的情況是徹底丟失整個專案的所有歷史更改記錄,而被客戶端偶然提取出來的儲存在本地的某些快照資料就成了恢復資料的希望。但這樣的話依然是個問題,你不能保證所有的資料都已經有人事先完整提取出來過。本地版本控制系統也存在類似問題,只要整個專案的歷史記錄被儲存在單一位置,就有丟失所有歷史更新記錄的風險。

1.3 分布式版本控制系統

於是分布式版本控制系統( distributed version control system,簡稱 dvcs )面世了。在這類系統中,像 git,mercurial,bazaar 以及 darcs 等,客戶端並不只提取最新版本的檔案快照,而是把**倉庫完整地映象下來。這麼一來,任何一處協同工作用的伺服器發生故障,事後都可以用任何乙個映象出來的本地倉庫恢復。因為每一次的提取操作,實際上都是一次對**倉庫的完整備份(見圖 1-3)。

圖 1-3. 分布式版本控制系統

更進一步,許多這類系統都可以指定和若干不同的遠端**倉庫進行互動。籍此,你就可以在同乙個專案中,分別和不同工作小組的人相互協作。你可以根據需要設定不同的協作流程,比如層次模型式的工作流,而這在以前的集中式系統中是無法實現的。

svn(subversion)是集中式管理的版本控制器,而git是分布式管理的版本控制器!這是兩者之間最核心的區別。

svn只有乙個單一的集中管理的伺服器,儲存所有檔案的修訂版本,而協同工作的人們都通過客戶端連到這台伺服器,取出最新的檔案或者提交更新。

git每乙個終端都是乙個倉庫,客戶端並不只提取最新版本的檔案快照,而是把原始的**倉庫完整地映象下來。每一次的提取操作,實際上都是一次對**倉庫的完整備份。

集中式版本控制系統最大的毛病就是必須聯網才能工作,如果在區域網內還好,頻寬夠大,速度夠快,可如果在網際網路上,遇到網速慢的話,可能提交乙個10m的檔案就需要5分鐘,這是很頭疼的事情。

首先,分布式版本控制系統根本沒有「**伺服器」,每個人的電腦上都是乙個完整的版本庫,這樣,你工作的時候,就不需要聯網了,因為版本庫就在你自己的電腦上。既然每個人電腦上都有乙個完整的版本庫,那多個人如何協作呢?比方說你在自己電腦上改了檔案a,你的同事也在他的電腦上改了檔案a,這時,你們倆之間只需把各自的修改推送給對方,就可以互相看到對方的修改了。

和集中式版本控制系統相比,分布式版本控制系統的安全性要高很多,因為每個人電腦裡都有完整的版本庫,某乙個人的電腦壞掉了不要緊,隨便從其他人那裡複製乙個就可以了。而集中式版本控制系統的**伺服器要是出了問題,所有人都沒法幹活了。

在實際使用分布式版本控制系統的時候,其實很少在兩人之間的電腦上推送版本庫的修改,因為可能你們倆不在乙個區域網內,兩台電腦互相訪問不了,也可能今天你的同事病了,他的電腦壓根沒有開機。因此,分布式版本控制系統通常也有一台充當「**伺服器」的電腦,但這個伺服器的作用僅僅是用來方便「交換」大家的修改,沒有它大家也一樣幹活,只是交換修改不方便而已。

《pro git》

Git學習筆記2 版本控制

1.版本回退 head 當前指標 head 表示向上一層 head n 表示向上n層 git reset hard head 返回到上乙個版本 git reset hard 94bf 返回到指定版本,94bf是指定版本的id穿梭前,用git log可以檢視提交歷史,以便確定要回退到哪個版本。要重返未...

Git學習使用(三) 版本控制

首先,要學會使用git status檢視git倉庫的狀態。我們先更改readme.txt檔案為 git is a distributed version control system.git is free software.接下來執行git status git status 位於分支 maste...

1 版本控制

1 本系列文章環境 os windows 8.1專業版 64位 ide eclipse 4.3 r2 kepler tools subversion 32位 setup subversion 1.8.13 x32.msi apache http server 32位 httpd 2.4.12 x86...