我知道 SVN(Subversion)会存储文件的增量,以便高效地存储数据。但是 Git 稍微复杂一些。我想知道的是,如果我要存储纯 HTML、图像和 js 文件,并使用其中任何一个来跟踪它们的更改,哪一个会带来更好的存储效率,为什么?我对 HTML 文件特别感兴趣。一开始应该没有太大区别。但是,随着网站的变化,尤其是主页的变化,差异应该是显而易见的。
我可以尝试两种方法并进行比较,但是要花很多时间才能看到任何真实的结果。因此,我决定看看哪一个在理论上应该更有效。
答案1
git
绝对会赢,毫无疑问。对于包含文本文件(如 HTML)的 git 存储库,元数据包含所有历史目录中的.git
快照将小于整个树的检出快照。(您可能希望git gc
偶尔运行一次,但git
如果它注意到对象存储不是非常优化,它将自动运行它)。
另一方面,对于 SVN,即使是简单的签出也至少需要 2 倍 - 它将包含所有树以及.svn
目录中的完整备份,并且不会包含任何历史记录 - 并且它将仍然依赖在工作服务器上。
看看文章存储库格式很重要:
Mozilla CVS 存储库为 2.7GB,导入 Subversion 后增长至 8.2GB。在 Git 下,它缩小至 450MB。考虑到 Mozilla 检出文件约为 350MB,因此,在仅多一点的空间内保存整个项目历史(从 1998 年开始)是相当不错的。
这很难解释,但只要你稍微用过 git,你就会被它不可思议的速度所震撼。一切都是很快,它改变了您对源代码控制的看法以及您对源代码控制的操作。
git 还有许多其他优点,但我显然无法在这里全部介绍。例如,我建议阅读一些关于它的好书普罗吉特。