Mengapa git terus mengatakan kepada saya bahwa ini "Otomatis mengemas repositori di latar belakang untuk performa optimal"?

104

Catatan : Saya tidak berpikir ini adalah duplikat dari pertanyaan ini , yang berbicara tentang paket non-latar belakang yang hang git dengan pesan kesalahan agak berbeda .


Di salah satu repositori git saya, setiap kali saya memanggil (misalnya) git fetch, git mencetak:

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

Tampaknya mencetak ini setiap kali jika saya melakukan git fetchberulang kali, bahkan ketika tidak ada perubahan dan tidak ada yang git fetchharus dilakukan. Ini tidak masuk akal bagiku. Ini juga tampaknya terjadi dengan operasi jaringan lain, seperti git pushdan git pull.

Perintah kembali ke prompt secara instan tanpa keluaran lebih lanjut, dan saya tidak dapat menemukan proses git yang berjalan di mesin saya. Tampaknya hanya terjadi dengan repositori ini, dan hanya di mesin ini. git config -l | grep gctidak mengembalikan apa-apa.

Apa yang dapat saya lakukan untuk mendiagnosis atau memperbaiki masalah ini?

$ git --version 
git version 2.0.1

Saya menggunakan OS X 10.9.

Andrew Ferrier
sumber
Sepertinya masalah yang sama dengan pertanyaan yang Anda tautkan, tetapi terjadi cukup cepat sehingga tidak tampak hang.
Holloway
Juga mungkin terkait
Holloway
Trengot, kurasa tidak. Pesan kesalahan sedikit berbeda - ia menyebutkan "latar belakang".
Andrew Ferrier
Trengot, maaf, Anda benar, itu terkait (tautan kedua). Terima kasih atas penunjuknya, lihat jawaban saya di bawah untuk detailnya.
Andrew Ferrier

Jawaban:

170

Saya menemukan solusi dari komentar kedua yang Anda berikan, Trengot, terima kasih. Ternyata saya memiliki beberapa gumpalan yang menggantung, yang ada di dalam .git/objects/17dan karenanya memicu pengepakan:

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

Ini membersihkan mereka:

$ git gc --prune=now

Sadarilah, sesuai komentar Henrik di bawah ini, ini mungkin sedikit berbahaya. Hati hati!

Andrew Ferrier
sumber
23
Terima kasih! Ini sepertinya berhasil untuk saya. Sadarilah bahwa --prune=nowini sedikit berbahaya. Secara default, --pruneakan menyimpan 2 minggu gumpalan yang menggantung, artinya jika Anda secara tidak sengaja melakukan rebase yang salah 5 menit yang lalu, atau menghapus cabang kemarin, Anda dapat memulihkannya. Setelah Anda menjalankan perintah ini, Anda kehilangan semua blog yang menjuntai hingga saat ini - bukan 2 minggu yang lalu. Selain itu, sepertinya Anda tidak boleh menjalankannya saat menjalankan perintah Git lain di terminal lain, atau repo Anda bisa rusak.
Henrik N
3
Anda menyelamatkan hari saya
Owen Chen