2011-07-16 54 views
19

我在Git中混淆了登臺目錄(Git Index)的命名。爲什麼登臺目錄也被稱爲索引/ Git索引?

有沒有什麼特別的意思,叫它索引? 爲什麼不把它稱爲Cache /或Temp目錄,以便我們更容易理解?

對我來說,索引是......幫助我們更快地搜索東西,比如在DBMS中編制索引, 它與暫存區域有什麼關係?

我做了一些谷歌搜索,但仍沒有太多的想法。 參考鏈接Git Index

+1

我真的好奇這有時候也是我自己:D –

+0

actaully,我只想知道暫存區域是否有其他特殊功能,我不知道。因爲當我第一次在Git中遇到這個詞的時候,我想這是一個非常複雜的東西,我需要處理...... –

+0

編號AFAIK它只是代碼的狀態將被提交。 – Abizern

回答

20

article by the main Git maintainer Junio C. Hamano,是有益的,對抓緩存和指數之間的區別:
(重點煤礦)

當萊納斯開始寫git的,他的目的是讓他重現他在BitKeeper時代之前使用的原始「tarball和補丁」工作流程產生的每個中間狀態。
從2.6.12 tarball開始,他將patch-1,patch-2,... so 2.6.12本身,2.6.12與patch-1應用,2.6.12與patch-1和patch-2應用,成爲三個版本。

但是,如果你每天必須洗牌數百個補丁,那麼這不會顯着擴展。所以他發明了「目錄緩存」;作爲一個概念,這大致對應於今天的git中的「樹」對象:記錄的集合,每個記錄都是整個目錄結構包含的緊湊表示。
構建它的方法是「將內容添加到緩存中,或更新緩存中的內容」。

託管此類版本控制記錄的集合的控制目錄被命名爲「.dircache」(在一段時間後它被重命名爲「.git」)。
有一個名爲「.dircache/index」的文件,並且該文件的內容被讀取並用一組名爲「cache」的名稱命名的變量進行操作。
當時,我們今天稱之爲索引的概念,一個緩衝區,用於構建您打算寫爲樹對象的內容集合,稱爲「緩存」
因爲記錄「cache」中的內容的文件被命名爲「index」,所以每個人都可以互換地討論「緩存」和「索引」。它是(現在仍然是)一個索引,通過給它一個路徑名稱,允許您找到緩存中的內容。

隨着越來越多的人開始使用git而根本不需要閱讀代碼,使用「索引」這個詞已經變得越來越普遍,原因很明顯。
作爲文件系統上的東西,它比C源代碼中的變量名更加明顯。
最終,我們在解釋使用git作爲最終用戶時,今天停止使用「cache」作爲名詞來命名我們今天所稱的「索引」。
然而,當我們想在討論git實現的背景下討論內部數據結構時,「cache」這個詞仍然用作名詞(例如「讓我們讓程序可以在多個緩存中工作同一時間」)。

在最終用戶級別,「cache」僅用作近日的形容詞; 「緩存」,意思是「緩存在索引中的內容,而不是工作樹中的內容」。
我們可以稱它爲「索引」,但「緩存的內容」從很早就已經確立,意味着確切的概念,而且我們不需要另一個意思相同的詞。

[...]在早期的日子裏,有「增加一個新的文件索引」和「更新的文件已經在與新的內容索引」之間的區別。
[...]現代(和中世紀)版本的git使用「git add」。我們本來可以說是誠實的,並稱之爲更新或添加到索引「add」的行爲,但在「git培訓」行業中的一些人開始教導索引作爲「下一次提交的暫存區域」,作爲不可避免的後果,動詞「to stage」開始出現在許多文檔中,意思是「向索引添加內容的行爲」。
我有時會自己動用這個動詞,但那只是當我懷疑聽衆可能已經從這些新人中第一次學會git時。嚴格地說,這是git詞彙中冗餘且相當近的一個詞。

+0

欲瞭解更多關於Junio C. Hamano的信息,請參閱2011年3月的採訪:http://www.youtube.com/watch?v=qs_xS1Y6nGc – VonC