1. 程式人生 > >Git(1):思想及概念

Git(1):思想及概念

.com 永久 導致 回來 運算 image 提交 簡單的 設計

Git與其他版本控制軟件的差異及思想

直接記錄快照,而非差異比較

Git不保存這些前後變化的差異數據。實際上,Git 更像是把變化的文件作快照後,記錄在一個微型的文件系統中。每次提交更新時,它會縱覽一遍所有文件的指紋信息並對文件作一快照,然後保存一個指向這次快照的索引。為提高性能,若文件沒有變化,Git 不會再次保存,而只對上次保存的快照作一鏈接。Git 的工作方式就如下圖所示。

技術分享

近乎所有操作都是本地執行

在Git中的絕大多數操作都只需要訪問本地文件和資源,不用連網。Git 不用跑到外面的服務器上去取數據回來,而直接從本地數據庫讀取後展示給你看。所以任何時候你都可以馬上翻閱,無需等待。如果想要看當前版本的文件和一個月前的版本之間有何差異,Git 會取出一個月前的快照和當前文件作一次差異運算,而不用請求遠程服務器來做這件事,或是把老版本的文件拉到本地來作比較。

時刻保持數據完整性

在保存到 Git 之前,所有數據都要進行內容的校驗和(checksum)計算,並將此結果作為數據的唯一標識和索引。換句話說,不可能在你修改了文件或目錄之後,Git 一無所知。這項特性作為 Git 的設計哲學,建在整體架構的最底層。所以如果文件在傳輸時變得不完整,或者磁盤損壞導致文件數據缺失,Git 都能立即察覺。

基本概念

對於任何一個文件,在 Git 內都只有三種狀態:

已修改(modified):已修改表示修改了某個文件,但還沒有提交保存。

和已暫存(staged):把已修改的文件放在下次提交時要保存的清單中。

已提交(committed):已提交表示該文件已經被安全地保存在本地數據庫中了。

與其相對應的三個工作區域:

工作目錄:從項目中取出某個版本的所有文件和目錄,用以開始後續工作的叫做工作目錄。這些文件實際上都是從 Git 目錄中的壓縮對象數據庫中根據某個版本提取出來的,接下來就可以在工作目錄中對這些文件進行編輯。

暫存區域:暫存區域只不過是個簡單的文件,一般存放在.git/index中,所以我們把暫存區有時也叫作索引(index)。

本地倉庫:提交更新後,保存在暫存區域的文件快照永久轉儲到Git目錄中。Git的對象庫,實際位於".git/objects"目錄下,裏面包含了創建的各種對象及內容。當執行提交操作(git commit)時,暫存區的目錄樹寫到版本庫(對象庫)中。

技術分享

Git(1):思想及概念