我注意到我的mercurial回購有一個.hg \ store \ dh目錄。該目錄的目的是什麼?在mercurial中,什麼是.hg store dh目錄?
此外,我注意到該目錄中的目錄名稱只有8個字符。這似乎是一個操作系統上允許255個字符長度的目錄名稱的問題。
斯蒂芬
我注意到我的mercurial回購有一個.hg \ store \ dh目錄。該目錄的目的是什麼?在mercurial中,什麼是.hg store dh目錄?
此外,我注意到該目錄中的目錄名稱只有8個字符。這似乎是一個操作系統上允許255個字符長度的目錄名稱的問題。
斯蒂芬
的dh
文件夾用於fncache
,克服了有限的文件名的問題。基於文檔發現here,
被散列被存儲在目錄「DH」內部 「.hg /存儲」的所有路徑。非哈希路徑存儲在'.hg/store/data'內。
使用的散列是經過mercode.filelog.encodedir預編碼的'.hg/store'下的直接編碼的 路徑的sha1摘要(40個字符)。
對於hashencoded路徑,第一n 目錄層次的前8個字符截取(轉換爲小寫),其中n是 稍微適應如果空間允許使用更多的水平(見 store.hybridencode)。如果空間允許,則在輸入路徑的文件名 中填充散列 值之前的文件名以填充小寫轉換後的字符。
正如你所看到的,可以進行摺疊多個文件,從不同的輸入路徑的目錄 始發到同一 編碼的路徑目錄的路徑編碼。文件名的sha1摘要部分確保 文件名不同,並且不會發生名稱衝突。
因此不,8個字符不是問題,因爲散列方法解決了含糊問題。