2011-10-07 39 views
7

Tôi có số lượng tệp khá lớn trong kho lưu trữ. Do đó git đôi khi bị treo do thiếu bộ nhớ ngoại lệ trong các thay đổi rebasing.lỗi git trong khi rebase

Ví dụ:

git checkout feature 
git rebase master 
(nasty out of memory exception) 
..... 

Vì vậy, một khi tôi đã ngoại lệ đó, tôi đã cố gắng một lần nữa rebasing

git rebase master 

Và nó nói với tôi rằng chi nhánh feature được cập nhật. Điều đó có vẻ kỳ lạ, khi rebase kết thúc với ngoại lệ.

Có cách nào để tránh ngoại lệ oom không? Có thể bằng cách nào đó nói với git sử dụng lượng bộ nhớ nhỏ hơn. Trường hợp ngoại lệ này có thể là nguyên nhân gây ra tham nhũng kho lưu trữ không? Nếu nó gây ra tham nhũng là có cách nào an toàn cuộn lại những thay đổi được thực hiện trong rebase để nhà nước trước khi git rebase master được gọi là?

+0

Ngoại lệ nói gì? Có thể là quan trọng. – Chris

+0

Tôi không thể tạo lại ngay bây giờ. Nhưng nó là như sau: 'blablabla ra khỏi bộ nhớ, blablabla, malloc không thành công (không thể phân bổ 100500 byte)' –

Trả lời

2

Có thể bạn đang chạy trên máy ảo hoặc đang lưu trữ một số tệp lớn. file Lọc chi nhánh ra lớn nếu bạn có thể hoặc vết sưng lên bộ nhớ:/

Không khác nhiều tôi có thể thêm, trừ khi tôi có biết thêm ..

+1

Điều gì về tham nhũng kho lưu trữ? –

+0

Bạn có ý gì khi nói 'tệp lớn'? Git có cần lưu trữ tất cả các tệp từ kho lưu trữ trong ram để rebase thay đổi không? –

+0

Không chắc chắn. Nhưng nó có thể đang cố gắng. Tệp lớn nhất bạn có trong lịch sử là bao nhiêu? –

0

git rebase $BASE bắt đầu bằng cách thực hiện git reset --hard $BASE

Nếu sự cố bị lỗi do hết bộ nhớ sau đó, điều đó có nghĩa là bạn bị bỏ lại với yo con trỏ chi nhánh ur trỏ đến $BASE thay vì cam kết mà nó trỏ đến trước đây.

Đó là lý do tại sao bạn được thông báo rằng feature được cập nhật khi bạn git rebase master một lần nữa, vì feature đã trỏ đến cùng một cam kết như master sau khi hỏng bộ nhớ.

Để thiết lập lại chi nhánh của bạn trở lại với bản gốc cam bạn đã truy cập trước, chạy

git reset --hard [email protected]{1}`. 

Hoặc nếu bạn đã thực hiện các công việc khác trên cành sau khi vụ tai nạn, chạy git reflog để tìm bản gốc cam kết.

cũng Undoing a git rebase


Xem Sau khi bạn có chi nhánh của bạn trở lại với bản gốc cam kết, bạn có thể thử

git rebase -m master 

mà sẽ cố gắng một chiến lược rebase khác nhau mà có thể sử dụng ít bộ nhớ nếu bạn có các tệp nhị phân lớn.

Các vấn đề liên quan