Sepertinya proyek saya semakin besar dan besar dengan setiap git commit/push. Apakah ada cara untuk membersihkan folder git saya?
Sepertinya proyek saya semakin besar dan besar dengan setiap git commit/push. Apakah ada cara untuk membersihkan folder git saya?
Jawaban:
Saya tidak yakin apa yang Anda inginkan. Pertama-tama, tentu saja setiap kali Anda melakukan / mendorong direktori akan menjadi sedikit lebih besar, karena harus menyimpan setiap komitmen tambahan tersebut.
Namun, mungkin Anda ingin git gcyang akan "membersihkan file yang tidak perlu dan mengoptimalkan repositori lokal" ( halaman manual ).
Perintah lain yang mungkin relevan adalah git cleanyang akan menghapus file yang tidak terlacak dari pohon Anda ( halaman manual ).
WARNINGPerintah seperti yang ditulis di atas oleh @Kalle akan menghapus SETIAP > UNTRACKED <FILE DAN DIRECTORY DALAM GIT ROOT ANDA , bukan hanya "file yang terdaftar di .gitignore". Apa pun yang tidak dilacak oleh Git, terlepas dari apakah itu terdaftar atau tidak .gitignoreakan dihapus. git clean -dfX(perhatikan kasus pada X) hanya akan menghapus item yang memiliki aturan yang berlaku di .gitignore. Harap perhatikan peringatan ini: Jangan pernah menjalankan git cleantanpa menjalankannya dalam mode interaktif, dengan -ialih - alih -f, atau setidaknya melakukan lari kering terlebih dahulu - -ndan kemudian lagi dengan -f.
Lari:
git remote prune origin
Menghapus semua cabang pelacakan basi yang telah dihapus pada origintetapi masih tersedia secara lokal di remotes/origin.
git gc --auto
' G arbage C ollection' - menjalankan tugas tata graha (mengompresi revisi, menghilangkan benda yang lepas / tidak dapat diakses). The --autobendera pertama menentukan apakah pekerjaan apa pun diperlukan, dan keluar tanpa melakukan apa-apa jika tidak.
Salah satu skenario di mana git repo Anda akan mendapatkan serius lebih besar dengan setiap komit adalah salah satu di mana Anda melakukan file biner yang Anda hasilkan secara teratur. Penyimpanan mereka tidak akan seefisien file teks .
Lain adalah di mana Anda memiliki sejumlah besar file dalam satu repo (yang merupakan batas git ) alih-alih beberapa subrepo ( dikelola sebagai submodul ).
Dalam artikel ini di ruang git , AlBlue menyebutkan:
Perhatikan bahwa Git (dan Hg, dan DVCS lainnya) memang mengalami masalah di mana (besar) binari diperiksa, kemudian dihapus, karena mereka akan tetap muncul di repositori dan mengambil ruang, bahkan jika mereka tidak saat ini .
Jika Anda memiliki binari besar yang tersimpan di git repo Anda, Anda dapat mempertimbangkan:
git filter-branch (peringatan: ini akan menulis ulang riwayatnya, yang buruk jika Anda telah mendorong repo Anda dan jika ada yang menarik darinya)Seperti yang saya sebutkan di " Apa batas-batas file dalam Git (jumlah dan ukuran)? ", Yang lebih baru (2015, 5 tahun setelah jawaban ini) Git LFS dari GitHub adalah cara untuk mengelola file-file besar (dengan menyimpan mereka di luar yang Git repositori).
ya ya, git gc solusinya, tentu saja,
dan secara lokal - Anda bisa menghapus repositori lokal dan mengkloningnya lagi,
detik Anda menunggu git besar & eksternal untuk diproses dikumpulkan ke menit-menit panjang yang dikumpulkan untuk jam waktu tidak efisien yang dihabiskan,
Buat repositori baru (seluruhnya, bukan hanya cabang) dari awal , termasuk satu-satunya versi file terbaru, tentu saja Anda akan kehilangan semua sejarah,
tetapi ketika di dunia kode bukan saatnya untuk menjadi sentimental, tidak ada gunanya menyeret seluruh 5 tahun kode setiap komit atau berbeda, Anda masih bisa menyimpan git & eksternal lama di suatu tempat, jika Anda bernostalgia:]
tetapi, pada titik tertentu Anda benar-benar harus bergerak bersama:]
tim Anda akan berterima kasih!
Menjalankan perintah ini sangat berbahaya, tetapi akan mengecilkan repositori Anda dengan menghapus semua file git recovery / backup Anda:
git reflog expire --expire=now --all && git gc --prune=now --aggressive
Ini akan menghapus semua file yang digunakan git untuk memulihkan repositori Anda dari beberapa perintah buruk, misalnya, jika Anda melakukannya git reset --hard, Anda biasanya dapat memulihkan file yang hilang. Tetapi jika Anda lakukan git reset --hardsebelum git reflog expire...perintah, maka Anda kehilangan segalanya. Sekarang, satu-satunya harapan Anda adalah menggunakan beberapa alat yang menganalisis sistem file Anda dan mencoba memulihkan file yang terhapus, jika tidak diganti.
git clean -d -f -i adalah cara terbaik untuk melakukannya.
Ini akan membantu membersihkan dengan cara yang lebih terkontrol.
-i singkatan dari interaktif.
git cleanini bukan untuk membersihkan repo, sama halnya dengan membersihkan direktori. Untuk pengguna yang secara buta menyalin / menempel, waspadalah; ini menghapus file / dir yang tidak dilacak yang mungkin Anda inginkan secara lokal.
Tidak tahu apakah itu akan menyusut, tetapi setelah saya jalankan git clean, saya sering melakukannya git repack -adjuga, yang mengurangi jumlah file paket.
git gcproses, jadi tidak perlu menjalankannya secara terpisah