本篇演示Git的HelloWorld示例,主要內容有三個部分,Git安裝,Git的HelloWorld示例,Git的目錄結構。
1、安裝
在Window安裝Git,需要安裝兩個軟件,
第一個是Git軟件,它的下載地址是https://www.git-scm.com/download/,
第二個是Git圖形界面,推薦使用TortoiseGit,GitExtension,在官網上有各種類型的UI工具,下載地址是https://www.git-scm.com/download/gui/windows。
安裝Git準備,Git 64位的安裝包已下載。電腦上不存在Git。
準備完之後,安裝Git的步驟如下:
第一步,運行exe安裝程序,點擊next,選擇安裝目錄
第二步,選擇組件(Component),全選上也沒有問題
第三步,在開始菜單創建Git文件夾。
第四步,選擇Git使用的編輯器。它的默認值是Vim,是Linux平臺上的編輯器,這裏我選擇use Sublime Text as Git’s default editor。下拉列表可以看到其他編輯器,例如notepad++等。
第五步,選取Git命令的運行環境。
第一個選項Use Git from Git base only,只在git bash下執行git命令。若想要在cmd中執行git命令,後續可以修改環境變量,把install_dir/bin添加到環境變量中。
第二個選項,Git會安裝一些Unix工具,並且會把Git命令存放的目錄添加到環境變量中。
第三個選項,使用Git
第六步,建立SSL連接時,採用何種策略,這裏選擇OpenSSL,它是非常著名的生成證書的工具。有興趣的可以研究下。
第七步,選擇換行符,我這裏選擇的是checkout as is, commit as is。現在主流的版本庫是Github, 不是Linux服務器。若是在Window上有開發版本庫,在Linux上有發佈版本庫,選擇第一項。
第八步,配置Git base仿真器,在windows上的話我選擇MinTTy,因爲cmd運行git命令這種方式,只需要配置環境變量即可,git bash和cmd的功能重複了。
第九步,配置其他附加的,可選的功能
開啓文件系統緩存可以大幅度提升性能,這個必選。
允許Git的證書存放在Window證書管理中心,這個建立SSL連接時必選,不然自己手動添加比較麻煩。
允許軟鏈接,在Linux系統中,有兩種鏈接,軟鏈接,硬鏈接。在window下不必開啓。
第十步,點擊install, 最後點擊finish完成即可。
2、HelloWorld示例
下述將演示Git,創建Git倉庫,執行最基本的操作。步驟如下:
第一步, 創建first_git_repo(名稱隨意)文件夾,進入文件夾,執行git init。
創建完成之後,會創建隱藏的.git文件夾。
第二步,創建Hello.txt文件,執行git add Hello.txt命令。
Git版本庫存在三種區域,工作目錄,索引,底層的數據庫。當創建Hello.txt文件時,它存在於工作目錄下,執行add之後,它添加到索引中。
這個過程是稱爲”stage”,意思是指工作目錄提交到底層版本庫需要兩個步驟,添加到索引中,之後再提交到本地版本庫中。Stage的字典解釋是a period or state that sth/sb passes through while developing or making process。在Git中指提交過程中的一個階段。
第三步,執行git status。
可以查看版本庫的狀態。
第四步,執行git commit -m “初始化提交”
提交變更,執行完之後可以查看.git/objects目錄下存在一些二進制文件。說明已提交成功
第五步,執行git log, 也可以執行git show-branch。
查看版本庫的提交記錄,由於量小,可以直接使用此命令,當量比較多時,建議執行git log > log.txt,將結果保存到log.txt中查看。
第六步,在Hello.txt文件中添加Hello Git的內容,重複第二步,第四步。
文本內容的變更。
第七步,執行git diff HEAD HEAD~1
比較兩次提交記錄,可以查看最近一次有哪些變更。結果如下
diff --git a/Hello.txt b/Hello.txt index e51ca0d..e69de29 100644 --- a/Hello.txt +++ b/Hello.txt @@ -1 +0,0 @@ -Hello Git \ No newline at end of file
若未配置用戶名和郵箱,需先配置。配置命令爲git config user.name || user.email
3、版本庫目錄結構
創建完版本庫之後,會相對應的創建.git文件夾,該文件夾下存放着所有的核心對象以及很重要的內容。理解各個文件,以及文件夾的作用有助於理解Git是如何運作的,但是不要去手動操作這些文件。下面詳細介紹它們
3.1 文件
3.1.1 index
瞭解Index,首先需要理解索引的概念,以及版本庫三種存儲類型。
非裸版本庫有三種存儲類型,
第一種是工作目錄,它是指存放於操作系統的文件系統中,此時在索引,底層數據庫還未體現。
第二種是索引,此時Git會計算文件的內容,並計算SHA1值,創建blob對象,此時在索引中會保存文件的路徑,底層數據庫會保存文件的內容。
第三種是底層數據庫,它可以根據tree,blob對象完整的還原某個特定版本庫的文件目錄結構和文件內容。意味着假設在很早之前創建test文件夾,hello.txt,之後刪除文件夾,刪除hello.txt,或把hello.txt改的面目全非,也可以通過tree, blob對象還原當時的版本庫。本質上它是Git對象與文件系統的一種映射。
索引是工作目錄最終保存在底層數據庫的一個過渡階段。它記錄兩個內容,一方面記錄文件在文件系統中的目錄結構,另外一方面記錄文件內容對應的blob對象。可以理解Index就是一座橋樑。
3.1.2 config
config文件保存版本庫的配置信息,最常見的user.name,email。
操作config文件的方式有兩種,
第一種方式是通過文本編輯器進行編輯,這種方式需要深刻理解每個配置項的含義,修改失敗往往會導致配置文件不可用。
第二種方式是通過命令的方式,最常見的命令是git config, 其他命令也會反映在配置項上,例如git remote, git clone等。
查看config文件的方式也有兩種,
第一種方式,通過編輯器直接打開查看,這種情況下需要綜合全局的配置(user/.gitconfig)和本地版本庫的配置(.git/config)
第二種方式,運行git config –-list命令。
在實際應用中,最常見的配置就是用戶的信息,遠程版本庫的一些信息。
3.1.3 description
版本庫的描述,沒什麼用。相當於Java在創建包時,創建的package-info.java,用於描述包的用途。Description文件是類似的,它用於描述版本庫的用途。
3.1.4 Head
保存Head當前指向的Commit對象。它包含兩個信息,第一個信息是分支名稱,第二個信息是Commit對象的信息。
通常情況下,Head總是指向分支的最近一次提交。但是使用reset命令可以改變。在第十章節中會重點介紹reset命令。
3.2 object目錄
它用於存放核心對象,blob,commit,tree,每種類型的對象都一一對應SHA1值,並以它的前兩位作爲目錄名稱,後126位作爲文件的名稱。
打開目錄,通過人是無法識別出對象的類型,而且也無法查看文件的內容,都是二進制文件。
切記勿修改,移動,刪除其中的內容。
3.3 logs目錄
存放Git的日誌,大部分是引用日誌,即HEAD相關的日誌。
可以通過git reflog, git log命令查看日誌的內容
3.4 hooks目錄
它存放鉤子,熟悉JS的程序員知道,每個組件都會有很多的事件監聽。鉤子的作用是監聽git的命令,類似於JS中的事件概念。
在實際中適用場景較少,文件夾下存放着一些鉤子的示例,供學習和參考。
3.5 refs目錄
ref目錄用於保存引用類型,它有兩個文件夾,heads目錄和tags目錄
heads目錄用於保存HEAD對應的,各個分支的Commit對象,默認是最近一次的Commit對象。
Tags目錄用於保存tag對應的Commit對象,初始情況下是空的,當創建tag對象之後,目錄下會顯示。
stash目錄用於保存stash命令產生的一些內容。