Come funziona esattamente memorizzare i file nel repository subversion?
-
22-09-2019 - |
Domanda
Ho letto il libro di sovversione ed è chiaro per me che la sovversione non memorizza i singoli file, ma solo delta, al fine di ridurre al minimo lo spazio su disco. Subversion fa anche lo stesso con i file binari così (questo era un enorme debolezza del CVS).
Comunque non capisco l'esatto meccanismo. Quando ho commesso un file che cosa succede?
- Subversion memorizza solo la diff (e ha già la versione precedente)
- Subversion elimina la versione precedente, memorizza il nuovo file intatti e crea un diff inverso al fine di "ri-creare" la vecchia versione, se necessario.
- Un'altra cosa che non ho pensato.
Il primo caso potrebbe sembrare la più logica. Ciò solleva però un'altra domanda. Se ho in un repository subversion un file con 1000 commit e un nuovo sviluppatore estrae una copia pulita, poi la sovversione avrebbe dovuto recuperare la versione originale (importazione iniziale) e applicare 1000 diff su questo prima di restituire il risultato. È corretto? C'è una sorta di cache per file in cui la versione più recente è mantenuto così?
In pratica dove posso trovare informazioni sugli interni repository SVN?
Aggiornamento: A quanto pare il backend di sovversione gioca un ruolo importante in questo. Al tempo o scrivendo FSFS utilizza l'opzione 1, mentre BDB utilizza l'opzione 2. Grazie msemack!
Soluzione
A causa formato repository di Subversion è del tutto interno, sono liberi di modificare la rappresentazione da una revisione a quella successiva. Credo che l'attuale revisione memorizza generalmente delta inversa (la vostra opzione 2), ma anche negozi istantanee complete periodicamente in modo che non ha bisogno di risolvere i 1000 diff prima di restituire un risultato.
eversione 1,6 note di rilascio ha una sezione di stoccaggio miglioramenti Filesystem che ha alcune note su questo, e link ad altre fonti. Basti dire che i dettagli di memorizzazione dei dati Subversion sono complessi e soggetti a modifiche.
C'è anche un documento di progettazione nell'albero dei sorgenti di Subversion che descrive l'uso di saltare delta in Subversion . In generale, la directory / note / contiene diversi documenti utili riguardanti interni di Subversion .
Altri suggerimenti
Credo che il seguente link sarebbe di aiuto a comprendere l'architettura fsfs
http://svn.apache.org/repos/ ASF / subversion / trunk / subversion / libsvn_fs_fs / struttura
documento Subversion design ( che è piuttosto datato, però) è possibile ottenere questo:
Come molti altri sistemi di controllo di revisione, Subversion memorizza le modifiche come differenze. Non fa copie complete di nodi; invece, memorizza l'ultima revisione come un testo completo, e le revisioni precedenti come una successione di diff inversa (la parola "diff" è usato liberamente qui - per i file, significa vdeltas, per le directory, significa un formato che esprime modifiche directory).
Non credo che è stato cambiato da allora.
Inoltre, vedere Bubble-up Metodo .
FSFS potrebbe aiutare .
Se si utilizza Berkeley DB, ecco la specifica per questo.
FSFS utilizza delta inversa per memorizzare le modifiche e SKIP- delta per velocizzare alcune azioni, se ho capito tutto correttamente.
Ogni volta che si commettono un cambiamento, il negozi repository una nuova revisione di quell'albero complessiva repository e etichette il nuovo albero con un nuovo numero di revisione. Naturalmente, la maggior parte dei l'albero è la stessa come la revisione prima, fatta eccezione per le parti che cambiato.
Il nuovo numero di revisione è un etichetta sequenziale che si applica al tutto il nuovo albero, non solo per i file e le directory che hanno toccato in quel revisione. Tuttavia, colloquialmente, una numero di revisione è usato per riferirsi a il cambiamento commesso nell'ambito di tale revisione; per esempio, "il cambiamento di R588" ( "R588" è l'abbreviazione di "revisione 588" ) significa in realtà "la differenza tra gli alberi di repository 587 e 588" , o in altre parole, "la modifica apportata ad albero 587 per la produzione di albero 588" .
Date un'occhiata a: Subversion FAQ