2009-11-19 13 views
12

Mi sto solo abituando a Subversion e ho una domanda fondamentale sul controllo delle versioni.Utilizzo di Subversion, dove è memorizzato il codice sorgente "effettivo"?

Ho creato il mio repository SVN su un server "S" ospitato nella mia rete. Supponendo che io "importi" codice, file, directory, ecc. Da un altro computer "A" nella rete, esso viene aggiunto al repository SVN del mio server.

Faccio un checkout da un altro computer "B" nella rete e posso ottenere tutto il codice dal repository e così via.

Supponendo di formattare o distruggere il PC "A", il mio codice sorgente sarà ancora disponibile tramite un checkout in B?

Se sì, quando effettivamente sfoglio la cartella del mio repository sul server, non trovo una replica della cartella, solo le directory di configurazione, db, ecc. Dove sono archiviati fisicamente i dati sul server S, se è presente? Attualmente, la dimensione della directory del repository è chiaramente molto più piccola delle cartelle del codice sorgente.

Penso che VSS mantenga una copia del codice reale in un formato db irriconoscibile, git ha l'opzione di non richiedere di farlo. SVN conserva anche una copia del codice da qualche parte?

risposta

9

Quando si apportano modifiche al repository, queste verranno memorizzate sul server S all'interno del repository di subversion. Il repository è in realtà costituito da una serie di delta memorizzati all'interno della cartella db/revs - modifiche da una versione del repository alla successiva. Pertanto, il repository sul server non assomiglierà alla struttura del codice sorgente. I repository SVN sono versionati nel loro complesso - qualsiasi modifica all'interno del repository aumenta la versione del repository.

È possibile ricreare il codice sorgente controllando una copia pulita del repository dal server di sottoversione su qualsiasi macchina.

1

Subversion memorizza i file in un formato proprietario (non sono sicuro della parte superiore della mia testa) e non in una struttura di directory. Per quanto riguarda le dimensioni, assicurati di aver effettivamente impegnato i file. Se li stai semplicemente aggiungendo, i file non vengono inseriti nel repository. Inoltre, Subversion comprime cosa va nel repository.

Se tutti i computer client sono stati distrutti/formattati, finché il server è ancora disponibile si avrà accesso ai file. Se perdi il repository sul server, verrai salvato a meno che tu non possa recuperare uno dei checkout per creare un nuovo repository. Perderà comunque qualsiasi storia da questo, ovviamente.

Per farla breve, assicurarsi di eseguire backup periodici del repository dei server.

2

per svn il codice sorgente viene memorizzato come codice sorgente in qualsiasi directory di lavoro e il codice sorgente + la cronologia sono memorizzati nel repository in una forma compressa. quindi se hai perso il tuo repository perderai qualsiasi codice che non hai attualmente controllato. se si perde una copia di checkout, solo le modifiche locali vengono perse e qualsiasi altra cosa può essere ottenuta dal repository.

per DVCS la cronologia viene memorizzata anche in qualsiasi checkout. quindi se il tuo repository "principale" va in rovina (supponendo che ne abbiane uno anche tu) dovresti essere in grado di recuperare tutta la cronologia dalle versioni verificate dai popoli.

e VSS è appena rotto.

2

Il repository è fisicamente memorizzato in alcuni database sul server SVN.Una volta importato nel repository , nessun dato scomparirà mai tranne che per i difetti sul server. I cambiamenti nelle copie di lavoro sono irrilevanti, a meno che non siano commessi - e anche allora tutto ciò che è mai stato commesso può essere trovato nella storia. Se esegui regolarmente il backup del repository, nulla sparirà completamente.

1

Dopo aver importato i file di origine, verrà archiviato nel repository SVN sul server. Quindi se il PC "A" viene distrutto, sarà comunque possibile recuperare le fonti da SVN. La cartella 'db' del repository è dove si trovano i file reali. Ulteriori informazioni sulla struttura del repository SVN here.

0

In aggiunta alle altre risposte:

  • La copia di lavoro su PC B non si aggiornerà automaticamente.

  • La directory del repository non deve essere più piccola di un checkout completo. Assicurati - sfogliando il repository stesso - che tutti i file della tua copia di lavoro siano effettivamente contenuti nel repository.

Problemi correlati