【Git操作系列】Git由淺入深之基本原理
來源:Git由淺入深之基本原理
作者:驚鴻三世(轉載已獲得作者許可,如需轉載請與原作者聯繫)
萬丈高樓平地起,萬事只有打好基礎,才能有所成就,學習亦是一樣。本篇開始介紹Git基礎工作理論,學完本篇,我們應該知道什麼是Git,Git是如何工作的,以及Git與SVN等分散式版本控制系統的主要區別。
什麼是Git
一言以蔽之,Git是一個分散式版本控制系統(DVCS),大家都知道,那它與其他的集中式版本控制系統,如SVN等有什麼差別呢?這就要從Git的特性開始介紹,介紹完,就清楚了Git是怎麼工作的,及他與SVN等的差別。
快照(Snapshots)與記錄變更(Differences)
Git與SVN最大的差別在於它們如何處理數據:
- SVN等大多數版本控制系統存儲的數據是一系列記錄項目文件變更的文件。
- Git存儲的數據則更像是一個微型文件系統的一系列快照,即快照流。
每次提交或保存當前項目狀態,Git都會生成一個當前所有文件狀態的快照,並存儲一個對該快照的引用;而且文件沒有發生變化時,Git不會重複保存快照,而只是鏈接到之前的標識文件。
也許,你可以把Git想像成一個小型文件系統,而不僅僅是一個版本控制系統,這有助於你比較Git與其他版本控制系統。
操作本地化
在傳統的VCS中,大多數操作都依賴於網路,特別在網路延遲高時,那種痛苦感,相信你是不想有第二次體驗的;而Git的大部分操作都是基於本地文件和資源的,而不需要通過網路從其他計算機獲取信息,Git將整個項目歷史保存在本地磁碟,使得大多數操作似乎沒有延遲感。
比如,需要查看項目歷史記錄時,Git不再需要從伺服器獲取,可以直接從本地磁碟讀取,操作很快;又或者我們需要查看某一文件在兩個不同時間點的區別,Git可以查詢該文件不同時間點的狀態,並計算出變更,而不需要從伺服器獲取不同版本文件或者請求伺服器計算它們點變更。即使與伺服器的連接斷開甚至網路斷線,也不會受太大限制,我們可以在本地對文件進行編輯,保存,然後等連接正常時再上傳,而在其他的版本控制系統,這些幾乎不可能。
健全性
Git在存儲任何數據前都會先計算並存儲其校驗和,隨後通過該校驗和,而不是文件名訪問存儲數據,這意味著Git可以探測到任何文件或目錄的變更,即使數據發生丟失,Git也能知道。
Git生成校驗和的機制叫做SHA-1哈希,為什麼通過該校驗和可以訪問到存儲數據呢?因為它是基於文件內容或目錄結構計算得出一個由40個十六進位字元組成的字元串,比如:24b9da6552252987aa493b52f8696cd6d3b00373。
操作數據
對數據進行版本管理,無非就是對數據進行增刪改並記錄,在傳統的VCS中,我們沒有提交至伺服器的任何新增文件或變更,都很容易就可以被錯誤刪除或再次修改,這時我們是無法找回之前需要提交的內容的;然而在Git中,只要我們在本地提交了項目當前的快照,幾乎不會出現數據丟失的情況,而且無論是否提交數據到伺服器我們都可以隨時找回之前保存過的內容或變更,即使在中途某次操作誤刪除或誤修改,因為Git中的幾乎所有操作,都是在向Git資料庫添加數據或變更記錄。
三種狀態
介紹到現在,終於進入本篇最重點的內容:Git的三種狀態。
在Git,文件可能有三種狀態:已提交(committed),已修改(modified),暫存(staged)
- 已提交(commited),說明數據已經存儲在本地資料庫;
- 已修改(modified),說明數據被修改,但是尚未存儲到本地資料庫;
- 暫存(staged),說明已標記將一個被修改的文件(當前版本)添加到待提交的快照中。
這三種狀態分別對應Git項目的三大區塊:Git目錄,工作目錄,暫存區。
- Git 目錄(repository),即Git存儲項目元數據和對象資料庫的地方,也就是我們克隆(clone)某項目倉庫時拷貝下的內容所在地;
- 工作目錄(working directory),即從項目某版本中檢出的當前所處分支,也就是從Git目錄資料庫中拉取的文件在本地磁碟保存所在地;
- 暫存區(staging area),即一個文件,通常包含在Git目錄中,存儲下一次需提交的內容,有時,它指向我們所說的「index」索引。
基本工作流程
我們使用Git時的一次基本工作流程如下:
- 從Git目錄,檢出分支到工作目錄
- 在工作目錄修改文件
- 暫存文件,將其添加到待提交快照
- 提交,將快照持久化提交到Git目錄
學完本篇,我們需要懂得什麼是Git,Git與傳統集中式版本控制系統的主要區別,及Git的基本工作流程,下一篇將詳細介紹Git的使用與指令。
上期回顧:
- 【Git操作系列】Git由淺入深之安裝與配置
- 【Git操作系列】Git由淺入深之版本控制系統
————————————————————————————————————————
在學習過程如果有任何疑問,請來極樂網(http://www.dreawer.com)提問,或者掃描下方二維碼,關注極樂官方微信,在平台下方留言。(點一下,可好玩兒了)
推薦閱讀:
※GitHub & Bitbucket & GitLab & Coding 的對比分析
※GIT 特性分支開發流程
※如何在mac下遠程搭建git伺服器?
TAG:Git |