目錄
一.初識git
二.git的安裝
三.初始化/創建本地倉庫
四.配置用戶設置/配置本地倉庫
五.認識工作區、暫存區、版本庫
六.添加文件__場景一
七.查看 .git 文件/添加到本地倉庫后.git中發生的變化
1.執行git add后的變化
index文件(暫存區)
logs/HEAD文件
2.執行git commit后的變化
refs/heads/master
Objects目錄
logs/HEAD文件
一.初識git
類似于qq在線文檔,office里查看歷史版本,Git 是一個分布式版本控制系統,用于追蹤代碼的變化,協作開發,并能輕松管理不同版本的代碼。能像qq在線文檔一樣,大型多人在線編輯,office里的歷史版本,可以隨時回滾,對于文本文件能直接告訴你哪里發生了改動,二進制文件如圖片告訴你大概的變化。
二.git的安裝
1.Windows(x64):?Git-2.47.1-64-bit.exe
2.Ubuntu:?apt-get install git
3.macOs:??brew install git
三.初始化/創建本地倉庫
git init
創建這個詞便于理解,初始化才是本質。我們知道我們想要將什么放進我們的github/gitee,但計算機其實不知道,初始化其實就相當于圈了一塊地,告訴計算機,將這些推送到github/gitee。
同時會生成一個.git的隱藏文件,也就是真正的本地倉庫,版本庫,注意尤其不允許在.git下手動修改,否則可能導致該倉庫用不了
四.配置用戶設置/配置本地倉庫
一般配置為
git config --global user.name "xxx"
git config --global email "666666@xxxx.com"
檢查其是否配置成功,只需
git config -l// 若出現下列代碼,則表示配置成功
// user.name=xxx
// user.email=666666@xxx.com
我們的配置一般為全局配置,全局配置是指本地的所有倉庫默認都采取這種用戶配置,如果不采取全局配置,只需要去掉--global
git config user.name "xxx"
git config email "666666@xxxx.com"
最后,如果我們換一種配置,直接輸,系統會直接覆蓋,若們就是想取消所有配置,則輸入以下代碼,注意全局配置和局部配置不一樣,有沒有取消成功,再git config -l查看即可。
// 全局設置
git config --global --unset user.name
git config --global --unset user.email// 局部配置
git config --unset user.name
git config --unset user.email
五.認識工作區、暫存區、版本庫
如圖所示,這是在window系統中工作區,暫存區,版本庫的大致分布及一些原理。
當我們git init一個倉庫時,在里面添加文件,git是不能直接管理的,因為他處于工作區中。我們需要用git add .命令將其推送到.git文件所在的版本庫中,實際上是stage暫存區(索引)中。這時仍然沒有添加到本地倉庫中,需要使用git commit -m ‘xxx’命令將其推向HEAD指向的master中,這樣就算完成了。
無論是stage暫存區還是master中,存放的都是索引,具體的文件管理是在objects文件中,修改的工作內容會寫入對象的一個新的git對象中
六.添加文件__場景一
// 將文件從工作區添加到暫存區,有兩種辦法
git add . // 會將所有修改的文件添加到暫存區
git add <file> // 只會將file文件添加到暫存區,可同時添加多個// 將問件從暫存區推向master
git commit -m ‘xxxx’ //xxxx最好填寫其主要變化內容,方便后續管理 // 檢查推送狀態
git status// 查看推送日志
git log// 顯示如下信息// commit 1f458c82d3760f5db667167b742c5972e7904a97 (HEAD -> master)// Author: user.name <user.email>// Date: Mon Dec 16 22:12:31 2024 +0800// <file>
//如果認為太長,也可以一行輸出
git log --pretty=oneline// 顯示如下信息// 1f458c82d3760f5db667167b742c5972e7904a97 (HEAD -> master) <file>
其中commit ID是根據哈希值整出來的獨一無二的,我們是通過這個進行版本的控制,每一次add操作都會想我們展示一些變化的細節,如推送了什么文件,文本文件,增加了多少行,減少了多少行之類的。
我們對單獨提交文件還需注意如下幾點
git add file1
git add file2
git commit -m 'text'
這樣只會將file2推送到本地倉庫file1不會,因為暫存區,畢竟是暫存區
此時要么add一次,commit一次
要么git add file1 file2,再commit
要么直接git add . ,然后再commit
七.查看 .git 文件/添加到本地倉庫后.git中發生的變化
1.執行git add后的變化
index文件(暫存區)
記錄當前暫存區的所有文件信息(包括文件的路徑、修改狀態和哈希值)。注意:index
文件是二進制格式,你通常不能直接查看其內容。
logs/HEAD文件
logs/HEAD會記錄你最近的操作,尤其是指針的變化。例如,git add 后,你可以看到這個文件記錄了 HEAD(當前分支)的操作記錄。當前將HEAD用記事本打開,則是以下內容
// master文件所在路徑
ref: refs/heads/master
2.執行git commit后的變化
refs/heads/master
將master用記事本打開,可以清楚地看到,master中記錄的是git commit后最新的哈希值
Objects目錄
通過哈希值查看內容不再能使用記事本,需要用到下列命令
git cat-file -p <哈希值>
我們可以看到通過master中的哈希值,我們能得到tree(提交的整個樹的節點),parent(上一個節點),和提交者的信息。通過再次檢索tree,我們能得到其根目錄,然后檢索我們README.txt文件的哈希值,我們就能看到我們操作的具體變化。?
因此,修改的工作區內容會寫入到對象庫的一個新的git對象中。
logs/HEAD文件
logs/HEAD記錄了你最新的提交操作。例如,在執行git commit后,logs/HEAD會記錄這一操作的詳細信息,包含提交的哈希值、提交人、日期等信息。