2014-10-28 69 views
0

當我檢查.hg文件夾的適當位置時,我有一個以Windows資源管理器顯示它的計數爲50.1 MB的回購。然後,我重命名了一個包含341個文件和4MB的文件夾,檢查了更改,現在回購數量爲54,5MB。我用下面的命令重命名:爲什麼重命名文件時,我的Mercurial HG回購會大幅增長?

hg rename -vf oldFolder newFolder 

怎麼了?我只是在改變引用,而不是在這裏克隆文件,我不是嗎?

編輯:如何我可以調試這個任何提示也讚賞。

+0

沒有錯。版本控制(如名稱所示)會保留整個歷史記錄。因此,即使更改似乎不包含任何數據,也會增加累積數據庫中的數據。你會看到與任何版本控制系統相同的效果。 – 2014-10-28 18:22:29

+0

我只是用git做了一個測試,那裏不是那種情況。 Repo size before:7.37MB,重命名後的repo size:7.29MB(不要問我如何*縮小*) – Nilzor 2014-10-28 18:46:01

回答

1

Mercurial不會有效地存儲重命名。

當文件初始存儲時,它們的全部內容被放入存儲庫(顯然)。稍後的修改只佔用diff的空間(應用一些壓縮)。

但是,存儲是使用所謂的「revlog」完成的。此更新記錄存儲文件的所有版本。重命名將創建一個新的更新日誌,其中'初始存儲'再次佔用整個文件的大小,而不是差異。

這不是一個固有的問題(所以很可能最終會被解決),但以一種很好的方式解決起來相當複雜。有關更多詳細信息,請參見this bug

Git以不同的方式存儲文件,它可以在沒有這種開銷的情況下處理重命名。這就是爲什麼你沒有看到任何增長。你看到的'收縮'最有可能與garbage collection有關。

1

作爲每hg rename命令的文檔:

hg rename [OPTION]... SOURCE... DEST 

aliases: move, mv 

rename files; equivalent of copy + remove 

    Mark dest as copies of sources; mark sources for deletion. If dest is a 
    directory, copies are put in that directory. If dest is a file, there can 
    only be one source. 

作爲記載,該重命名的命令是副本的等效,然後移除,並且其中所述文件是從複製的記錄。

相關問題