Sepertinya proyek saya semakin besar dan besar dengan setiap git commit/push
. Apakah ada cara untuk membersihkan folder git saya?
156
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 gc
yang akan "membersihkan file yang tidak perlu dan mengoptimalkan repositori lokal" ( halaman manual ).
Perintah lain yang mungkin relevan adalah git clean
yang akan menghapus file yang tidak terlacak dari pohon Anda ( halaman manual ).
WARNING
Perintah 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.gitignore
akan dihapus.git clean -dfX
(perhatikan kasus padaX
) hanya akan menghapus item yang memiliki aturan yang berlaku di.gitignore
. Harap perhatikan peringatan ini: Jangan pernah menjalankangit clean
tanpa menjalankannya dalam mode interaktif, dengan-i
alih - alih-f
, atau setidaknya melakukan lari kering terlebih dahulu --n
dan kemudian lagi dengan-f
.Lari:
Menghapus semua cabang pelacakan basi yang telah dihapus pada
origin
tetapi masih tersedia secara lokal diremotes/origin
.' G arbage C ollection' - menjalankan tugas tata graha (mengompresi revisi, menghilangkan benda yang lepas / tidak dapat diakses). The
--auto
bendera pertama menentukan apakah pekerjaan apa pun diperlukan, dan keluar tanpa melakukan apa-apa jika tidak.sumber
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:
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).
sumber
ya ya,
git gc
solusinya, tentu saja,dan secara lokal - Anda bisa menghapus repositori lokal dan mengkloningnya lagi,
tetapi ada sesuatu yang lebih penting di sini ...
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!
sumber
Menjalankan perintah ini sangat berbahaya, tetapi akan mengecilkan repositori Anda dengan menghapus semua file git recovery / backup Anda:
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 lakukangit reset --hard
sebelumgit 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.sumber
git clean -d -f -i
adalah cara terbaik untuk melakukannya.Ini akan membantu membersihkan dengan cara yang lebih terkontrol.
-i
singkatan dari interaktif.sumber
git clean
ini 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 melakukannyagit repack -ad
juga, yang mengurangi jumlah file paket.sumber
git gc
proses, jadi tidak perlu menjalankannya secara terpisah