2014-12-02 114 views
3

我的Git目錄中的大部分文件都是純文本文件(壓縮的鬆散對象和包文件除外)。所以我可以貓和編輯像.git/HEAD.git/refs/heads/master這樣的文件,並檢查存儲庫是否損壞。爲什麼git索引文件是二進制的?

.git/index是一個二進制文件。純文本文件不會更有用,因爲它可以很容易地用手修改?

斯科特·查孔表示在他presentation如下圖(幻燈片278): Index by Scott Chacon

在我看來,這可以很容易地把一個純文本文件。

那麼爲什麼它是一個二進制文件,而不是一個純文本文件?

+1

http://stackoverflow.com/q/4084921/6309中的答案可以提供幫助。 – VonC 2014-12-02 09:50:16

+0

@VonC我只能看到關於二進制文件結構的解釋。我錯過了什麼嗎? – 2014-12-02 09:51:22

+0

「那麼爲什麼它是一個二進制文件而不是純文本文件?」:答案顯示了索引的結構如何是一個二進制文件。 – VonC 2014-12-02 09:56:19

回答

3

指數,如在 「What does the git index contain EXACTLY?」 呈現包含元數據和作爲noted belowJazimov引用

  • index entries:到條目的引用,與元數據(時間,模式,大小,SHA1,。 ..)
  • cached trees,即引用樹(「可以從索引派生的樹的預先計算散列值」),這有助於加快從索引爲新提交生成樹對象。

這些數據的連接使它成爲一個二進制文件,雖然實際的原因是純粹的推測。 不能可以通過一個人修改它。

3

答案中給出的理由都不足以解決所提出的問題,即「爲什麼Git索引文件是二進制文件?」。接受的答案是不正確的。索引不包含任何純文本文件 - 它包含引用到純文本文件。此外,要說Git索引包含「索引條目」,實際上根本沒有任何用處,特別是對於尋求真理的開發人員...最後,樹不會被索引緩存 - 引用可以緩存樹。

該索引不是二進制的,因爲它是「索引的」(因爲海報在上面的評論中已經結束) - 而且它本身並不是二進制的,因爲「性能原因」本身。索引中的所有內容都可能是,使用純文本文件表示 - 即使二進制索引文件中表示的標誌和位也可以表示爲ASCII。它是二進制的,因爲包含按位標誌的二進制文件格式能夠更高效地使用磁盤空間。而且,對於Linus來說,它可能是二進制的,以便通過易於訪問文本編輯器的新手阻止篡改。

*新信息* 該指數的版本4實現路徑壓縮,節省高達約50%大型回購索引的大小。 (來源:https://git-scm.com/docs/git-update-index)這種壓縮方式本身就適用於二進制格式的索引文件。

+1

有趣。 +1。我試圖修改我的答案,使其不那麼不正確或無意義。 – VonC 2017-04-28 07:18:10

相關問題