3 內(nèi)部對(duì)象如何實(shí)現(xiàn)git命令的執(zhí)行

1 Git常用命令與文件狀態(tài)流轉(zhuǎn)

# 使用Git對(duì)項(xiàng)目進(jìn)行版本控制,初始化
$ git init

# add命令,將項(xiàng)目文件放入暫存區(qū)
$ git add --all .

# commit命令,將暫存區(qū)文件提交至倉(cāng)庫(kù)區(qū)
$ git commit -m "項(xiàng)目代碼的第一次提交"

----------------------------------------------------------------------------

# 查看commit的提交記錄
$ git log
commit f95f59fd0c55bc8f8f81ff3919f8a97ccc97315c (HEAD -> master)
Author: GP6 <GP6@omlife.com.cn>
Date:   Mon Mar 23 18:00:47 2020 +0800

    項(xiàng)目代碼的第一次提交

----------------------------------------------------------------------------

# 新增Test.java,修改GitTests.java,查看文件狀態(tài)
$ git status
    src/main/java/com/gp6/git/Test.java
    modified:   src/test/java/com/gp6/git/GitTests.java


----------------------------------------------------------------------------

# 將文件放入暫存區(qū)
$ git add .

# 再次查看文件狀態(tài)
$ git status
    new file:   src/main/java/com/gp6/git/Test.java
    modified:   src/test/java/com/gp6/git/GitTests.java

# 將文件提價(jià)至倉(cāng)庫(kù)中
$ git commit -m "第二次提交"
[master 9a459a0] 第二次提交
 2 files changed, 5 insertions(+), 1 deletion(-)
 create mode 100644 src/main/java/com/gp6/git/Test.java

----------------------------------------------------------------------------

# 查看提交記錄
$ git log
commit 9a459a0707b5a6912ad2274bc2928bc20e1119a8 (HEAD -> master)
Author: GP6 <GP6@omlife.com.cn>
Date:   Wed Mar 25 11:55:25 2020 +0800

    第二次提交

commit 10ab94c5e545f4eecb09770fdaaff27f4b8105d4
Author: GP6 <GP6@omlife.com.cn>
Date:   Wed Mar 25 11:51:28 2020 +0800

    項(xiàng)目代碼的第一次提交

2 解析命令

2.1 git init

  • 將項(xiàng)目初始化為本地倉(cāng)庫(kù)

  • 命令執(zhí)行后,在項(xiàng)目目錄下生成隱藏目錄(.git)

  • .git目錄下存在一個(gè)objects目錄,objects目錄中只有info和pack兩個(gè)空文件夾

  • 初始化時(shí)不存在commit,所以不存在object


    image.png

2.2 git add

  • 工作目錄下添加pom.xml

  • 使用git hash-object [文件名]查看文件hash-key

$ git hash-object pom.xml
e3521eb60ad395e4eccc6bcf2fcda12f05c77f70
  • 執(zhí)行g(shù)it add ./pom.xml,object目錄自動(dòng)新增一個(gè)e3目錄,同時(shí).git目錄下的index文件大小也發(fā)生變更(將文件的信息保存到index文件中)

  • 由下圖可看出,40位的hash-key 前兩位作為目錄名,后38位作為文件名,標(biāo)識(shí)pom.xml這個(gè)object對(duì)象


    image.png
  • 使用hash-key可查看object對(duì)象的內(nèi)容與類型

# 查看object對(duì)象內(nèi)容
git cat-file -p [hash-key] 
    樣例
    $ git cat-file -p e3521eb60ad395e4eccc6bcf2fcda12f05c77f70

# 查看object對(duì)象類型
git cat-file -t [hash-key]
    樣例
    $ git cat-file -t e3521eb60ad395e4eccc6bcf2fcda12f05c77f70
    blob
  • 查看index內(nèi)容
$ git ls-files --stage
100644 e3521eb60ad395e4eccc6bcf2fcda12f05c77f70 0       pom.xml

2.3 git commit

  • 新建src目錄,目錄下新增1.txt文件(文件內(nèi)容隨便填寫)


    image.png
  • 將1.txt添加到暫存區(qū),查看object目錄與index文件的變化
# 查看src目錄的hash-object值(可見,git未將目錄視作object)
$ git hash-object ./src
fatal: Cannot open './src': Permission denied


# 查看1.txt的hash-object值
$ git hash-object ./src/1.txt
e69de29bb2d1d6434b8b29ae775ad8c2e48c5391

# 提交至?xí)捍鎱^(qū)
$ git add  ./src/1.txt

# 查看index文件變化
$ git ls-files --stage
100644 e3521eb60ad395e4eccc6bcf2fcda12f05c77f70 0       pom.xml
100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0       src/1.txt
  • object目錄中新增e6目錄(對(duì)應(yīng)1.txt),src目錄未在object目錄中體現(xiàn)


    image.png
  • 執(zhí)行第一次git commit,生成commit對(duì)象,同時(shí)生成tree對(duì)象(根據(jù)index記錄生成)

  • 查看tree對(duì)象,master是分支名,master^{tree},表示master分支所指向的tree對(duì)象

$ git cat-file -p master^{tree}
100644 blob e3521eb60ad395e4eccc6bcf2fcda12f05c77f70    pom.xml
040000 tree 341e54913a3a43069f2927cc0f703e5a9f730df1    src

# 查看tree對(duì)象的內(nèi)容
$ git cat-file -p 341e54913a3a43069f2927cc0f703e5a9f730df1
100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391    1.txt

# 查看提交歷史
$ git log
commit f818fc367672071759493276fb4811eb977d1b36 (HEAD -> master)
Author: GP6 <GP6@omlife.com.cn>
Date:   Wed Mar 25 14:43:47 2020 +0800

    第一次提交


# 查看提交詳情
$ git cat-file -p f818fc367672071759493276fb4811eb977d1b36
tree e8a633e8dc116131317586e7a85e216c3c3248b8
author GP6 <GP6@omlife.com.cn> 1585118627 +0800
committer GP6 <GP6@omlife.com.cn> 1585118627 +0800

第一次提交

第一次提交object目錄解析.png
第一次提交object指向解析.png
  • 對(duì)文件進(jìn)行變更
$ git status
    modified:   src/1.txt
    .gitignore
    main/

$ git add .

$ git status
    new file:   .gitignore
    new file:   main/2.txt
    modified:   src/1.txt

$ git commit -m "第二次提交"

$ git ls-files --stage
100644 a2a3040aa86debfd8826d9c2b5c816314c17d9fe 0       .gitignore
100644 ad4b04bd10cace01ef2e80d79d04366884cc846e 0       main/2.txt
100644 e3521eb60ad395e4eccc6bcf2fcda12f05c77f70 0       pom.xml
100644 2f480d77203c7d56ccc820b6718fb4b48f3738a5 0       src/1.txt


$ git cat-file -p master^{tree}
100644 blob a2a3040aa86debfd8826d9c2b5c816314c17d9fe    .gitignore
040000 tree 33506635d883c7f7bca457f22300e4041dc80dae    main
100644 blob e3521eb60ad395e4eccc6bcf2fcda12f05c77f70    pom.xml
040000 tree 5d7ce3a823552f80c28a4860ce73a803d913c4b0    src


$ git log
commit 7e4ecdac4ee614e40a55d1a58529f087c3728440 (HEAD -> master)
Author: GP6 <GP6@omlife.com.cn>
Date:   Wed Mar 25 15:47:33 2020 +0800

    第二次提交

commit f818fc367672071759493276fb4811eb977d1b36
Author: GP6 <GP6@omlife.com.cn>
Date:   Wed Mar 25 14:43:47 2020 +0800

    第一次提交

GP6@GP6 MINGW64 /d/Study/Git/test (master)
$ git cat-file -p 7e4ecdac4ee614e40a55d1a58529f087c3728440
tree 652fa35b075c87becd7e995f9e03b3ca90f93f5f
parent f818fc367672071759493276fb4811eb977d1b36
author GP6 <GP6@omlife.com.cn> 1585122453 +0800
committer GP6 <GP6@omlife.com.cn> 1585122453 +0800

第二次提交

第二次提交object指向解析.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末胸墙,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子洲胖,更是在濱河造成了極大的恐慌,老刑警劉巖怠噪,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件见秽,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡议纯,警方通過查閱死者的電腦和手機(jī)崩溪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門浅役,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人伶唯,你說我怎么就攤上這事觉既。” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵瞪讼,是天一觀的道長(zhǎng)钧椰。 經(jīng)常有香客問我,道長(zhǎng)符欠,這世上最難降的妖魔是什么嫡霞? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮希柿,結(jié)果婚禮上诊沪,老公的妹妹穿的比我還像新娘。我一直安慰自己曾撤,他們只是感情好端姚,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著盾戴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪兵多。 梳的紋絲不亂的頭發(fā)上尖啡,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音剩膘,去河邊找鬼衅斩。 笑死,一個(gè)胖子當(dāng)著我的面吹牛怠褐,可吹牛的內(nèi)容都是我干的畏梆。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼奈懒,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼奠涌!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起磷杏,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤溜畅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后极祸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體慈格,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年遥金,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了浴捆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡稿械,死狀恐怖选泻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤滔金,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布色解,位于F島的核電站,受9級(jí)特大地震影響餐茵,放射性物質(zhì)發(fā)生泄漏科阎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一忿族、第九天 我趴在偏房一處隱蔽的房頂上張望锣笨。 院中可真熱鬧,春花似錦道批、人聲如沸错英。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)椭岩。三九已至,卻和暖如春璃赡,著一層夾襖步出監(jiān)牢的瞬間判哥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國(guó)打工碉考, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留塌计,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓侯谁,卻偏偏與公主長(zhǎng)得像锌仅,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子墙贱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 主要內(nèi)容介紹 1.設(shè)計(jì)思想 2.數(shù)據(jù)流向 3.git flow 4.其他介紹 5.思考討論 6.參考資料 1.設(shè)計(jì)...
    不一樣的卡梅利多閱讀 1,130評(píng)論 0 13
  • Blob Object 10.1中說啦热芹,git本質(zhì)是一個(gè)內(nèi)容可尋址的系統(tǒng),所以Git的核心就是一個(gè) key-val...
    老沈Rosen閱讀 1,390評(píng)論 0 0
  • 你應(yīng)該知道的git git 起步 git 基礎(chǔ) git 是分布式惨撇,也就是說沒有中央服務(wù)器剿吻,代碼從倉(cāng)庫(kù)完整的鏡像下來...
    Lyan_2ab3閱讀 469評(píng)論 0 3
  • Git 是一套內(nèi)容尋址文件系統(tǒng),那么Git是怎么進(jìn)行尋址呢?其實(shí)串纺,尋址無非就是查找丽旅,而Git采用HashTable...
    宇晨棒棒的閱讀 326評(píng)論 0 0
  • 我初次面對(duì)死亡,還不足七歲纺棺。 爺爺蹚水榄笙,被淹死了。他渾身濕漉漉的祷蝌,像一個(gè)提線木偶茅撞,被人擺布著穿上壽...
    清顯君閱讀 290評(píng)論 0 0