350GB SVN Repo creato almeno revisione 1MB anche per un compito semplice come ramo / tag

StackOverflow https://stackoverflow.com/questions/3910387

  •  29-09-2019
  •  | 
  •  

Domanda

Questa Tutto è cominciato quando ho notato che la mia taglia repository sta aumentando ad una tariffa giornaliera di 1 GB. Ho fatto un semplice test. Creato un ramo / tag di una cartella esistente che aveva una dimensione di 35 KB. Ho preso nota del numero di revisione e sono andato a $REPO/db/revs/<K-rev>/rev-number/ e controllato la dimensione della revisione. E 'stato 1 mega byte. Che i suoni di pesce. Tutte le idee su che cosa potrebbe essere sbagliato qui. Il mio repo è di circa 350GB dimensioni, con circa 600.000 revisioni.

P.S. Ho già iniziato una ricostruzione di tutta la repository per vedere se questo fa alcuna differenza, ma probabilmente ci vorranno giorni per completare.

È stato utile?

Soluzione

Inviato stessa domanda a users@subversion.sapache.org e ottenuto questa risposta da B-Smith Mannschott - che spiega tutto. Io ho una directory nel percorso che contiene le cartelle 16000 - per ogni commit. Grazie B Smith-Mannschott per la risposta dettagliata. Distacco risposta qui per il beneficio degli altri.


Il tuo repository contiene una directory con molte voci? Siamo i cambiamenti che producono i grandi commit stati fatti in o di sotto di tale una directory?

Supponiamo di commettere un singolo cambiamento in un singolo file per il vostro repository. Supponiamo ulteriormente il file si trova qui, nella vostra repository:

/project/trunk/some-really-large-directory/notes/blah.txt

Quando si impegnano per il cambiamento blah.txt, la nuova revisione riscriverà i nodi di directory tra 'blah.txt' e la radice del repository: / / trunk / some-davvero-grande-cartella del progetto / note, / Progetto / trunk / some-davvero-large-directory, / progetto / tronco, / del progetto, /. Quando riscrivere un nodo directory, FSFS memorizza sempre la nuova versione nella sua interezza. (Questo è diverso dal modo in cui le modifiche ai file sono memorizzato, che sono generalmente le differenze a qualche versione precedente lo stesso file.)

Se / progetto / trunk / some-davvero-grande-directory / contiene, diciamo 10000 file, poi ognuno si impegnano a blah.txt memorizza una copia completa di questo directory (con i suoi 10'000 nomi) nel repository.

ho notato questo quando ho iniziato a tenere un wiki personale in versione controllare a pochi anni fa. E 'stata una directory piatta di oltre 10'000 testo File. Ho subito notato che impegna erano piuttosto grandi. (Da allora ho commutato a git per questo compito, per questo e altri motivi.)

vedi anche http: //svn.apache.org/repos/asf/subversion/trunk/notes/subversion-design.html#server.fs.struct.bubble-up

Altri suggerimenti

C'è una soluzione molto semplice. Supponendo che il repository contiene una grande quantità di etichette storiche, è possibile spostarli /tags-archive e rendere questa directory di sola lettura. Quando si sarà creare nuovi tag sotto /tags c'è problema non si verificherà più.

Si noti che è necessario utilizzare l'URL per URL mossa. Per es.

svn move https://svn.example.com/MyRepo/tags https://svn.example.com/MyRepo/tags-archive -m "Your Log Message"

Questa soluzione ha aiutato a risolvere il problema per un repository che conteneva circa 350.000 i tag in una singola directory.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top