移动git存储库中的大量大文件



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

我使用git mv命令来"重命名"文件的路径,但它似乎效率低下,因为提交的大小(实际diff大小)非常大,与rm, git add相同

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


谢谢你的回答。

通知你,以下一系列命令将生成文件bar

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

,我认为git做了rmadd。请问这个信息和实际尺寸有没有关系?

根据设计,如果您在Git存储库中移动文件而不更改内容,则创建提交将只存储新的元数据(也称为树对象)来表示新的文件位置。由于内容没有改变,Git不需要创建新的blob对象来存储文件内容。所以"commit size"应该很小。

既然你说diff大小是巨大的,我想一些文件内容随着重定位被修改。这可能是"提交大小"非常大的原因。

在这两种情况下,您都可以尝试使用命令git gc --prune --aggressive

缩小.git目录的大小。编辑:

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

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

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

看一下git-annex,也许它适合你。

最新更新