Kurangi ukuran repositori git

290

Saya mencoba mencari tutorial yang bagus untuk mengurangi ukuran repo, tetapi tidak menemukannya. Bagaimana cara mengurangi ukuran repo saya ... ini sekitar 10 MB, tetapi masalahnya adalah Heroku hanya memungkinkan 50 MB dan saya tidak bisa menyelesaikan aplikasi saya.

Saya menambahkan tersangka biasa (log, vendor, doc dll) ke .gitignore sudah. Meskipun saya baru saja menambahkan .gitignore.

Ada saran?

dikirim-hil
sumber
1
Saya baru saja melakukannya dan membawanya ke 2,2 mb ... terima kasih banyak! Meskipun itu tampaknya tidak mengurangi ukuran repo pada Heroku..hmm
dikirim-hil
11
Dorong menggunakan --force. Itu akan menimpa isinya bahkan jika tidak ada perubahan (tidak ada komitmen baru, dll.)
Marcin Gil
1
@ MarscinGil - Di bawah ini, VonC menyatakan Anda perlu akses ke server untuk membersihkan server jarak jauh (jika saya menguraikannya dengan benar).
jww
1
Hanya komentar untuk membantu pembaca lain jika mereka tidak tahu harus menambahkan apa .gitignore, ada layanan bagus di gitignore.io yang akan membantu Anda mengatur yang baik .gitignoreberdasarkan pada lingkungan dev Anda.
Blairg23

Jawaban:

351

git gc --aggressiveadalah salah satu cara untuk memaksa proses prune berlangsung (untuk memastikan git gc --aggressive --prune=now:). Anda memiliki perintah lain untuk membersihkan repo juga. Jangan lupa, kadang-kadang git gcsaja dapat meningkatkan ukuran repo !

Ini dapat juga digunakan setelah a filter-branch, untuk menandai beberapa direktori yang akan dihapus dari sejarah (dengan perolehan ruang lebih lanjut); lihat di sini . Tapi itu berarti tidak ada yang menarik dari repo publik Anda. filter-branchdapat menyimpan referensi cadangan.git/refs/original , sehingga direktori juga dapat dibersihkan.

Akhirnya, sebagaimana disebutkan dalam komentar ini dan pertanyaan ini ; membersihkan reflog dapat membantu:

git reflog expire --all --expire=now
git gc --prune=now --aggressive

Solusi yang bahkan lebih lengkap, dan mungkin berbahaya, adalah untuk menghapus objek yang tidak digunakan dari repositori git

VONC
sumber
Dalam skenario lain, lihat juga stackoverflow.com/questions/1029969/…
VonC
1
Catatan untuk diri sendiri: jangan lupa cabang jauh: stackoverflow.com/questions/11255802/…
VonC
1
Catatan untuk diri sendiri: jangan lupa tag jarak jauh
saiyancoder
1
Selain referensi jarak jauh, reflog adalah hal lain yang dapat menyebabkan referensi yang ingin Anda hapus disimpan. stackoverflow.com/q/27489761/1072626
vossad01
1
@jww Saya mengkonfirmasi ini murni operasi lokal. Tidak ada hubungannya dengan ukuran repo jarak jauh. Anda memerlukan akses langsung ke server repo jarak jauh untuk melakukan hal yang sama.
VonC
94

Terima kasih atas balasan Anda. Inilah yang saya lakukan:

git gc
git gc --aggressive
git prune

Tampaknya itu berhasil. Saya mulai dengan sekitar 10.5MB dan sekarang lebih dari 980KBs.

dikirim-hil
sumber
8
pruneselalu dijalankan oleh gc(dengan 2 minggu yang lalu default).
Cas
117
Anda dapat menjalankan git gc --aggressive --prune=now
ketiganya
1
Tapi, ketika saya menghapus repo kemudian mengkloningnya lagi, ukurannya masih besar. Bagaimana kamu menangani itu?
cwtuan
2

Dalam kasus saya, saya mendorong beberapa file besar (> 100Mb) dan kemudian menghapusnya. Tetapi mereka masih dalam sejarah repo saya, jadi saya harus menghapusnya juga.

Apa triknya adalah:

bfg -b 100M  # To remove all blobs from history, whose size is superior to 100Mb
git reflog expire --expire=now --all
git gc --prune=now --aggressive

Kemudian, Anda perlu mendorong kekuatan pada cabang Anda:

git push origin <your_branch_name> --force

bfg adalah alat yang dapat diinstal di Linux dan macOS menggunakan minuman:

brew install bfg
vinzee
sumber