鍍金池/ 教程/ Java/ Git 內(nèi)幕:.git 目錄
創(chuàng)建沖突
暫存更改
創(chuàng)建項目
Git 內(nèi)幕:.git 目錄
撤銷本地更改
移動文件
移除 oops 標簽
何為 Origin
再談結構
撤銷暫存的更改
修正提交
別名
檢查狀態(tài)
給版本打標簽
撤銷提交的更改
拉下共享的更改
變基
暫存與提交
合并
合并拉下的更改
更改而非文件
更改原始倉庫
重置 master 分支
回顧克隆的倉庫
變基 VS 合并
共享倉庫
導航分支
重置 greet 分支
添加跟蹤的分支
獲得舊版本
克隆倉庫
Git 內(nèi)幕:直接處理 Git 對象
再談設置
遠程分支
從分支移除提交
合并回 master
查看分叉的分支
添加遠程倉庫
拉下更改
歷史
在 master 中更改
裸倉庫
做更改
高級/將來的主題
推送更改
多個倉庫
設置
提交更改
取得更改
托管你的 Git 倉庫
創(chuàng)建分支
解決沖突

Git 內(nèi)幕:.git 目錄

目的

學習有關 .git 目錄結構的內(nèi)容。

.git 目錄

是時候做些瀏覽了。首先,從你的項目根目錄開始……

$ ls -C .git
$ ls -C .git
COMMIT_EDITMSG  ORIG_HEAD   hooks       logs        rr-cache
HEAD        config      index       objects
MERGE_RR    description info        refs

這是全部 Git 東東所存儲的魔法目錄。讓我們一瞥對象目錄。

對象存儲

$ ls -C .git/objects
$ ls -C .git/objects
09  1f  27  43  69  83  97  af  e4  info
0f  22  28  58  6b  94  9c  b5  e7  pack
11  24  32  59  78  96  a1  c4  eb

你應當看到一串包含兩個字符名稱的目錄。目錄名稱是 Git 中對象存儲的 sha1 哈希的開頭兩個字符。

深入對象存儲

$ ls -C .git/objects/<dir>
$ ls -C .git/objects/09
6b74c56bfc6b40e754fc0725b8c70b2038b91e  9fb6f9d3a104feb32fcac22354c4d0e8a182c1

看看兩字符目錄的其中之一。你應當看到一些具有 38 個字符名稱的文件。這些是 Git 中包含對象存儲的文件。這些文件已被壓縮和編碼,所以直接查看它們的內(nèi)容并沒有什么用處,但我們將看一點。

配置文件

$ cat .git/config
$ cat .git/config
[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
[user]
    name = Jim Weirich
    email = jim (at) neo.com

這是項目級配置文件。在這兒的配置條目將覆蓋你的主目錄中 .gitconfig 文件中的配置條目,至少對此項目來說是如此。

分支與標簽

$ ls .git/refs
$ ls .git/refs/heads
$ ls .git/refs/tags
$ cat .git/refs/tags/v1
$ ls .git/refs
heads
tags
$ ls .git/refs/heads
master
$ ls .git/refs/tags
v1
v1-beta
$ cat .git/refs/tags/v1
1f7ec5eaa8f37c2770dae3b984c55a1531fcc9e7

你應當認識標簽子目錄中的文件。每個文件都與你先前使用git tag 命令所創(chuàng)建的標簽相應。它的內(nèi)容是綁定到標簽的提交哈希。

heads 目錄與此相似,但它是用于分支而非標簽?,F(xiàn)在我們只有一個分支,所以你在該目錄中只會看到 master。

HEAD 文件

$ cat .git/HEAD
$ cat .git/HEAD
ref: refs/heads/master

HEAD 文件包含當前分支的引用。此刻它是對于 master 的引用。