12

[この質問は本質的に、答えがなかったリベース中に git クラッシュを再開することです]

「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?

この失敗は、ブランチとその共通の祖先の両方に 3 つの .dat ファイルがあり、それぞれが 0.5 GB であるという事実に関連しています。

この状況でリベースを行うにはどうすればよいですか?

追加情報:

  • 「git merge main」は問題なく動作します。
  • 「*.dat merge=keepTheirs」で .gitattributes を拡張しても、致命的な問題は回避されませんでした。
  • *.dat ファイルは異なります。
  • *.dat ファイルを削除して他のファイルをリベースし、*.dat を追加し直します。しかし、どのように?
  • 私はgit 1.7.9.4を使用しています
4

3 に答える 3

1

コメントで、より多くのメモリ (この場合は 32GB) を搭載したコンピュータで同じことを行うと、問題が解決したと述べました。それに基づいて、最初に試したマシンでこれを行うには、使用できるメモリが少なすぎると結論付けます。

于 2012-04-26T21:09:05.913 に答える
1

「git rebase」で失敗するまで、マシンが十分に大きいかどうかはわかりませんが、その時点までに、ディレクトリは変更された状態になります。リベース中に、「secc」の変更を適用できるように、別のブランチ (メイン) がチェックアウトされました。回復して、次の手順に進みます。

git checkout secc

あなたが指摘したように、リベースに失敗したので、2つのオプションがあります:

  1. リベースが必要ない場合は、「git merge main」を使用してください
  2. より大きなマシンを入手して、「git rebase main」を再試行してください

0.5GB のファイルを無視し、リベースを実行してからそれらのギガ ファイルを取り戻すという実際的なオプションはありません。

于 2012-04-26T14:16:56.737 に答える
0

これらを入れてみてください.git/info/attributes

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

これらのファイルが変更された場合、マージの競合が発生し、それらをどうするかを考え出す必要があります。他のマージ戦略については、gitattributes と rebase doc を確認してください。ここでは、危険なものに名前を付けるつもりはありません。

実行中のコア全体を取得しようとする実際のマージかどうかはわかりませんが、試してみる価値があるようです。

于 2012-05-06T22:55:44.510 に答える