Tại sao git liên tục nói với tôi rằng đó là "Tự động đóng gói kho lưu trữ trong nền để có hiệu suất tối ưu"?


100

Lưu ý : Tôi không nghĩ đây là bản sao của câu hỏi này , câu hỏi này đang nói về một gói không nền bị treo git với một thông báo lỗi khác một cách tinh vi .


Trong một trong các kho lưu trữ git của tôi, mỗi lần tôi gọi (ví dụ) git fetch, git sẽ in:

Auto packing the repository in background for optimum performance.
See "git help gc" for manual housekeeping.

Nó dường như in điều này mọi lúc nếu tôi thực hiện git fetchlặp đi lặp lại, ngay cả khi không có thay đổi và không có gì git fetchđể làm. Điều này không có nhiều ý nghĩa đối với tôi. Nó dường như cũng xảy ra với các hoạt động mạng khác, chẳng hạn như git pushgit pull.

Lệnh quay trở lại lời nhắc ngay lập tức mà không có đầu ra nào nữa và tôi không thể tìm thấy bất kỳ quy trình git nào đang chạy trên máy của mình. Nó dường như chỉ xảy ra với kho lưu trữ này và chỉ trên máy này. git config -l | grep gckhông trả lại gì.

Tôi có thể làm gì để chẩn đoán hoặc khắc phục sự cố này?

$ git --version 
git version 2.0.1

Tôi đang sử dụng OS X 10.9.


Có vẻ như cùng một vấn đề với câu hỏi bạn đã liên kết, nhưng chỉ xảy ra đủ nhanh để không bị treo.
Holloway


Trengot, tôi không nghĩ vậy. Thông báo lỗi khác biệt một cách tinh tế - nó đề cập đến "nền".
Andrew Ferrier

Trengot, xin lỗi, bạn đã đúng, nó có liên quan (liên kết thứ hai). Cảm ơn con trỏ, hãy xem câu trả lời của tôi bên dưới để biết chi tiết.
Andrew Ferrier

Câu trả lời:


167

Tôi đã tìm thấy giải pháp từ nhận xét thứ hai mà bạn cung cấp, Trengot, cảm ơn. Hóa ra là tôi đã có một số đốm màu lủng lẳng ở trong .git/objects/17và do đó kích hoạt việc đóng gói:

$ git fsck
dangling blob d9ff0aeac4aa8b4e0907daed675ebf60278bc977
dangling blob dbff2d073741f9775c815d4a3c623736af224dad
dangling blob e1ffbab1c5b985cd1cd3bc0281075ea2ed80744a
dangling blob fdff59878ccb3a75689f4acca615cfb635288774

Điều này đã làm sạch chúng:

$ git gc --prune=now

Hãy lưu ý, theo bình luận của Henrik dưới đây, điều này có thể hơi nguy hiểm. Bảo trọng!


19
Cảm ơn! Điều này dường như làm việc cho tôi. Hãy biết rằng nó --prune=nowcó một chút nguy hiểm. Theo mặc định, --prunesẽ giữ lại 2 tuần các đốm màu lơ lửng, có nghĩa là nếu bạn vô tình thực hiện rebase không chính xác 5 phút trước hoặc đã xóa một nhánh ngày hôm qua, bạn có thể khôi phục. Khi bạn chạy lệnh này, bạn sẽ mất tất cả các blog treo lơ lửng cho đến bây giờ - không phải 2 tuần trước. Ngoài ra, có vẻ như bạn không bao giờ nên chạy nó trong khi thực hiện các lệnh Git khác trong một thiết bị đầu cuối khác, nếu không repo của bạn có thể bị hỏng.
Henrik N

3
Bạn đã cứu một ngày của tôi
Owen Chen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.