git:簡單介紹+ 特點 + 三種狀態
git簡單介紹
Git是目前世界上最先進的分散式版本控制系統。
- 解決了版本控制系統中容易出現的單點故障問題。
分散式版本控制系統(Distributed Version Control System,簡稱 DVCS)。
- 在這類系統中,像 Git、Mercurial、Bazaar 以及 Darcs 等,客戶端並不只提取最新版本的檔案快照, 而是把程式碼倉庫完整地映象下來,包括完整的歷史記錄。 這麼一來,任何一處協同工作用的伺服器發生故障,事後都可以用任何一個映象出來的本地倉庫恢復。 因為每一次的克隆操作,實際上都是一次對程式碼倉庫的完整備份。
git:centos等作業系統上的一款軟體,下載後有一系列git命令,它可以在本地建立程式碼倉庫,供開發\運維人員實現對程式碼的版本控制。
github:區別於git的本地倉庫,它是網上倉庫。您可以將git儲存的程式碼上傳到giuhub網上倉庫儲存。而github因只支援git 作為唯一的版本庫格式進行託管,故名gitHub。
關於git的通俗理解:
拿Microsoft Word來理解,就是如果你想刪除一個段落,但是又怕將來想恢復卻找不回來,怎麼辦?可以另存為,即先把當前檔案“另存為……”一個新的Word檔案,再接著改,改到一定程度,再“另存為……”一個新檔案,這樣一直改下去,最後你的Word文件就擁有眾多副本:即
然後過了一週,你想找回被刪除的文字,但是已經記不清刪除前儲存在哪個檔案裡了,只好一個一個檔案去找,真麻煩。
看著一堆亂七八糟的檔案,想保留最新的一個,然後把其他的刪掉,又怕哪天會用上,還不敢刪,真鬱悶。
更要命的是,有些部分需要你的財務同事幫助填寫,於是你把檔案Copy到U盤裡給她(也可能通過Email傳送一份給她),然後,你繼續修改Word檔案。一天後,同事再把Word檔案傳給你,此時,你必須想想,發給她之後到你收到她的檔案期間,你作了哪些改動,得把你的改動和她的部分合並,真困難。
於是你想,如果有一個軟體,不但能自動幫我記錄每次檔案的改動,還可以讓同事協作編輯,這樣就不用自己管理一堆類似的檔案了,也不需要把檔案傳來傳去。如果想檢視某次改動,只需要在軟體裡瞄一眼就可以,豈不是很方便?
這個軟體用起來應該能記錄每次檔案的改動:即改動者,改動了什麼都會有記錄。而在程式碼這塊,實現的這個軟體就是git。
git的主要特點
git的主要特點
- 直接記錄快照,而非其他版本控制系統的"非差異比較"。
- 即Git 更像是把資料看作是對小型檔案系統的一系列快照。 在 Git 中,每當你提交更新或儲存專案狀態時,它基本上就會對當時的全部檔案建立一個快照並儲存這個快照的索引。 為了效率,如果檔案沒有修改,Git 不再重新儲存該檔案,而是隻保留一個連結指向之前儲存的檔案。 Git 對待資料更像是一個快照流。
- git近乎所有操作都是在本地執行。
- git的絕大多數操作,都只需訪問本地檔案和資源,可以在本地倉庫進行儲存,需要的時候直接訪問本地倉庫即可(git是分散式版本控制系統,因此可以解決單點故障問題)。而對於網路倉庫(github),更多時候只是從本地push到github上。當有需要的時候可以從github上pull所需版本到工作區,或從本地倉庫checkout所需版本到工作區。
- 舉個例子,有本地倉庫的話,如果要瀏覽專案的歷史,Git 不需外連到伺服器去獲取歷史,然後再顯示出來——它只需直接從本地資料庫中讀取。 你能立即看到專案歷史。如果你想檢視當前版本與一個月前的版本之間引入的修改, Git 會查詢到一個月前的檔案做一次本地的差異計算,而不是由遠端伺服器處理或從遠端伺服器拉回舊版本檔案再來本地處理。
- git保證完整性。
- Git 中所有的資料在儲存前都計算校驗和,然後以校驗和來引用。 這意味著不可能在 Git 不知情時更改任何檔案內容或目錄內容。 這個功能建構在 Git 底層,是構成 Git 哲學不可或缺的部分。 若你在傳送過程中丟失資訊或損壞檔案,Git 就能發現。
- Git 用以計算校驗和的機制叫做 SHA-1 雜湊(hash,雜湊)。 這是一個由 40 個十六進位制字元(0-9 和 a-f)組成的字串,基於 Git 中檔案的內容或目錄結構計算出來。 SHA-1 雜湊看起來是這樣:
Git 中使用這種雜湊值的情況很多,你將經常看到這種雜湊值。 實際上,Git 資料庫中儲存的資訊都是以檔案內容的雜湊值來索引,而不是檔名。24b9da6552252987aa493b52f8696cd6d3b00373
- git一般只新增資料。
- 你執行的 Git 操作,幾乎只往 Git 資料庫中新增資料。 你很難使用 Git 從資料庫中刪除資料,也就是說 Git 幾乎不會執行任何可能導致檔案不可恢復的操作。 同別的 VCS 一樣,未提交更新時有可能丟失或弄亂修改的內容。但是一旦你提交快照到 Git 中, 就難以再丟失資料,特別是如果你定期的推送資料庫到其它倉庫的話。
git的三種狀態
三種狀態:即已提交(committed)、已修改(modified)、已暫存(staged)。
-
已修改表示修改了檔案,但還沒儲存到資料庫中。
-
已暫存表示對一個已修改檔案的當前版本做了標記,使之包含在下次提交的快照中。
-
已提交表示資料已經安全地儲存在本地資料庫中。
git常用命令概念圖
對比上圖:工作目錄、暫存區域、Git倉庫
- workspace = working Directory(工作區 \ 工作目錄)
- index\stage = staging area (暫存區)
- Repository = git directory (Git倉庫)
工作區是對專案的某個版本獨立提取出來的內容。 這些從 Git 倉庫的壓縮資料庫中提取出來的檔案,放在磁碟上供你使用或修改。
暫存區是一個檔案,儲存了下次將要提交的檔案列表資訊,一般在 Git 倉庫目錄中。 按照 Git 的術語叫做“索引”,不過一般說法還是叫“暫存區”。
Git 倉庫目錄是 Git 用來儲存專案的元資料和物件資料庫的地方。 這是 Git 中最重要的部分,從其它計算機克隆倉庫時,複製的就是這裡的資料。
基本的 Git 工作流程如下:
-
在工作區中修改檔案。
-
將你想要下次提交的更改選擇性地暫存,這樣只會將更改的部分新增到暫存區。
-
提交更新,找到暫存區的檔案,將快照永久性儲存到 Git 目錄。
關於三種狀態的判斷:
- 如果 Git 目錄中儲存著特定版本的檔案,就屬於已提交狀態。
- 如果檔案已修改並放入暫存區,就屬於已暫存狀態。
- 如果自上次檢出後,作了修改但還沒有放到暫存區域,就是已修改狀態。