Membebaskan ruang di repositori SVN saya

8

Saya memiliki repositori SVN yang di-host di situs freemium dengan ukuran repositori maksimum. Ketika saya mendekati kapasitas ini, saya menyadari file yang telah saya periksa, saya tahu saya dapat menghapus secara permanen untuk membebaskan ruang disk. Bagaimana saya memberi tahu SVN bahwa suatu file tidak hanya dapat dihapus, tetapi juga riwayatnya?

untuk melakukannya
sumber

Jawaban:

7

seperti kata Hubert, svnadmin packakan mengemas semua file repo individu dalam direktori menjadi satu file besar. Ini akan menghemat ruang, tetapi itu hanya menunda hari perhitungan untuk Anda. (Ini seharusnya membuat operasi sejarah lebih cepat, jadi itu saran yang bagus pula). Satu hal yang perlu diperhatikan adalah bahwa ia hanya bekerja pada direktori sharded (mis. Struktur direktori baru adalah menempatkan 1000 revisi ke dalam direktori tunggal, kemudian memulai direktori baru) dan hanya mengemas direktori shard lama, bukan direktori dengan revisi saat ini. di dalamnya.

Jadi, satu-satunya pilihan Anda adalah menghapus revisi lama dari riwayat Anda. Itu membutuhkan svnadmin dump and load, dengan filter opsional untuk menghapus direktori di repo Anda yang tidak lagi Anda perlukan. (mis. cabang sementara yang lama).

Membuang itu mudah: di svnadmin dump -r xxx:HEADmana xxx adalah revisi tertua yang ingin Anda pertahankan (yaitu ini akan membuang yang paling baru, sehingga revisi kuno Anda dibuang, seperti pengarsipan). Anda dapat menyimpan arsip revisi lama dengan membuangnya juga ( svnadmin dump -r 1:xxx)

Setelah Anda memiliki dumpfile Anda, memuatnya semudah menjalankan memuat svnadmin lewat nama dumpfile. mungkin ide yang baik untuk menghapus repo lama sebelum memuat yang baru - maka Anda mendapatkan manfaat dari properti sistem file server terbaru, jika Anda belum memilikinya.

Jika Anda ingin menyimpan semua revisi lama tetapi menyaring direktori tertentu, Anda ingin menjalankan dumpfile melalui svndumpfilter , yang akan menghapus jalur yang ditentukan. Ketahuilah bahwa Anda ingin membuang tanpa menggunakan opsi --incremental.

Jelas, uji semua operasi secara lokal - buang ke file lokal, lalu muat ke dalam repo temp pada drive lokal Anda (itu akan lebih cepat juga) dan uji bahwa riwayat dan versi terbaru berfungsi ok - saya mengekspor revisi terbaru ke direktori dan gunakan winmerge untuk memeriksa apakah file identik dengan ekspor revisi terbaru dari repo langsung. Cobalah dengan revisi historis juga jika Anda ingin menjadi paranoid.

gbjbaanb
sumber
3

Dari FAQ Subversion :

Proyek ini memiliki rencana ... untuk suatu hari nanti mengimplementasikan perintah penghapusan svnadmin yang akan menyelesaikan tugas menghapus informasi secara permanen.

...

Sementara itu, satu-satunya jalan Anda adalah dengan svnadmin membuang repositori Anda, lalu menyalurkan dumpfile melalui svndumpfilter (tidak termasuk jalur yang buruk) ke dalam perintah beban svnadmin.

nedm
sumber
2

Anda tidak dapat menghapus file dari repositori SVN tanpa melakukan svnadmin dump; svndumpfilter; svnadmin loaddansa. Anda dapat mengurangi ukuran repositori jika Anda menggunakan FSFS, jalankan saja svnadmin packdi direktori repo.

Hubert Kario
sumber
0

Secara umum itu adalah ide yang buruk untuk menghapus file dari repositori di bawah kontrol versi.

Saya tidak yakin saya sudah benar, tetapi ini adalah bagaimana saya memahaminya. Kontrol versi adalah tentang checksum unik. Jika Anda menghapus sesuatu, ada risiko bagi checksum ini untuk digunakan kembali, yang mengarah pada konflik. Ini sama sekali tidak layak untuk mengurangi masalah ruang disk rendah dengan cara ini, lebih baik tingkatkan paket data Anda.

halp
sumber