2010-06-22 102 views
26

我在共享主机上托管一个git repo。我的回购未必有几个它非常大的文件,每次我尝试现在运行在回购“混帐气相色谱法”的时候,我被任务共享托管服务提供商使用了太多的内存杀害。有没有办法限制git gc可以消耗的内存量?我的希望是,它可以交换内存使用的速度,只需要更长的时间来完成工作。有没有办法限制“git gc”使用的内存量?

+1

postimum相关:http://stackoverflow.com/a/10293304/274502 – cregox 2012-08-29 21:00:59

+0

是的,有一个类似的问题在Dreamhost(这个问题被标记)。没有那么多的情况下,当'git'死亡,但'darcs'(另一个VCS)总是被杀死,所以它在http://Dreamhost.com上无法使用。 – 2015-02-25 20:26:40

回答

14

是的,看看在帮助页面git config,并期待在pack.*选项,具体pack.depthpack.windowpack.windowMemorypack.deltaCacheSize

为git的需要映射每个对象到内存中,因此一个非常大的对象会导致大量的内存使用,而不考虑窗口和三角洲缓存设置这不是一个完全精确的尺寸。

你可能有更好的运气打包本地和“手动”传输包文件到远程端,添加一个.keep文件,以便远程git永远不会尝试彻底重新包装一切。

5

你可以使用关闭三角洲属性禁用增量压缩那些路径名的只是斑点:

foo/.git/info/attributes(或foo.git/info/attributes如果它是一个纯仓库)(见gitattributes三角洲条目,以gitignore对于模式语法):

/large_file_dir/* -delta 
*.psd -delta 
/data/*.iso -delta 
/some/big/file -delta 
another/file/that/is/large -delta 

这不会影响存储库的克隆。影响其它储存库(即克隆),放属性中一个.gitattributes文件,而不是(或者除了)info/attributes文件。

+0

这是迄今为止关于大型文件最有用的答案。谢谢。我有一些PSD的回购,并且它曾经需要千兆字节的内存来做一个git gc,现在它需要100MB的内存。凉。 – 2016-10-29 14:14:49

30

我从这次link指令。建议与Charles Baileys一样的想法。

命令的副本是在这里:

git config --global pack.windowMemory "100m" 
git config --global pack.packSizeLimit "100m" 
git config --global pack.threads "1" 

这与共享的托管帐户为我工作的HostGator的。

+2

谢谢!这适用于我,但我认为在第二行有一个错字 - 没有SizeLimit选项;它应该阅读:git config --global pack.packSizeLimit“100m” – Max 2012-02-01 18:29:20

+1

这工作完美。如果它一开始不起作用,请在windowMemory和packSizeLimit上设置一个下限。就我而言,25米是最佳选择。 – jsapara 2012-08-08 22:35:17

+0

我更改了选项名称。原来的链接被破坏,不知道在哪里指向它。 – phunehehe 2013-09-23 16:16:45

8

Git的重新包装的内存使用量是:(pack.deltaCacheSize + pack.windowMemory) × pack.threads。相应的默认值是256MiB,无限制,nproc。

增量缓存没有用:大部分时间花费在滑动窗口上计算增量,其中大部分都被丢弃;缓存幸存者以便它们可以重复使用一次(写入时)不会改进运行时。该缓存也不在线程之间共享。

默认情况下,窗口存储器通过pack.windowgc.aggressiveWindow)的限制。限制包装的方式是一个坏主意,因为工作集的大小和效率会有很大差异。最好将两者都提高到更高的值,并依靠pack.windowMemory来限制窗口大小。

最后,线程有分裂工作集的缺点。降低pack.threads并增加pack.windowMemory,这样总数保持不变应该会延长运行时间。

重新包装有其他有用的可调参数(pack.depth,pack.compression,位图选项),但它们不影响内存使用。

+0

似乎并不完全真相?你有一个主意:http://stackoverflow.com/questions/42175296/git-gc-uses-a-lot-of-memory-even-i-limited-it – Alex 2017-02-11 14:01:04

相关问题