2011-01-17 36 views
11

Dopo aver letto molte introduzioni, le guide iniziali e la documentazione su SVN, non riesco ancora a capire dove sono archiviati i miei dati di versioning. Intendo fisicamente Ho più di MODIFICA [1/2 GB] di codice registrato, e il repository è di pochi MB. Questo è ancora Voodoo per me. E, come programmatore, non credo davvero in Magic.Dove Subversion archivia fisicamente il suo DataBase?

EDIT: Un collaboratore ha dichiarato che non tutto il codice è stato memorizzato nel pronti contro termine, è vero? Voglio dire, se cancello la mia copia di lavoro locale posso ancora recuperare il mio codice sorgente per il repository ... Se è così, non riesco ancora a capire come possa verificarsi una tale compressione sul mio codice ...

EDIT 2: Quando si importa il codice nel repository, ho il messaggio "50 MB caricato" e il repository effettivo è molto più piccolo. La compressione di Algos deve essere coinvolta.

BTW, E 'divertente leggere alcune risposte e vedere quante persone effettivamente credere nella magia, e utilizzare SVN senza sapere cosa succede dietro le quinte ...

+8

Avete veramente 10 GB di codice? Questa è una quantità enorme di codice, probabilmente più grande di tutto il codice sorgente di MS Windows. Semplicemente non credo a quella taglia. – abelenky

+0

L'ubicazione fisica è dovunque si trovi il computer su cui risiede il database ... – JasCav

+3

Sono sorpreso da quante persone hanno sbagliato questa risposta. La cartella .svn NON è quella in cui il server memorizza i suoi file (perché è locale alla macchina - nessun altro sarebbe in grado di controllare quelle informazioni), e, mentre SVN memorizza solo i diff (supponendo FSFS), deve memorizzare gli originali da qualche parte. – JasCav

risposta

6

Mettendo questo come una risposta, per richiesta di Mika:

Sono sorpreso da quante persone hanno questa risposta sbagliata. Il .la cartella svn NON è quella in cui il server memorizza i suoi file (perché è locale alla macchina - nessun altro sarebbe in grado di controllare quelle informazioni), e, mentre SVN memorizza solo i diff (supponendo FSFS), deve memorizzare gli originali DA QUALCHE PARTE.

Ovviamente, come @ csharptest.net ha detto: "La mia ipotesi è che il 70% è perf, l'altro 29,99% è nelle directory 'obj' e 'bin', lasciandovi il 10mb del codice effettivo archiviato. " Quindi in realtà non stai controllando tutte quelle informazioni. La maggior parte non entra mai nel repository. Inoltre, SVN utilizza molti algoritmi di compressione e varie tecniche e non memorizza necessariamente il byte di dati per byte all'interno del repository. Questo potrebbe essere il motivo per cui vedi una differenza di dimensioni.

Se sei interessato a leggere di più su come funziona SVN, leggi a questo proposito in questo Stackoverflow answer.

Spero che questo aiuti!

+0

Grazie Amico, è stato perspicace –

1

E' memorizzato nella filesystem. Esattamente dove dipende da come è stato impostato il sistema. Inoltre, quando crei un nuovo repository, può essere ovunque sul tuo filesystem. L'installazione avrà una posizione predefinita, ma la creazione di un nuovo repository può essere eseguita ovunque, potrebbe essere necessario guardarsi intorno per trovare il percorso effettivo.

Questo viene fatto nella versione a riga di comando in questo modo:

svnadmin create d:/path_to_repository 

Nell'esempio precedente, il repository è memorizzato in "D:/path_to_repository"

Inoltre, se si considerano il monte della codice che hai nel tuo computer locale, stai filtrando il contenuto che non entra nel server? Dovresti avere un elenco globale di ignorazioni per escludere articoli che non hanno attività nel controllo del codice sorgente. (contenuto modificato dall'utente, in genere progetti compilati, ecc.) È possibile che si stia sopravvalutando la dimensione effettiva del repository.

+0

Sì, sto filtrando il 70% del contenuto delle cartelle del codice sorgente ma comunque ... da 3 GB a pochi MB è molto sorprendente –

-2

Cartella .svn nascosta in ciascuna cartella con versione.

+2

@Eric Gagnon: il .svn è per il monitoraggio dello stato sul client e non è il repository svn stesso. – tawman

+2

@Eric - Perché non è il repository. Sono i metadati, ma non i veri e propri file di repository. (Non sono il downvoter in entrambi i casi, ma la risposta è sbagliata.) – JasCav

+0

Ok ... pensavo che fosse quello che Mika stava chiedendo ("Subversion Database" e "versioning data"). Ho appena frainteso la domanda allora. –

7

Dipende da cosa si sta utilizzando per il server Subversion. Io uso VisualSVN Server e salva i file del repository in c: \ Repository.

+0

Sì, questo è quello che uso anche io ... Il mio repository personalizzato E: \ SVN è di pochi MB –

3

Il tuo repository svn è archiviato in una cartella nel filesystem, dovrebbe contenere sottocartelle come: conf, dav, db, hooks, locks. Queste cartelle costituiscono il repository.

C'è uno strumento svnadmin che è possibile utilizzare per gestire il repository.

1

Perché non si controlla una nuova copia di lavoro, si crea lì e si verifica che tutto funzioni ancora? Possiamo tutti scrivere qui le risposte e indovinare quanti% potrebbe essere dove, ma alla fine, dovresti comunque controllare che tutto ciò che deve essere aggiunto a Subversion sia.

+0

Hai ragione. E prima di chiedere di solito asserire questo tipo di cose, e sì, ho controllato su un'altra workstation per sviluppatori e tutto funziona perfettamente. –

0

Mi rendo conto che questo è un thread precedente, ma dopo averlo letto, ho pensato di inserire il mio $ 0,02.

fattori che contribuiscono in larga file locale situato in una copia di lavoro sono:

  • Come accennato, la vita di lavoro copia meta/statali-dati nelle nascosti (per impostazione predefinita) .svn directory. Mentre i metadati sono piuttosto piccoli, per ogni file nella copia di lavoro esiste una baseline di copia funzionante. Questo semplicemente raddoppierà lo spazio su disco consumato per qualsiasi file che risiede nel repository.

  • Se il repository include percorsi copiati (tipici nel caso di rami o tag) si potrebbe finire con molte volte lo spazio fisico utilizzato. Questo perché lo spazio reale utilizzato in un repository SVN per una copia "logica" è minuscolo. In realtà è solo un puntatore a una particolare revisione del percorso sorgente. È possibile duplicare l'intero repository con un'operazione di copia che genera nuovi dati del repository di poche centinaia di byte (questo è anche il motivo per cui qualsiasi operazione di copia richiede la stessa quantità di tempo). Tuttavia, quando estrai o aggiorni la copia di lavoro potrebbe essere il doppio di prima che tu lo copiassi. Questo è in genere il motivo per cui si dovrebbe usare un'operazione di commutazione per cambiare una copia di lavoro su un ramo o tag di un percorso copiato logicamente invece di ricorsivamente controllando un intero repository dalla sua radice.

Anch'io sono stato molto impressionato da quanto SVN memorizza in modo compatto e trasferisce i suoi dati di repository.

Problemi correlati