Hapus file dari git repo

2

Saya membuat kesalahan besar.

Saya membuat repo dengan beberapa file. Saya membuat beberapa komitmen, semuanya bekerja dengan baik. Tapi kemudian saya menyadari, 2 file memiliki kesalahan yang sangat besar, yang membuat mereka berukuran sekitar 200 Mb, padahal seharusnya sekitar 2 Mb (tidak bercanda). Mereka berada di root commit. Saya berhasil mengubah komit root dengan file yang tepat, tetapi repo saya masih sekitar 500 Mb, yang membuatnya sangat sulit untuk dikelola. Jika saya reset ke root commit, file-file itu adalah file yang tepat.

Saya belum mendorong repo pusat karena ini. Hanya perlu selamanya untuk mengunggah 500 MB.

Jadi, saya bertanya-tanya bagaimana saya bisa menghapus file-file 200Mb dari repo, bahkan jika mereka tidak lagi dalam komit. Perintah mana yang harus saya gunakan? Haruskah saya menghapus file gumpalan terbesar? Apakah saya gila? Apakah saya membuat sesuatu yang benar-benar salah?

Terima kasih. Saya benar-benar terburu-buru.

[MEMPERBARUI]

Saya sudah menjalankan git gc, tetapi hanya mengurangi sekitar 40 Mb. Saya pikir file-file jahat itu masih ada, jadi saya tidak yakin apa yang harus dilakukan.

Hugo A
sumber
Apakah git gcakhirnya menghapus file-file itu?
Anton I. Sipos

Jawaban:

0

Cara termudah untuk mengecilkan repo lokal Anda (tidak diperlukan untuk mendorong, seperti yang dikatakan Micheal Anderson dengan benar) adalah pergi ke dir dan lari yang berbeda git clone /path/to/your/repo. Repo baru ini seharusnya kecil sekarang - lanjutkan pekerjaan Anda di sana.

Kronik
sumber
Sangat mudah ... dan elegan ... Terima kasih banyak.
Hugo A
2

Untuk memangkas file dari riwayat repo yang dapat Anda gunakan git filter-branch. Namun ini hanya menghapus file dari semua pohon, Anda mungkin masih memiliki konten file duduk dalam gumpalan di dalam cache objek git. Anda dapat membersihkannya menggunakan git gc.

Namun Anda tidak perlu khawatir tentang gumpalan yang tidak terpasang itu didorong ke repo utama, karena hanya gumpalan yang melekat pada pohon komit yang Anda dorong untuk dikirim ke server lain.

Jika Anda sudah mendorong file besar maka membersihkan gumpalan yang tidak diikat pada repo jarak jauh lebih sulit. Lihat https://stackoverflow.com/questions/3162786/how-to-do-git-gc-on-git-remote-repoteory

Michael Anderson
sumber