Italiano English
Modifica History Actions

Differenze per "SvnHowTo"

Differenze tra le versioni 2 e 6 (in 4 versioni)
Versione 2 del 2007-04-28 19:41:15
Dimensione: 2481
Autore: ClauzClauz
Commento:
Versione 6 del 2007-04-29 13:40:51
Dimensione: 5275
Autore: ClauzClauz
Commento:
Le cancellazioni sono segnalate in questo modo. Le aggiunte sono segnalate in questo modo.
Linea 1: Linea 1:
==Subversion (SVN) mini howto== = Subversion (SVN) mini howto =
Linea 6: Linea 6:
Linea 9: Linea 10:
Linea 12: Linea 14:
Linea 18: Linea 21:
Linea 22: Linea 26:
Linea 23: Linea 28:
Linea 26: Linea 32:
scarica la revisione piu' aggiornata del contenuto della directory remota pippo/trunk nella directory locale corrente. Questo comando in genere va utilizzato una sola volta all'inizio dello sviluppo. Possiamo iniziare a sviluppare modificando la copia di lavoro, ovvero i file scaricati.
scarica la revisione piu' aggiornata del contenuto della directory remota pippo/trunk nella directory locale corrente. Questo comando in genere va utilizzato una sola volta inizialmente. Possiamo iniziare a sviluppare modificando la copia di lavoro, ovvero i file scaricati.
Linea 29: Linea 36:
Linea 32: Linea 40:
Linea 37: Linea 44:
 * ?: file non sotto il controllo di subversion  * ?: file non sotto il controllo di subversion (i comandi svn non hanno effetto su quel file)
Linea 40: Linea 47:
Linea 45: Linea 53:
Mentre svn checkout di solito viene utilizzato una sola volta all'inizio, svn update aggiorna alla versione piu' recente la copia gia' scaricata con svn checkout. Durante l'update possono comparire alcuni flag:
 * A - file aggiunto
 * U - file aggiornato
 * G - cambiamenti merGed (fusi), cioe' modifiche locali ed aggiornamento sono compatibili
 * C - conflitto. Le modifiche locali non sono compatibili con il file nel repository. Vedere piu' giu' come risolvere conflitti.
Mentre svn checkout di solito viene utilizzato una sola volta all'inizio, svn update aggiorna alla revisione piu' recente la copia gia' scaricata con svn checkout. Durante l'update possono comparire alcuni flag:

* A - file aggiunto (Added)
 * U - file aggiornato (Updated)
 * G - cambiamenti fusi (merGed), quando modifiche locali ed aggiornamento dal repository sono compatibili
 * C - conflitto (Conflict). Le modifiche locali non sono compatibili con quelle nel repository. Vedere piu' giu' come risolvere conflitti.
Linea 52: Linea 61:
Linea 53: Linea 63:
$svn commit -m "elenco dei cambiamenti"
}}}
oppure
{{{
$svn ci -m "elenco dei cambiamenti"
$svn commit -m "risolto bug n. 12"
Linea 60: Linea 66:
Fa l'upload delle modifiche correnti. L'opzione -m e' obbligatoria. oppure

{{{
$svn ci -m "risolto bug n. 12"
}}}

Fa l'upload delle modifiche correnti. L'opzione -m e' obbligatoria ed e' buona regola scrivere un messaggio significativo con la descrizione delle nuove modifiche.
Linea 64: Linea 76:
Quando si crea un nuovo file, questo non viene aggiunto automaticamente al controllo di subversion (ovvero i comandi svn non hanno effetto su quel file). Per aggiungere un file o una directory al controllo di subversion utilizzare svn add:

{{{
$svn add nuovofile.txt
}}}

Per le directory si puo' utilizzare

{{{
$svn mkdir nuovadirectory
}}}

che crea la nuova directory "nuovadirectory" e la aggiunge al controllo di subversion.

Per cancellare file non bisogna mai utilizzare i comandi del sistema operativo, ma il comando svn delete:

{{{
$svn delete file.c
}}}

Anche per copiare non bisogna utilizzare il sistema operativo, ma

{{{
$svn copy file.c ./nuovadir/file.c
}}}

Similmente per rinominare e spostare:

{{{
$svn move file.c file.cpp
}}}


== svn help ==

{{{
$svn help copy
}}}

svn help mostra l'aiuto per un determinato subcomando di subversion (i subcomandi sono checkout, udpate, commit, etc)
Linea 66: Linea 119:
Durante l'update puo' capitare che vicino al nome di un file compaia il flag "C". In questi casi nella directory di lavoro possiamo trovare 4 file, per esempio:
 * file.c.mine: file.c come era prima di fare l'update
 * file.c.r75: file.c revisione 75 (quella "nuova" sul repository)
 * file.c.r73: file.c revisione 73 (quella "vecchia" sulla quale si sono apportate modifiche)
 * file.c: file.c con dei marker {{{<<<<<<<<<<<<}}}, {{{---------}}} e {{{>>>>>>>>>>>>>}}} che indicano le parti dove ci sono righe in conflitto
Per risolvere il conflitto potremmo:
 * sovrascrivere file.c con la nostra versione
 * sovrascrivere file.c con la revisione 75
 * modificare file.c fondendo le modifiche
Finito di risolvere il conflitto diamo il comando
{{{
$svn resolved file.c
}}}
che elimina i file file.mine, file.r75 e file.r73 e marca il conflitto di file.c come "resolved".

Quando avviene un conflitto, comunque, e' buona regola contattare gli altri sviluppatori.


== esempio di ciclo di lavoro ==



Linea 67: Linea 143:

{{{
$svn log --limit 10
}}}

Mostra gli ultimi 10 messaggi di log (messaggi inseriti con l'opzione -m di svn commit).

== svn diff ==
{{{
svn diff ciao.c
}}}
Mostra le modifiche del file ciao.c rispetto alla versione scaricata dal repository. Le righe aggiunte sono precedute da un "+", mentre le righe eliminate sono precedute da un "-". Permette anche di vedere le differenze tra varie revisioni.


== svn revert ==

{{{
$svn revert ciao.c
}}}
usato prima del commit elimina tutte le modifiche locali facendo tornare il file all'ultima revisione scaricata (con svn update o svn checkout) dal repository.

Subversion (SVN) mini howto

TableOfContents

Introduzione

[http://subversion.tigris.org/ Subversion] (SVN) si propone di essere il successore di CVS, ovvero un tool (composto da client e server) per lo sviluppo collaborativo. Questo mini howto riguarda solo il client ed e' di livello introduttivo. Per documentazione piu' completa (installazione, svnserve) ed approfondita rimandiamo alla documentazione ufficiale su http://svnbook.org/ .

trac

[http://trac.edgewall.org/ trac] permette di visualizzare il contenuto del repository SVN attraverso un'interfaccia web. Per esempio http://test.ninux.org/svntrac/browser .

trunk, branches, tags

Quando si utilizza svn e' usanza avere 3 directory:

  • trunk - contiene il ramo di sviluppo principale
  • branches - contiene rami di sviluppo secondari
  • tags - contiene snapshot delle altre due directory in momenti significativi dello sviluppo

svn checkout

Esempio:

$svn checkout http://test.ninux.org/svn/pippo/trunk

oppure (abbreviato)

$svn co http://test.ninux.org/svn/pippo/trunk

scarica la revisione piu' aggiornata del contenuto della directory remota pippo/trunk nella directory locale corrente. Questo comando in genere va utilizzato una sola volta inizialmente. Possiamo iniziare a sviluppare modificando la copia di lavoro, ovvero i file scaricati.

svn status

$svn status

Mostra una lista di file. I flag principali:

  • M: file modificato
  • A: file aggiunto
  • D: file cancellato
  • ?: file non sotto il controllo di subversion (i comandi svn non hanno effetto su quel file)

svn update

Aggiorna la copia di lavoro dal repository

$svn update

Mentre svn checkout di solito viene utilizzato una sola volta all'inizio, svn update aggiorna alla revisione piu' recente la copia gia' scaricata con svn checkout. Durante l'update possono comparire alcuni flag:

  • A - file aggiunto (Added)
  • U - file aggiornato (Updated)
  • G - cambiamenti fusi (merGed), quando modifiche locali ed aggiornamento dal repository sono compatibili
  • C - conflitto (Conflict). Le modifiche locali non sono compatibili con quelle nel repository. Vedere piu' giu' come risolvere conflitti.

svn commit

$svn commit -m "risolto bug n. 12"

oppure

$svn ci -m "risolto bug n. 12"

Fa l'upload delle modifiche correnti. L'opzione -m e' obbligatoria ed e' buona regola scrivere un messaggio significativo con la descrizione delle nuove modifiche.

file: nuovi, copiare, rinominare, spostare

Quando si crea un nuovo file, questo non viene aggiunto automaticamente al controllo di subversion (ovvero i comandi svn non hanno effetto su quel file). Per aggiungere un file o una directory al controllo di subversion utilizzare svn add:

$svn add nuovofile.txt

Per le directory si puo' utilizzare

$svn mkdir nuovadirectory

che crea la nuova directory "nuovadirectory" e la aggiunge al controllo di subversion.

Per cancellare file non bisogna mai utilizzare i comandi del sistema operativo, ma il comando svn delete:

$svn delete file.c

Anche per copiare non bisogna utilizzare il sistema operativo, ma

$svn copy file.c ./nuovadir/file.c

Similmente per rinominare e spostare:

$svn move file.c file.cpp

svn help

$svn help copy

svn help mostra l'aiuto per un determinato subcomando di subversion (i subcomandi sono checkout, udpate, commit, etc)

risolvere conflitti: svn resolved

Durante l'update puo' capitare che vicino al nome di un file compaia il flag "C". In questi casi nella directory di lavoro possiamo trovare 4 file, per esempio:

  • file.c.mine: file.c come era prima di fare l'update
  • file.c.r75: file.c revisione 75 (quella "nuova" sul repository)
  • file.c.r73: file.c revisione 73 (quella "vecchia" sulla quale si sono apportate modifiche)
  • file.c: file.c con dei marker <<<<<<<<<<<<, --------- e >>>>>>>>>>>>> che indicano le parti dove ci sono righe in conflitto

Per risolvere il conflitto potremmo:

  • sovrascrivere file.c con la nostra versione
  • sovrascrivere file.c con la revisione 75
  • modificare file.c fondendo le modifiche

Finito di risolvere il conflitto diamo il comando

$svn resolved file.c

che elimina i file file.mine, file.r75 e file.r73 e marca il conflitto di file.c come "resolved".

Quando avviene un conflitto, comunque, e' buona regola contattare gli altri sviluppatori.

esempio di ciclo di lavoro

svn log

$svn log --limit 10

Mostra gli ultimi 10 messaggi di log (messaggi inseriti con l'opzione -m di svn commit).

svn diff

svn diff ciao.c

Mostra le modifiche del file ciao.c rispetto alla versione scaricata dal repository. Le righe aggiunte sono precedute da un "+", mentre le righe eliminate sono precedute da un "-". Permette anche di vedere le differenze tra varie revisioni.

svn revert

$svn revert ciao.c

usato prima del commit elimina tutte le modifiche locali facendo tornare il file all'ultima revisione scaricata (con svn update o svn checkout) dal repository.