多个0.5GB二进制文件的GIT Rebase致命

时间:2012-04-15 23:32:20

标签: git git-rebase

[这个问题基本上是重新开放git crash during rebase从未得到答案]

我正在尝试从我的'secc'分支变换为:

$ git rebase main
First, rewinding head to replay your work on top of it...
fatal: Out of memory, malloc failed (tried to allocate 553656577 bytes)         # about 0.5 GB
$ git rebase --abort
No rebase in progress?

失败与两个分支及其共同祖先有三个.dat文件的事实有关,每个文件都是0.5 GB。

在这种情况下如何进行变基?

其他信息:

  • 'git merge main'工作正常。
  • 使用'* .dat merge = keepTheirs'扩充.gitattributes并不能阻止致命。
  • * .dat文件确实不同。
  • 我愿意删除* .dat文件以重新绑定其他文件然后再添加* .dat。但是怎么样?
  • 我正在使用git 1.7.9.4

3 个答案:

答案 0 :(得分:1)

你不知道你的机器是否足够大,直到'git rebase'失败,但到那时你的目录处于一个状态。在rebase期间,另一个分支被检出(主要),以便'secc'更改可以应用于它。恢复,继续:

git checkout secc

如果你已经注意到你有两个选择,那就是在篮板上失败了:

  1. 如果不需要rebase,请使用'git merge main'
  2. 获取更大的机器并重试'git rebase main'
  3. 您没有实际的选择来忽略0.5GB文件,执行rebase,然后重新获取这些giga文件。

答案 1 :(得分:1)

在评论中你曾说过,对于包含更多内容的计算机(在本例中为32GB),内存已经解决了这个问题。基于此,我得出的结论是,您在第一次尝试使用它的机器上只有太少的内存可用。

答案 2 :(得分:0)

尝试将这些内容放入.git/info/attributes

# whatever gets them...
yourfile binary -delta merge=binary
*.yourext binary -delta merge=binary

如果这些文件发生变化,那将导致合并冲突,你必须弄清楚如何处理它们。检查gitattributes和rebase doc以获取其他合并策略,我甚至不会在这里命名危险的。

我不确定这是实际合并试图从运行中获取整个内核,但似乎值得一试。