12

[这个问题本质上是在 rebase 期间重新打开 git crash,但从未有答案]

我正在尝试从我的“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
4

3 回答 3

1

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

git checkout secc

正如您所指出的,在变基失败后,您有两个选择:

  1. 如果不需要变基,请使用“git merge main”
  2. 获得更大的机器并重试“git rebase main”

您没有实际的选择来忽略 0.5GB 文件,执行 rebase,然后取回这些 giga 文件。

于 2012-04-26T14:16:56.737 回答
1

在评论中,您说过对包含更多内容(在本例中为 32GB)的计算机执行相同操作,内存已解决了该问题。基于此,我会得出结论,您在第一次尝试使用的机器上可用的内存太少。

于 2012-04-26T21:09:05.913 回答
0

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

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

如果这些文件发生更改,这将导致合并冲突,您必须弄清楚如何处理它们。检查 gitattributes 和 rebase 文档以了解其他合并策略,我什至不打算在这里命名危险的策略。

我不确定这是试图让整个核心运行起来的实际合并,但它似乎值得一试。

于 2012-05-06T22:55:44.510 回答