工做區就是你在電腦裏能看到的目錄,好比你的項目目錄。git
工做區下面有一個隱藏目錄.git目錄,這個.git目錄不算工做區,它是Git的版本庫,它存儲變化日誌及版本信息。學習
前面咱們講Git的基本使用的時候,咱們提到了一個暫存區(stage, 或稱爲 index)的概念,當時怕你們被新概念嚇怕,因此沒有細細的講,其實暫存區是Git最成功的設計之一,也是最難理解的部分,下面咱們經過一個例子好好的分析學習一下暫存區。設計
當執行 "git status" 命令掃描工做區改動的時候,先依據.git/index文件中記錄的已跟蹤的文件的時間戳、長度等信息判斷工做區文件是否改變。若是工做區的文件時間戳改變,說明文件的內容可能被改變了,這個時候就須要打開文件,讀取文件內容,和更改前的記錄的原始文件相比較,判斷文件內容是否被更改。若是文件內容有改變,則將該文件新的時間戳記錄到.git/index文件中。所以.git/index的時間戳也跟着變化了。爲何要這樣作?由於判斷文件是否更改,使用時間戳、文件長度等信息進行比較要比直接經過文件內容比較要快的多,因此Git這樣的實現方式可讓工做區狀態掃描速度更快。3d
下圖展現了工做區、版本庫中的暫存區和版本庫之間的關係。指針
對上圖的說明:日誌
.git/index實際上就是一個包含文件索引的目錄樹,像是一個虛擬的工做區。在這個虛擬工做區的目錄樹中,記錄了文件名、文件的狀態信息(時間戳、文件長度等),文件的內容並不存儲其中,而是保存在Git對象庫(.git/objects)中,他們經過這個索引和對象實體是對應着的。從上面的圖咱們能夠看出:對象
【總體】Git的版本庫裏存了不少東西,其中最重要的就是稱爲stage(或者叫index)的暫存區,還有Git爲咱們自動建立的第一個分支master,以及指向master的一個指針叫HEAD。blog
add後:索引
再執行git commit就能夠一次性把暫存區的全部修改提交到分支it
一旦提交後,若是你又沒有對工做區作任何修改,那麼工做區就是「乾淨」的。
如今版本庫變成了這樣: