Git 學習 第一節 基礎和原理

2021-07-30 11:16:11 字數 2141 閱讀 6361

git基礎

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

git 和其他版本控制系統的主要差別在於,git 只關心檔案資料的整體是否發生變化,而大多數其他系統則只關心檔案內容的具體差異。這類系統(cvs,subversion,perforce,bazaar 等等)每次記錄有哪些檔案作了更新,以及都更新了哪些行的什麼內容,請看圖 1

1 其他系統在每個版本中記錄著各個檔案的具體差異

git 並不儲存這些前後變化的差異資料。實際上,git 更像是把變化的檔案作快照後,記錄在乙個微型的檔案系統中。每次提交更新時,它會縱覽一遍所有檔案的指紋資訊並對檔案作一快照,然後儲存乙個指向這次快照的索引。為提高效能,若檔案沒有變化,git 不會再次儲存,而只對上次儲存的快照作一鏈結。git 的工作方式就像圖 2 所示。

2 git 儲存每次更新時的照檔案快(和圖一進行對比)

這是 git 同其他系統的重要區別。

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

在git 中的絕大多數操作都只需要訪問本地檔案和資源,不用連網。因為 git 在本地磁碟上就儲存著所有當前專案的歷史更新,所以處理起來速度飛快。

舉個例子,如果要瀏覽專案的歷史更新摘要,git 不用跑到外面的伺服器上去取資料回來,而直接從本地資料庫讀取後展示給你看。所以任何時候你都可以馬上翻閱,無需等待。如果想要看當前版本的檔案和乙個月前的版本之間有何差異,git 會取出乙個月前的快照和當前檔案作一次差異運算,而不用請求遠端伺服器來做這件事,或是把老版本的檔案拉到本地來作比較。

用git 的話,就算你在飛機或者火車上,都可以非常愉快地頻繁提交更新,等到了有網路的時候再上傳到遠端倉庫。

時刻保持資料完整性

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

git 使用 sha-1 演算法計算資料的校驗和,通過對檔案的內容或目錄的結構計算出乙個 sha-1 雜湊值,作為指紋字串。該字串由 40 個十六進製制字元(0-9 及 a-f)組成,看起來就像是:

24b9da6552252987aa493b52f8696cd6d3b00373

git 的工作完全依賴於這類指紋字串,所以你會經常看到這樣的雜湊值。實際上,所有儲存在 git 資料庫中的東西都是用此雜湊值來作索引的,而不是靠檔名。

檔案的三種狀態

好,現在請注意,接下來要講的概念非常重要。對於任何乙個檔案,在 git 內都只有三種狀態:已提交(committed),已修改(modified)和已暫存(staged)。已提交表示該檔案已經被安全地儲存在本地資料庫中了;已修改表示修改了某個檔案,但還沒有提交儲存;已暫存表示把已修改的檔案放在下次提交時要儲存的清單中。

由此我們看到 git 管理專案時,檔案流轉的三個工作區域:git 的工作目錄,暫存區域,以及本地倉庫。如圖 3: staging area

3 工作目錄,暫存區域,以及本地倉庫

每個專案都有乙個 git 目錄(譯註:如果 git clone 出來的話,就是其中 .git 的目錄;如果 git clone --bare 的話,新建的目錄本身就是 git 目錄),它是 git 用來儲存元資料和物件資料庫的地方。該目錄非常重要,每次轉殖映象倉庫的時候,實際拷貝的就是這個目錄裡面的資料。

從專案中取出某個版本的所有檔案和目錄,用以開始後續工作的叫做工作目錄。這些檔案實際上都是從 git 目錄中的壓縮物件資料庫中提取出來的,接下來就可以在工作目錄中對這些檔案進行編輯。

所謂的暫存區域只不過是個簡單的檔案,一般都放在 git 目錄中。有時候人們會把這個檔案叫做索引檔案,不過標準說法還是叫暫存區域。

基本的 git 工作流程如下:

1. 在工作目錄中修改某些檔案。

2. 對修改後的檔案進行快照,然後儲存到暫存區域。

3. 提交更新,將儲存在暫存區域的檔案快照永久轉儲到 git 目錄中。

所以,我們可以從檔案所處的位置來判斷狀態:如果是 git 目錄中儲存著的特定版本檔案,就屬於已提交狀態;如果作了修改並已放入暫存區域,就屬於已暫存狀態;如果自上次取出後,作了修改但還沒有放到暫存區域,就是已修改狀態。

編譯原理 第一節

把用某一種程式語言寫的源程式翻譯成等價的另一種語言程式 目標程式 的程式,稱之為編譯程式或翻譯程式 乙個源程式編寫後要投入執行,需要編譯程式支援的執行過程分為兩個階段 編譯階段和執行階段 整個結構可以分為前端 front end 和 後端 back end 亦即分析階段和綜合階段 為什麼要分為前端和...

第一節 python基礎

2020 03 29 python基礎 多種python版本,直接編碼讓c解釋的是cpython,pypy是最快的python 編碼 ascll碼只能表示256種無法表示中文,utf8個根據字元長短按需表示最實用 unicode國標碼浪費資源 指令碼開頭定義編碼格式可以防止用python2直譯器解釋...

UML學習 第一節

1 uml的基本組成部分 uml主要有圖 元模型組成,主要包括三個基本構造快 事務 things 關係 relationship 和圖 diagram 主要是設計4種事物,4中關係,10種圖。1.1 四種事物 四種事物分別是 結構事物 行為事物 分組事物 注釋事物。結構事物有七中,分別為 類 介面 ...