【问题标题】:Do duplicate files increase git repo size? [duplicate]重复文件会增加 git repo 的大小吗? [复制]
【发布时间】:2019-03-22 14:08:51
【问题描述】:

如果我在不同的目录中有多个文件,文件名不同,但内容完全相同...每个副本会增加 repo 大小,还是将它们存储为“一个”文件?

例如,如果文件是100 kB,并且它在存储库中被复制了 10 次(相同的内容,不同的目录,不同的文件名)。存储库是100 kB 还是1000 kB


注意:我自己可以对此进行半测试,如果我通读链接的可能重复项中的长答案,我似乎最终可以找到答案.但是,我想从知道他们在说什么的人那里得到一个快速、简短和清晰的答案,我希望它是谷歌搜索的第一个结果。不知道会不会是这样,但是当我搜索这个问题的答案时,我的搜索结果中肯定没有任何立即明确的答案。

【问题讨论】:

  • 是什么阻止你自己尝试?
  • 没什么,但是 git repos 包含很多文件,我不确定它们都做什么或它们是如何连接的,所以不确定要查找。所以想问问可能确实知道git如何处理重复文件的人会更容易。
  • 你可以创建一个只有两个文件的仓库,看看会发生什么。这样,您就不会拥有包含“大量文件”的存储库。第一次,使用两个相同的文件创建它。第二次,用两个不同的文件创建它。
  • 请注意,重复文件不同于几乎但不完全重复,这是stackoverflow.com/questions/25661952/…的重点

标签: git


【解决方案1】:

不.....git只保存内容一次,然后它会根据需要多次指向它....所以如果你有相同的内容100倍不同的名称/不同路径,文件将被保存一次,然后你将有 100 个指向它的指针。

【讨论】:

  • 酷,谢谢。这就是我所希望和期待的,但找不到它清楚地表达出来。 ?
  • 所以为了清楚起见,如果我有包含 Hello, World! 的 fileA.txt 和还包含 Hello, World! 的 fileB.txt ,则回购的大小不会是两者的大小,而是而不是其中一个文件?
  • @dimwittedanimal 在这些比例下,当元数据(文件名和哈希)大于文件大小时,repo 将增加超过文件大小,但假设你有文件中的 War and Peace 文本,repo 只会增加将文件引用添加到树所需的几个字节。
  • 嗯,不完全是因为你仍然有树对象来组成路径,特别是如果你把文件放在不同版本的不同位置......但至少在 repo 增加大小方面因为您多次拥有相同的内容不会发生,因为内容只会保存一次。
  • 这里有一个问题与包文件有关。通常,您将拥有一个包文件,其中包含一个具有唯一哈希 ID 的大文件。但是,如果您使用“保留”文件来保留一个包,即使它被“重新打包”到一个新包中,那么具有唯一哈希 ID 的一个大文件可能会出现在 多个包文件(新的,加上保留的旧文件)。
【解决方案2】:

您可以使用git rev-list --objects --all 显示存储在数据库中的所有对象。如果文件are part of the same pack,则重复文件内容将仅显示一次。

例如在具有a.txtb.txt 的新仓库中,它们是相同的,首先在两个单独的提交a.txt 中提交:

$ md5sum *.txt
3ac628079d9cf781d155c26dabaade91  a.txt
3ac628079d9cf781d155c26dabaade91  b.txt

$ git rev-list --objects --all
f0b4bdc93a65012069d6e96d54624a34ee1d1552
9f8a9ceb3b5f22e67b86b6d57837def070802baf
a19cc397dae6a39fc4f9fbdbd4bf9da05c00bef0 
d05accac53d462a927e7787edee5fb97db24c386 a.txt
d5bc7e22610744c7717f65d3ec60957583469857 

【讨论】:

猜你喜欢
  • 2013-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-04
  • 2012-03-06
  • 2018-06-28
  • 1970-01-01
相关资源
最近更新 更多