1. 程式人生 > >工作區、暫存區、倉庫三者關係

工作區、暫存區、倉庫三者關係

區分三者關係

       Git最讓你迷惑的無非是它裡面的各種概念了,如果是剛開始接觸Git希望看完本篇介紹之後有一個清晰的認識,筆者認識也有限這裡只說說個人對使用Git的感受,說一下它裡面的幾個最常用的概念的理解。

       在初始化git版本庫之後會生成一個隱藏的檔案 .git ,可以將該檔案理解為git的版本庫 repository,而我們自己建立的專案資料夾即工作區 working directory ,在.git 資料夾裡面還有很多檔案,其中有一個index 檔案 就是暫存區也可以叫做 stage ,git還為我們自動生成了一個分支master以及指向該分支的指標head ,如下圖   

       

       從圖中可以看出來respository包括分支master和stage, working diretory 可以理解為我們開啟開發環境如eclipse,裡面的內容即工作區的內容,在工作區裡面有的程式碼以及配置檔案等我們需要提交到版本庫裡面,最終是到了分支master上面,暫存區只是一個臨時儲存修改檔案的地方。

 例項講解

       平時我們使用的命令git add file1 是把檔案從工作區提交到暫存區,git commit -m "prompty" file1 是把檔案從暫存區提交到了分支master下面,這裡因為只有一個分支master,就提交到master上了,下面讓我們再來結合具體例子來說明一下。

       我們修改一下tgb.txt檔案增加一行 "l love you" ,並新建一個檔案 test1.txt,現在還沒有執行git add命令,這種修改都還停留在工作區內,用git status檢視狀態,如圖

      

       上圖表明修改並沒有在暫存區裡面,當我們執行git add test1.txt ,git add tgb.txt後,再來看一下狀態

        

      這兩個檔案被新增到了暫存區,但是還沒有提交,當執行git commit -m "tijiao" 後文件即從暫存區到了master分支上面,如圖將看不到暫存區裡面有什麼內容。

     

      Git管理的是新增到暫存區裡面的修改,包括增刪改等等都算是可以跟蹤的檔案變動,也可以說git只管理我們變動的部分變動的我們才往暫存區提交,這也是git比其他版本系統設計優秀的一點,以後,會詳細說一下各個版本系統管理檔案是如何管理的,他們的設計思想是什麼。

通過三個命令理解

      下面還有一個需要注意的git diff 命令的差異:

  git diff 比較的是工作區和暫存區的差別
  git diff --cached 比較的是暫存區和版本庫的差別
  git diff HEAD 可以檢視工作區和版本庫的差別

      通過一個新增檔案既可以明顯看出他們之間區別,不過這裡有一個前提是已經提交到暫存區的檔案修改的時候才可以看出明顯區別,這也是以為啥git只能跟著提交到暫存區的檔案,如果只是在工作區新建一個檔案,那麼輸入這三個命令都沒有結果為空白。

      我們繼續修改tgb.txt,在檔案末尾新增  we are good boy.

      分別輸入三個命令,效果為:

      

      從圖中可以看出,工作區與暫存區、工作區與版本庫都有變化,而版本庫與暫存區並沒有變化。進一步執行git add tgb.txt 

        

      執行git add tgb.txt之後發現git diff沒有輸出內容,表明工作區與暫存區已經同步,暫存區與版本庫、版本庫與工作區沒有同步。最後一步執行git commit 

         

       當執行完git commit後,三個命令都沒有輸出結果,表明我們修改的檔案已經被同步的版本庫,已經被版本庫管理起來了。

總結:

       版本庫管理檔案會很方便尤其是程式碼,等好多的命令熟了之後也會覺得並不是那麼難用,主要使用的時候覺得git反應比較快,而且速度還可以,現在很多人都在window開發而喜歡具有介面的版本工具軟體,而不去學習git命令,學習一些git 命令還是很有用的,假如讓你去linux上面開發或者在linux系統上面管理程式碼,你就會完全束手無策不懂原理也不懂命令,需要從新學習從新認識git。

       可以說各種命令是git的根本,學習了命令無論哪一個介面管理工作一看也就會了,現在有好多的git視覺化工具,不如學幾個命令,況且再多的介面底層也是呼叫這麼多的命令來實現的,有了介面就讓我們變懶了,降低了開發者的水平,提高開發效率的同時也失去了更多的學習、研究機會。