2015-02-09 109 views
-1

我知道git壓縮文件,然後計算SHA1並將其存儲在.git/objects/中,我們可以使用git cat-file -p 'sha1'查看內容,但我有興趣知道git存儲壓縮的blob對象的位置。git存儲blob對象在哪裏?

如下面的帖子

http://gitready.com/beginner/2009/02/17/how-git-stores-your-data.html

更新 提到的,我只能看到SHA1.git/objects我認爲是參照實際的斑點,而不是一滴

+1

Errr ...,存儲在.git/objects中的壓縮塊。不明白問題是什麼。 – 2015-02-09 17:52:52

+0

@AlexeyTen我認爲.git /對象只存儲SHA1我沒有在該目錄中看到任何對象 – Ashish 2015-02-09 17:55:19

+0

@mu無我看不到任何東西,但在.git/objects中的SHA1 – Ashish 2015-02-09 17:55:53

回答

3

我明白混帳壓縮文件,然後計算SHA1

Git計算未壓縮文件的SHA1哈希值,然後壓縮數據並將其存儲在.git/objects中,並使用SHA1作爲文件名。

實施例:

1.創建測試庫

$ mkdir tmp 
$ cd tmp 
$ git init . 
Initialized empty Git repository in /tmp/.git/ 

2.添加測試文件

$ echo 'hello, world' > hello.txt 
$ git add hello.txt 
$ git commit -m "Initial commit" 
[master (root-commit) 951d5cc] Initial commit 
1 file changed, 1 insertion(+) 
create mode 100644 hello.txt 

3.顯示在git的測試文件的內容/對象目錄

$ git hash-object hello.txt 
4b5fa63702dd96796042e92787f464e28f09f17d 
$ cat .git/objects/4b/5fa63702dd96796042e92787f464e28f09f17d 
xKOR04fQ(I?? 
$ python -c "import zlib,sys;print repr(zlib.decompress(sys.stdin.read()))" < .git/objects/4b/5fa63702dd96796042e92787f464e28f09f17d 
'blob 13\x00hello, world\n' 

在最後一行的腳本是從this的答案。

正如您所看到的,.git/objects中的文件內容不可直接查看,cat僅顯示爲xKOR04fQ(I??。該文件也不存儲在壓縮數據的標準容器中,但使用zlib可以壓縮原始數據。存儲的文件還包含有關內容的git元數據:git對象的類型和內容的長度。但數據清晰地存儲在.git/objects中:

blob 13\x00hello, world\n 
+0

謝謝爲您的洞察答案 – Ashish 2015-02-09 18:40:58

+0

這是git-scm.com/book/en/v2/Git-Internals-Git-Objects的第一部分:) – 2015-02-09 18:43:14