对Git中的大文件有效地进行小的更改?

问题描述 投票:0回答:2

假设您有一个100MB的文本文件,并且希望将对该文件的更改定期提交给git。变化很小且频繁。

是否有任何有效的方法来使用Git处理此问题?

暂存和提交文件的常规方法将使git再次读写整个文件,而不管您的更改有多小。

是否有一种仅使用更改的“ diff”进行提交的方法?

git diff
2个回答
1
投票

Git对象有2种格式-松散的和打包的。最初添加并提交文件时,它会添加另一个Loose对象,这是一个完整的blob。但是Git也可以将其变成打包对象(例如在推送时),该对象存储差异。在此处查看答案:What are the "loose objects" that the Git GUI refers to?

提交文件后,您可以运行git gc,以便Git打包并删除旧的Loose对象。不知道它是否会立即删除旧的,还是仅在一段时间后才开始执行。


0
投票

是否有任何有效的方法来使用Git处理此问题?

编号

任何Git对象的哈希ID是其内容的加密校验和。例如,您可以通过保存前N兆字节的校验和来稍微加快计算速度,这样,如果将50 MB的某些字节更改为100 MB对象,则可以从已知的50开始计算新的Blob对象校验和。 MB校验和,因此仅​​计算校验和的一半。但是您仍然需要存储整个松散的对象,或者也实现自己的打包文件算法。

Git在处理大量较小文件方面要好得多。例如,您可以存储1000个100-kB文件,而不是1个100-MB文件。如果需要在中间修改一些字节,则只需更改一个文件,或者最多更改两个文件,每个文件都较小,并且将变为较小的松散对象,可以相对快速地求和。

© www.soinside.com 2019 - 2024. All rights reserved.