Tutorial de Subversion

From Es1

Jump to: navigation, search

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)

Kdesvn-obert.png

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.

Kdesvn-checkout.png

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í:

Kdesvn-afterCheckout.png

Modifiquem el README amb un editor. Un cop guardats els canvis, kdesvn marca en vermell el fitxer.

Kdesvn-afterModification.png


El menu contextual també ens dona opcions per veure els canvis (svn diff):

Kdesvn-diff.png

Entregar els canvis (svn commit):

Kdesvn-commit.png

O per veure l'historia del fitxer (svn log):

Kdesvn-log.png

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.

Kdesvn-extern.png

Cal afegir-ho sota el control de subversion amb el menu contextual.

Kdesvn-add.png

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
Personal tools