因此,最近,我重新整理了我公司主代码存储库中的文件,使其更加有序。这涉及将几乎每个文件移动到存储库中的不同位置,这是唯一的更改。这导致文件夹.hg
仅经过一次修订就从 16 GB 增长到 21 GB(+ 5 GB)。
为什么会发生这种情况?有没有什么方法可以避免这种情况并减少修订版本的大小?是的,我确实使用了移动命令,是的,我已经搜索过谷歌,但我没有得到任何结果来解释这一点,也没有提供任何方法来减少存储库的大小,除了将其拆分成多个存储库(但大小可能仍然相同)。
答案1
如果我正确理解了 hg 架构的话——
Mercurial 的历史存储格式对每个文件使用一个“修订日志”;每个新版本都附加到同一个日志文件中。(例如,“hello.c”的所有版本都保存在“.hg/store/data/hello.ci”中。)同一个修订日志中的邻近修订版本会进行增量压缩以节省空间(在同一文件的修订版本之间共享数据)。
然而,格式仍然没有是否有任何机制可以在属于不同的文件。因此,如果你之前在文件 A 中有一些数据,现在又在文件 B 中,那么它必须至少完整地存储在每个文件的 revlog。您可以在 Bugzilla 线程中看到与此相关的一些进展#883。
请注意,这hg move
不会重写历史记录。即使你将文件 A 重命名为文件 B,所有先前的修订仍会将其称为文件 A,因此存储库必须继续保留文件 A 和文件 B 的修订日志和B(一个包含旧修订版,另一个包含新修订版)。