SVN sta per Subversion.
Subversion è un sistema di controllo della versione gratuito/open source. Subversion gestisce file e directory nel tempo. Un albero di file viene inserito in un repository centrale. Il repository è molto simile a un normale file server, tranne per il fatto che ricorda ogni modifica apportata ai tuoi file e directory. Ciò ti consente di recuperare versioni precedenti del codice o di esaminare la cronologia di come è stato modificato il codice.
Questo articolo spiega alcuni comandi SVN di base con esempi.
Copia di lavoro SVN
SVN è un repository che contiene tutti i nostri dati con versione, chiamato anche server SVN. Programma client SVN che gestisce le riflessioni locali di porzioni di dati con versione che vengono chiamati come copia di lavoro. Il client SVN può accedere al proprio repository attraverso le reti. Più utenti possono accedere al repository contemporaneamente.
1. SVN Checkout:crea una copia di lavoro
Il comando Checkout viene utilizzato per scaricare i sorgenti dal repository SVN alla copia di lavoro. Se desideri accedere ai file dal server SVN, il checkout è la prima operazione da eseguire.
SVN checkout crea la copia di lavoro, da cui puoi modificare, eliminare o aggiungere contenuti. Puoi estrarre un file, una directory, un tronco o un intero progetto. Per effettuare il pagamento dovresti conoscere l'URL dei componenti che desideri effettuare.
Syntax: $ svn checkout/co URL PATH
- URL è l'URL dei componenti per il pagamento
- Se PATH viene omesso, il nome di base dell'URL verrà utilizzato come destinazione. Se vengono forniti più URL, ciascuno verrà estratto in una sottodirectory di PATH, con il nome della sottodirectory come nome di base dell'URL.
L'esempio seguente estrae la directory nella directory di destinazione specificata.
$ svn co https://www.thegeekstuff.com/project/branches/release/migration/data/cfg /home/sasikala/cfg/ A /home/sasikala/cfg/ftp_user.cfg A /home/sasikala/cfg/inventory.cfg A /home/sasikala/cfg/email_user.cfg A /home/sasikala/cfg/svn-commands Checked out revision 811. $ ls /home/sasikala/cfg . .. .svn email_user.cfg ftp_user.cfg inventory.cfg svn-commands
Quando esegui un checkout, crea una directory nascosta denominata .svn, che conterrà i dettagli del repository.
2. SVN Commit:salva le modifiche nel repository
Ogni volta che apporti modifiche alla copia di lavoro, non si rifletterà nel server SVN. Per rendere permanenti le modifiche, devi eseguire il commit SVN.
Syntax: $ svn commit -m "log messages"
Spiega perché stai modificando il file nell'opzione -m.
Ad esempio, nella mia copia di lavoro, il file denominato "svn-commands" ha il seguente contenuto.
$ cat /home/sasikala/cfg/svn-commands checkout commit add delete update status $ ls -l /home/sasikala/cfg/svn-commands -rw-r--r-- 1 root root 41 Apr 16 11:15 svn-commands
Ho apportato una modifica a questo file (ad esempio, rendendo questo file vuoto).
$ ls -l svn-commands -rw-r--r-- 1 root root 0 Apr 16 11:20 svn-commands
Ora salva il file per rendere permanenti le modifiche nel server.
$ svn commit -m "Making the file empty" svn-commands Sending svn-commands Transmitting file data . Committed revision 813.
Dopodiché, ogni volta che aggiorni la tua copia di lavoro o il checkout, le modifiche appariranno nel server.
3. Elenco SVN:elenca le voci della directory
svn list è utile quando si desidera visualizzare il contenuto del repository SVN, senza scaricare una copia di lavoro.
Syntax: $ svn list
L'esempio seguente elenca tutti i file disponibili nell'URL specificato nel repository senza scaricare una copia di lavoro. Quando esegui il comando svn list con l'opzione –verbose, vengono visualizzate le seguenti informazioni.
- Numero di revisione dell'ultimo commit
- Autore dell'ultimo commit
- Dimensione (in byte)
- Data e ora dell'ultimo commit
$ svn list --verbose https://www.thegeekstuff.com/project/branches/release/migration/data/bin 16 sasikala 28361 Apr 16 21:11 README.txt 21 sasikala 0 Apr 18 12:22 INSTALL 22 sasikala Apr 18 10:17 src/
4. SVN Add – Aggiungi un nuovo file al repository SVN
Quando si desidera aggiungere un nuovo file (o directory) al repository è necessario utilizzare il comando SVN add. Il repository avrà il file appena aggiunto, solo quando esegui il commit SVN. Ora aggiungiamo un nuovo file chiamato "thegeekstuff" al nostro repository.
- Crea un file nella copia di lavoro locale
$ ls -l /home/sasikala/cfg/thegeekstuff -rw-r--r-- 1 sasikala root 8 Apr 16 11:33 thegeekstuff
svn add filename aggiungerà i file al repository SVN.
$ svn add thegeekstuff A thegeekstuff
Finché non esegui il commit, il file aggiunto non sarà disponibile nel repository.
$ svn commit -m "Adding a file thegeekstuff" thegeekstuff Adding thegeekstuff Transmitting file data . Committed revision 814.
5. Elimina SVN – Rimozione di un file dal repository
Il comando SVN delete elimina un elemento dalla copia di lavoro (o dal repository). Il file verrà eliminato dal repository quando esegui un commit SVN.
Syntax: $ svn delete URL
Ora rimuoviamo il file creato di recente chiamato "thegeekstuff".
$ svn delete thegeekstuff D thegeekstuff $ svn commit -m "Removing thegeekstuff file" thegeekstuff Deleting thegeekstuff Committed revision 814.
Ora puoi fare svn list e controllare se il file è stato eliminato dal repository.
6. SVN Diff – Visualizza la differenza
SVN diff mostra le differenze tra la tua copia di lavoro e la copia nel repository SVN. Puoi trovare la differenza tra due revisioni e due percorsi ecc.
Syntax: $ svn diff filename $ svn -r R1:R2 diff filename
L'esempio precedente confronta il nomefile@R1 e il nomefile@R2.
Ora il contenuto del file thegeekstuff appare così,
$ cat /home/sasikala/cfg/thegeekstuff testing
Ho modificato il contenuto del file geekstuff da testing a tester, che è mostrato di seguito usando il comando svn diff.
$ svn diff thegeekstuff Index: thegeekstuff =================================================================== --- thegeekstuff (revision 815) +++ thegeekstuff (working copy) @@ -1 +1 @@ -testing +tester
7. Stato SVN – Stato della copia di lavoro
Utilizzare il comando svn status per ottenere lo stato del file nella copia di lavoro. Mostra se la copia di lavoro è stata modificata, è stata aggiunta/cancellata, o il file non è sotto controllo di revisione, ecc.
Syntax: $ svn status PATH
L'esempio seguente mostra lo stato della mia copia di lavoro locale,
$ svn status /home/sasikala/cfg M /home/sasikala/cfg/ftp_user.cfg M /home/sasikala/cfg/geekstuff
'M' indica che l'articolo è stato modificato. Il comando "svn help status" spiegherà vari specificatori mostrati nel comando SVN status.
8. Registro SVN:visualizza il messaggio di registro
Come discusso all'inizio di questo articolo, SVN ricorda ogni modifica apportata ai file e alle directory. Per conoscere tutti i commit effettuati in un file o in una directory, usa il comando SVN log.
Syntax: $ svn log PATH
Di seguito vengono visualizzati tutti i commit effettuati sul file geekstuff
$ svn log thegeekstuff ------------------------------------------------------------------------ r815 | sasikala | 2011-04-16 05:14:18 -0700 (Sat, 16 Apr 2011) | 1 line Adding a file thegeekstuff ------------------------------------------------------------------------
Dal momento che abbiamo eseguito un solo commit nel file thegeekstuff, mostra solo un messaggio di registro con i dettagli.
9. SVN Move – Rinomina file o directory
Questo comando sposta un file da una directory all'altra o rinomina un file. Il file verrà spostato immediatamente nella sandbox locale (così come nel repository dopo il commit).
Syntax: $ svn move src dest
Il comando seguente rinomina il file "thegeekstuff" in "tgs" in un solo tratto.
$ svn move thegeekstuff tgs A tgs D thegeekstuff $ ls .# .. .svn email_user.cfg ftp_user.cfg inventory.cfg tgs
Ora il file viene rinominato solo nella copia di lavoro, non nel repository. Per rendere permanenti le modifiche, devi salvarle.
$ svn commit -m "Renaming thegeekstuff to tgs" tgs Adding tgs Transmitting file data . Committed revision 816.
10. Aggiornamento SVN:aggiorna la copia di lavoro.
Il comando svn update porta le modifiche dal repository alla tua copia di lavoro. Se non viene specificata alcuna revisione, la tua copia di lavoro viene aggiornata con la revisione HEAD. In caso contrario, sincronizza la copia di lavoro con la revisione fornita nell'argomento.
Sempre prima di iniziare a lavorare sulla tua copia di lavoro, aggiorna la tua copia di lavoro. In modo che tutte le modifiche disponibili nel repository siano disponibili nella tua copia di lavoro. ovvero le ultime modifiche.
Syntax: $ svn update PATH
Nel caso in cui qualche altro utente abbia aggiunto/eliminato file nell'URL, https://www.thegeekstuff.com/project/branches/release/migration/data/cfg, la tua copia di lavoro non avrà quei file per impostazione predefinita, finché non aggiorni il tuo lavoro copia.
$ svn update A new/usercfg A new/webcfg Updated to revision 819.
Nell'output del comando svn update sopra, A rappresenta che questo file è "Aggiunto" alla copia di lavoro.