4

我的存储库有大量的大文件。它们主要是数据(文本)。有时,由于重构或打包,我需要将这些文件移动到另一个位置。

我使用git mv命令“重命名”文件的路径,但提交的大小(实际差异大小)非常大,与 , 相同,这似乎效率rm低下git add

还有其他方法可以减少提交大小吗?还是我应该将它们添加.gitignore到上游并作为 zip 文件上传到上游?


谢谢你的回答。

仅供参考,以下一系列命令将导致文件大小bar

git mv foo bar
git commit -m "modify"
git cat-file -s HEAD:bar

我认为 gitrmadd. 你能告诉我这个信息是否与实际尺寸无关吗?

4

2 回答 2

8

按照设计,如果您在 Git 存储库中移动文件而不更改内容,则创建提交只会存储新的元数据(也称为树对象)来表示新文件的位置。由于内容不变,Git 不需要创建新的 blob 对象来存储文件内容。所以“提交大小”应该相当小。

既然你说差异大小很大,我想一些文件内容会随着重定位而被修改。这将是“提交大小”很大的原因。

在这两种情况下,您都可以尝试使用以下命令缩小 .git 目录大小git gc --prune --aggressive

编辑 :

git mv foo bar
git commit -m "modify"
git cat-file -s HEAD:bar

这些命令创建了一个新的提交,但是由于 foo/bar 文件内容没有改变,Git 不会存储任何新的东西,除了新的文件名。实际上,在您的示例中,git cat-file -s HEAD:foo重命名之前和git cat-file -s HEAD:bar之后会给您相同的结果,因为它的内容相同(.git/objects 中的相同 blob)。我认为您误解了 git 在内部所做的事情。查看Git 对象以获得进一步的解释。

请记住,git 跟踪内容,而不是文件。

于 2013-05-30T21:38:51.847 回答
2

在 git 中移动东西不会改变存储库的大小。每个文件在存储库中只存储一次。如果您开始更改这些大文件,您只会增加存储库的大小。- 然后每个新版本单独存储。

看看git-annex,也许这对你来说是正确的。

于 2013-05-30T21:37:32.143 回答