GitLab Migration文件大小的变化,为什么?

时间:2017-09-15 20:08:50

标签: git

我目前正在将许多项目从一个gitlab服务器转移到另一个。出于某种原因,当使用URL导入git repo时,它在添加新项目时所具有的功能,总文件大小与原始文件大小不同,但差别很小但仍然不同。我不能给图片,但我会给一个例子我将称为exampleProj的项目是3.3MB,当我导入它时,它变成了3.4MB。另一个例子是exampleProj2是2.1MB,导入的是1.2MB。在所有新的导入中,它们都具有相同数量的提交,分支,标签等。如果任何人有任何类型的输入将非常有用。

1 个答案:

答案 0 :(得分:3)

没有任何事情被打破

好消息是,只要您的所有分支和标签都移动,您就可以确信您的整个历史记录都已完整迁移。 (如果所有位都没有正确加起来,git肯定会告诉你)

Git正在做它的工作

在引擎盖下,git将所有对象保存在内部数据库中。此数据库的内容(以及一些元数据)确定GitLab服务器上的repo大小。从服务器迁移到服务器将始终保留数据库中的所有对象,但git内部优化不保证磁盘上的大小相同:

有时回购会变得更大

在内部,git直接在文件系统中存储新对象(zlib压缩),但将文件系统中的数千个(或更多次,数十万或数百万)对象存储为单个文件效率非常低。

相反,git会定期“打包”对象。这种包装的两个主要目标是节省空间和性能。

因为git存储整个文件而不仅仅是diff,所以将类似文件分组在一起将允许它们以更高的比率进行压缩。 (这就是为什么git repo与svn repo相比通常具有大致相同或更小的占用空间,尽管svn仅存储大多数提交的差异。)

它还可以智能地组织包文件,以便快速有效地访问它们。这种情况会在后台定期发生(每隔几千个对象),只是为了让事情变得更快。

迁移回购时,将使用相同的流程重新组织所有包文件,这可能会导致回购邮件大小出现轻微波动。

有时回购会变小

Git也让实际上很难丢失数据。鉴于默认配置,git将保留所有在垃圾收集器清除它们之前大约90天不再可访问的对象。这包括已删除的分支上的提交和对象以及与这些对象相关的大量日志数据。

克隆存储库或将其迁移到另一台服务器,不包含任何无法访问的对象。此外,git将在另一端进行重新打包,之前位于文件系统中的松散对象将被放入包文件中并压缩在一起。