2012-06-27 65 views
1

我很好奇git add action, 所以我做了一些測試。當將文件添加到staged區域時,git是否保存目錄信息?

創建索引

1. git init 
2. mkdir mydir 
3. echo "hello" > mydir/hello 
4. find .git/objects ==> nothing 
5. git add . 
6. find .git/objects ==> only find one file ,by cat-file, I am sure it is hello 

做一些改變

7. rm mydir/hello 

獲取文件回來

8. git checkout mydir/hello 
9. ls mydir/hello ==> hello is back 

我的疑問是: 當我做'git add .',有隻創建一個BLOB ,而不是創建一個樹來記錄direydy'mydir'。那麼,git checkout mydir/hello怎麼可能找到blob?

+0

我相信這些樹木在'git的構造/ index'單獨因爲這是經常的東西,將提交實際上是由前更改。 – poke

+0

您可能會在[Git Internals](http://git-scm.com/book/en/Git-Internals-Git-Objects)的Pro Git書中找到有趣的部分,特別是「樹對象」。它似乎很好地覆蓋了git的存儲。 – simont

+0

Git Internal只是給出了一個沒有目錄的例子。它沒有詳細解釋。 – yao

回答

1

git索引不會在內部或外部創建樹對象。目錄結構表示在它們包含的斑點的文件名中,直到提交(及其關聯的樹對象)爲止。

因此,在您的示例中,文件的名稱字面上表示爲mydir/hello,並與您看到的blob關聯。

Source

相關問題