Tutorial de Subversion
From Es1
Contents |
Conceptes previs
Subversion és un sistema de control de versions concurrents, el que a vegades la bibliografia també anomena sistema control de configuració entenent con a configuració l'estat dels fitxers a una màquina concreta en un moment concret. Aquest tipus de sistema permet treballar amb fitxers , pujant al servidor (commit) canvis progressius i reconciliant (update) els teus canvis amb els que ja han pujat altres desenvolupadors.
Pots desfer canvis concrets, veure les diferencies entre cada versió i veure qui ha pujat cada modificació. També permet mantenir diverses branques de desenvolupament (branches) i fer marques (tags) en punts estables del teu programa o documentació.
El repositori és el lloc on es centralitzen els canvis, nosaltres el tindrem a parumi.org. Als ordinadors de les aules o a casa tindrem les repliques locals del repositori amb les que treballarem. A les repliques locals dels mòduls s'anomenen sandboxes.
Per treballar amb subversion des de línia de comandes es fa servir la comanda svn. També farem servir un client gràfic, el kdesvn, que és un dels molts clients gràfics que hi ha (esvn, rapidsvn...).
Configurant el proxy
Edita el fitxer .subversion/servers Descomenta i edita les linies del final, secció [global]
http-proxy-host = proxy.upf.edu http-proxy-port = 8080
El sandbox
Obtenint un sandbox
Els repositoris ja estan creats. Cada repositori te un URI associada del tipus http://parumi.org/es1_11_99/ (per la parella 99 del grup 11 de Dilluns).
Per tenir un sandbox en local cal que feu un checkout. des de linia de comandes es fa així:
$ svn co http://parumi.org/es1_11_99
Si no voleu que us demani el login i el password tambe es valid aixo:
$ svn co --username grup_11_99 --password micasa56 http://parumi.org/es1_11_99
Us demanara aceptar una clau ssl, i posar l'usuari i la password, que us donarem a classe quan establiu el grup. Mentres no tingueu grup podeu fer servir aquest
$ svn co http://parumi.org/testing --username user1 --password user1
El checkout creara una estructura de directoris com la seguent:
es1_11_99/.svn es1_11_99/.svn/ ... molts fitxers de control es1_11_99/doc es1_11_99/doc/.svn es1_11_99/doc/.svn/ ... molts fitxers de control es1_11_99/src es1_11_99/src/.svn es1_11_99/src/.svn/ ... molts fitxers de control es1_11_99/AUTORS es1_11_99/README
Els els directoris .svn serveixen per controlar els fitxers a cada directori.
Poblant el repositori
Un cop teniu el sandbox heu de copiar els fitxers de la vostra practica a dins. Per veure l'estat dels fitxers cal ver servir la comanda svn status. Per exemple, si us diu:
$ svn status ? doc/documentRequeriments.html M README
Això vol dir que el fitxer que heu modificat el fitxer README i que el fitxer doc/documentRequeriments.html no esta sota control del subversion. Per afegir el fitxer sota control de subversion cal fer:
$ svn add doc/documentRequeriments.html A doc/documentRequeriments.html
Si mirem l'estatus ara dirà:
$ svn status A doc/documentRequeriments.html M README
Això vol dir que el primer fitxer es nou de trinca i que ara el controlem amb subversion, pero encara no està al servidor. Per pujar els canvis al repositori del sevidor cal fer una entrega, o commit.
$ svn ci -m "Importats fitxers de la A2"
L'opció -m indica un comentari amb el que es justifiquen els canvis. És molt útil indicar-ho de cara a veure la historia de modificacions.
Commited revision 2.
Això vol dir que els teus canvis s'han acceptat com la revisio 2 del repositori. Podeu fer commits de fitxers concrets indicant-los a la linia de comandes.
$ svn ci -m "Importats fitxers de la A2" README
Obtenint informació
De banda de la subcomanda status que ens diu l'estat del sandbox, podem extreure molta més informació del subversion. Per exemple la subcomanda log ens diu les revisions que han modificat un fitxer concret o tot el repositori, amb informacio de qui l'ha fet, quan i el comentari que ha fet.
$ svn log README ------------------------------------------------------------------------ r9 | profe | 2006-10-10 13:35:18 +0200 (dt, 10 oct 2006) | 2 lines Afegit comentari ------------------------------------------------------------------------ r8 | profe | 2006-10-10 12:30:37 +0200 (dt, 10 oct 2006) | 1 line fora conflicte ------------------------------------------------------------------------ r7 | profe | 2006-10-10 12:24:49 +0200 (dt, 10 oct 2006) | 1 line creant conflicte ------------------------------------------------------------------------ r4 | profe | 2006-10-10 12:13:34 +0200 (dt, 10 oct 2006) | 1 line prova ------------------------------------------------------------------------ r2 | profe | 2006-10-10 12:01:07 +0200 (dt, 10 oct 2006) | 1 line només una prova ------------------------------------------------------------------------ r1 | root | 2006-10-06 20:30:37 +0200 (dv, 06 oct 2006) | 1 line Template for the seminars ------------------------------------------------------------------------
També podeu veure les differencies del que teniu vosaltres en local i el que hi ha al servidor.
$ svn diff README Index: README =================================================================== --- README (revision 9) +++ README (working copy) @@ -1+1 @@ -Comentari +Comentari:
Altres comandes interessants
- svn help: És el sistema d'ajuda per veure les subcomandes que hi ha
- svn subcomanda help: Dona ajuda sobre la subcomanda concreta
- svn mkdir: crea un directori ja afegit al control de versions (cal encara commit)
- svn del: treu el fitxer del control de versions
- svn move: canvia o mou un fitxer dins del repositori mantenint la historia
- svn merge: aplica o desaplica en local els canvis entre dos revisions (desaplica si l'ordre és invertit)
- svn copy: copia un fitxer mantenint la historia en ambdues copies
Treballant en concurrència i distribuïts
Actualitzant sandbox
El subversion és molt útil per tenir diferents sandbox (còpies de treball): cada company de pràctiques, cada ordinador a les aules, a casa... D'aquesta manera no cal que ho copieu a la xarxa Novell, ni que us ho envieu per mail.
Si heu enviat al repositori canvis des de una còpia i voleu tenir-los a una altra còpia. nomes cal fer un update
$svn update
Recordeu que fins que no fem update i estem a la darrera revisió, no podrem fer cap commit!
Resolent conflictes
Si fas update i tens canvis en local, normalment es barrejen les versions del fitxer de forma automàtica. No sempre es possible. Per exemple, quan el company i tu heu fet canvis a les mateixes linies. En aquests cas es produeix un conflicte que s'indica amb una C.
$ svn up C README
El subversion crea 3 versions del fitxer en conflicte:
$ svn status ? README.mine ? README.r8 ? README.r9 C README
- README.mine és la versió modificada que teniem en local
- README.r8 és la revisió en la que basavem els nostres canvis (el número pot canviar)
- README.r9 és la darrera revisió, la que ha baixat del repositori (el número pot canviar)
- README és la proposta de barreja
A la proposta de barreja, subversion barreja tot els canvis que no afecten a les mateixes linies. I, on hi ha el conflicte ho indica de la següent manera:
Contingut sense conflicte <<<<<<< .mine El meu canvi en local. ======= El canvi que ha fet el meu company. >>>>>>> .r9 Contingut sense conflicte
Per resoldre el conflicte cal treure les linies que sobren de README i esborrar els fitxers .mine .r8 i .r9. Llavors, si cal, podem fer commit.
Treballant amb kdesvn
Moltes vegades és més pràctic fer servir un frontend gràfic de Subversion. Un dels que hi ha es el kdesvn. (Menu, Alt-F2 o terminal)
Per obtindre una còpia neta del repositori el checkout està amagat/traduït al menú Subversion/General/Descarrega un repositori. Us apareixerà el següent diàleg.
També podeu obrir directament una carpeta que contingui un checkout previ amb l'opció Fitxer/Obre.
Un cop obert us hauria d'apareixer quelcom així:
Modifiquem el README amb un editor. Un cop guardats els canvis, kdesvn marca en vermell el fitxer.
El menu contextual també ens dona opcions per veure els canvis (svn diff):
Entregar els canvis (svn commit):
O per veure l'historia del fitxer (svn log):
El log als frontends gràfics són més potents. Per exemple, amb la tecla control premuda seleccioneu dos revisions i amb el botò Revisions per a diff podeu veure les differències entre les dues.
Quan creem o copiem un fitxer a dins del SandBox, després de fer un refresh, kdesvn l'identifica com extern.
Cal afegir-ho sota el control de subversion amb el menu contextual.
No oblideu que a més caldrà fer commit per que sigui al servidor.
Altres comandes utils
Com desfer els canvis locals (revert)
Si heu fet canvis locals sense comitejar, i els voleu descartar, feu:
svn revert fitxer
Si heu esborrat accidentalment un fitxer que estava sota control del svn, no passa res, feu:
svn update
i us recuperara l'arxiu.
Com tornar a una revisió anterior
Si voleu tornar enrera a una revisio concreta, per exemple a la 178, tots els fitxers del directory:
svn merge -rHEAD:178 directory
o per un fitxer concret
svn merge -rHEAD:178 fitxer








