Basis saya saat ini memiliki ukuran total sekitar. 200MB.
Tapi folder .git saya memiliki ukuran luar biasa 5GB (!). Karena saya mendorong pekerjaan saya ke server eksternal, saya tidak memerlukan riwayat lokal yang besar ...
Bagaimana saya bisa mengecilkan folder .git untuk membebaskan sebagian ruang pada notebook saya? Bisakah saya menghapus semua perubahan yang lebih lama, dari 30 hari?
terima kasih banyak atas bantuannya :)
git count-objects -v
?Jawaban:
Anda seharusnya tidak menghapus semua perubahan yang lebih lama dari 30 hari (saya pikir itu entah bagaimana mungkin mengeksploitasi git, tetapi benar-benar tidak direkomendasikan)
Anda bisa menelepon
git gc --aggressive --prune
, yang akan melakukan pengumpulan sampah di repositori Anda dan memangkas objek lama. apakah Anda memiliki banyak file biner (arsip, gambar, file executable) yang sering berubah? itu biasanya mengarah ke folder .git yang sangat besar (ingat, git menyimpan snapshot untuk setiap revisi dan file biner terkompresi dengan buruk)sumber
git gc --aggressive
dianggap praktik yang buruk. Lebih baik digunakangit repack -a -d --depth=250 --window=250
.git gc --aggressive
panggilan dikemas ulang dengan ukuran jendela 250 (lih. halaman manual) dan kedalaman 250 (lih. kode sumber). --aggressive juga menambahkan-f
saklar, untuk membuang dan mengulang semua operasi delta sebelumnya (seperti juga disebutkan dalam tautan)git gc --aggressive --prune
ini membawa ke 19MB.--prune
juga tidak perlu karena menjadi default sejakv1.5.5-rc0
(komit 25ee973 , Maret 2008).Inilah yang dikatakan pencipta git Linus tentang cara mengecilkan git repo Anda:
sumber: http://gcc.gnu.org/ml/gcc/2007-12/msg00165.html
Apakah ini akan menghilangkan data biner yang menjadi yatim di repo saya? "git repack" tidak akan menghapus gambar atau data biner yang telah Anda periksa di repo Anda dan kemudian menghapusnya. Untuk menghapus data semacam itu secara permanen dari repo Anda, Anda harus menulis ulang riwayat Anda. Contoh umum dari hal itu adalah ketika Anda secara tidak sengaja memeriksa kata sandi Anda di git. Anda dapat kembali dan menghapus beberapa file tetapi kemudian Anda harus menulis ulang riwayat Anda dari saat itu hingga sekarang dan kemudian memaksakan dorongan lalu repo baru ke tempat asal Anda.
sumber
fatal: Out of memory, malloc failed (tried to allocate 39763130 bytes)
repack
secara lokal, melakukan commit dan push, apakah psikiater akan dibuat menjadi remote juga?Saya mencoba ini tetapi repositori saya masih sangat besar. Masalahnya adalah saya tidak sengaja memeriksa beberapa file besar yang dihasilkan. Setelah beberapa pencarian saya menemukan tutorial yang bagus yang membuatnya mudah untuk menghapus file besar yang dihasilkan. Tutorial ini memungkinkan saya untuk mengecilkan repositori saya dari 60 MB menjadi <1 MB.
sumber
5GB vs 200MB agak aneh. Coba lari
git gc
.Tapi tidak, kecuali jika Anda membagi repositori menjadi modul, Anda tidak bisa mengurangi ukuran
.git
direktori.Setiap klon git repo adalah repositori lengkap yang dapat bertindak sebagai server. Itulah prinsip dasar kontrol versi terdistribusi.
sumber
Saya menggunakan git lebih sebagai mekanisme sinkronisasi daripada untuk riwayat versi. Jadi solusi saya untuk masalah ini adalah memastikan saya memiliki semua sumber saya saat ini dalam keadaan memuaskan, dan kemudian hanya menghapus .git dan menginisialisasi ulang repo. Masalah ruang disk terpecahkan. :-) Riwayat hilang :-( Saya melakukan ini karena repo saya menggunakan kunci USB kecil. Saya tidak ingin atau memerlukan seluruh riwayat saya. Jika saya memiliki metode untuk hanya memotong sejarah, saya akan menggunakannya.
Jika saya tertarik untuk menjaga riwayat saya, saya akan mengarsipkan repositori saat ini. Pada suatu saat nanti saya bisa mengkloning repositori asli, menyalin semua perubahan dari repo baru (mari kita asumsikan saya belum melakukan banyak (ada) mengubah nama atau menghapus). Dan kemudian buat satu komit besar yang akan mewakili semua perubahan yang dibuat dalam repo baru sebagai komit tunggal dalam repo lama. Apakah mungkin untuk menggabungkan sejarah? Mungkin jika saya menggunakan cabang dan kemudian menghapus objek yang tidak saya butuhkan. (Saya tidak cukup tahu tentang git internal untuk mulai bermain-main seperti itu).
sumber
Mencoba metode di atas, tidak ada yang berhasil dalam kasus saya (di mana saya secara tidak sengaja membunuh proses git selama push git) jadi saya akhirnya harus menghapus repo dan mengkloningnya lagi dan sekarang folder .git berukuran normal.
sumber