subversion

40
Xavier Sala Pujolar Institut Cendrassos CFGS Desenvolupament d'aplicacions Web M8 - Desplegament d'aplicacions web Subversion UF4 Control de versions i documentació

Upload: xavier-sala-pujolar

Post on 08-Jul-2015

138 views

Category:

Education


2 download

DESCRIPTION

Subversion és un exemple d'un sistema de control de versions centralitzat. Va néixer amb la idea de superar els problemes que tenia CVS i s'ha convertit en un dels sistemes centralitzats de codi obert més usats

TRANSCRIPT

Page 1: Subversion

Xavier Sala PujolarInstitut Cendrassos

CFGS Desenvolupament d'aplicacions Web M8 - Desplegament d'aplicacions web

Subversion

UF4 Control de versions i documentació

Page 2: Subversion

Desenvolupament d'Aplicacions Web

Subversion● Es tracta d'un sistema de control de versions

centralitzat que va néixer amb la idea de reemplaçar CVS

– Per això van posar molt d'èmfasi en solucionar els problemes detectats a CVS

● Actualment és un projecte de codi obert de la fundació Apache

http://subversion.apache.org/

Page 3: Subversion

Desenvolupament d'Aplicacions Web

Sistemes CVS Centralitzats● Es té un repositori centralitzat en el que s'hi

van pujant i descarregant els canvis

Hi ha un repositori central que té la

versió PRINCIPAL

Els clients es descarreguen els canvis dels altres i en fan de propis i

els pugen al repositori

REPOSITORI

Page 4: Subversion

Desenvolupament d'Aplicacions Web

Subversion● El repositori pot ser accedit de diferents

formes:

file://

http://https://

svn://svn+ssh://

Accés al repositori en

local

Accés al repositori per xarxa amb el

protocol svn

Accés al repositori per xarxa per HTTP via DAV

Page 5: Subversion

Desenvolupament d'Aplicacions Web

Importar un projecte● Tot comença quan un client importa un projecte

al repositori

REPOSITORIGos

$ svn import animals svn://repositori/animals

Animals.txt

1

Page 6: Subversion

Desenvolupament d'Aplicacions Web

GosAnimals.txt

GosAnimals.txt

GosAnimals.txt

Descarregar un projecte● Els clients poden descarregar-se el projecte

REPOSITORI

Gos

$ svn co svn://repositori/animals

Animals.txt

1 1

1

1

Page 7: Subversion

Desenvolupament d'Aplicacions Web

Identificar revisions● Subversion manté un número per identificar

tots els canvis que es facin en el repositori

GosAnimals.txt

GosGat

GosGatGallina

2

1

3

Cada canvi (el faci qui el faci) incrementa el

número de versió

$ svn logEls comentaris en les versions

$ svn diff -r 3 fitxer.txt

Les diferències entre versions

Page 8: Subversion

Desenvolupament d'Aplicacions Web

Directori de treball● El creador del projecte també l'ha de

descarregar

Al descarregar-lo el projecte es crea en un

directori de treball

Es reconeixen perquè tenen un

subdirectori “ocult”

anomenat .svn amb metadades

Des de dins del directori ja no

caldrà especificar més

el servidor

Page 9: Subversion

Desenvolupament d'Aplicacions Web

Refrescar el projecte● Els clients poden treballar amb les seves còpies

sense que això afecti a ningú més

REPOSITORIGosAnimals.txt

GosGat

Animals.txt

GosAnimals.txt

GosAnimals.txt

Sensecanvis

$ svn update

Si algú actualitza rebrà el que hi ha en el repositori

1 1

1

1

Page 10: Subversion

Desenvolupament d'Aplicacions Web

Comprovar què hem canviat● Sempre es pot veure què s'ha canviat en el

directori de treball i està pendent

REPOSITORIGosAnimals.txt

GosGat

Animals.txt

GosAnimals.txt

GosAnimals.txt

$ svn statusM Animals.txt

1 1

1

1

El primer caràcter indica què hem fet en

el fitxer: Modificat

Page 11: Subversion

Desenvolupament d'Aplicacions Web

Els arxius no s'afegeixen sols● Si algú vol afegir/treure un arxiu del projecte

ho ha d'indicar explícitament

REPOSITORIGosAnimals.txt

GosGat

Animals.txt

GosAnimals.txt

GosAnimals.txt

$ svn add Animals2.txtM Animals.txt

1 1

1

1

El primer caràcter indica què hem fet en

el fitxer: Modificat

PeixAnimals2.txt

1

Page 12: Subversion

Desenvolupament d'Aplicacions Web

Actualitzar un projecte● Un cop acabin de fer les modificacions els

clients pugen els canvis al repositori

REPOSITORIGosAnimals.txt

GosGat

Animals.txt

GosAnimals.txt

GosAnimals.txt

$ svn commit -m “Afegit gat”

GosGat

1 2

1

1

2

Page 13: Subversion

Desenvolupament d'Aplicacions Web

GosGat

Actualitzar un projecte● Els clients es descarreguen la darrera versió del

projecte

REPOSITORIGosAnimals.txt

GosGat

Animals.txt

GosAnimals.txt

Canvis

$ svn update

GosGat

Animals.txt

1

2

2

1

2

Page 14: Subversion

Desenvolupament d'Aplicacions Web

GosGat

Versions del projecte● El repositori manté versions de tots els canvis

REPOSITORIGosAnimals.txt

GosGat

Animals.txt

GosAnimals.txt

GosGat

Animals.txt

1

2

En qualsevol moment es pot tornar a una

versió anterior

2

1

1

$ svn update -r 1

El número de versió

Page 15: Subversion

Desenvolupament d'Aplicacions Web

Problema de compartir...● Si dos clients modifiquen alhora el mateix arxiu

en el mateix lloc i un fa commit...

REPOSITORIGosAnimals.txt

GosGatGallina

Animals.txt

GosGatConill

Animals.txt

GosAnimals.txt

$ svn commit -m “Afegida Gallina”

GosGat

GosGatGallina

3

1

1

1

2

3

Page 16: Subversion

Desenvolupament d'Aplicacions Web

Problema de compartir...● Quan ho faci l'altre si no es fa res tenim un

problema...

REPOSITORIGosAnimals.txt

GosGatGallina

Animals.txt

GosGatConill

Animals.txt

GosAnimals.txt

$ svn commit -m “Afegit gat”

GosGat

GosGatGallina

GosGatConill

3

1

1

1

2

3

Page 17: Subversion

Desenvolupament d'Aplicacions Web

Problema de compartir...● Subversion “mescla” automàticament els canvis

que no porten conflictes ...

REPOSITORIGosAnimals.txt

GosGatGallina

Animals.txt

GosGatConill

Animals.txt

GosGat

Animals.txt

GosGat

GosGatGallina Desactualitzada

2

1

3 2

2

3

2

3

Si els canvis són en els mateixos llocs es crea

un conflicte

Page 18: Subversion

Desenvolupament d'Aplicacions Web

Problema de compartir...● Subversion soluciona el conflicte avisant de que

la versió de treball està desactualitzada

REPOSITORIGosAnimals.txt

GosGatGallina

Animals.txt

GosGatConill

Animals.txt

GosGat

Animals.txt

$ svn commit -m “Afegit gat”svn: Commit failed (details follow):

GosGat

GosGatGallina Desactualitzada

2

1

3 2

2

3

2

3

Page 19: Subversion

Desenvolupament d'Aplicacions Web

Problema de la compartició● Es rebutja el commit i obliga al client a fer un

'update' per resoldre el conflicte

No sempre és possible resoldre

els conflictes automàticament

Page 20: Subversion

Desenvolupament d'Aplicacions Web

Resolució de conflictes● Quan s'actualitza el repositori deixa que l'usuari

prengui la decisió de com resoldre el conflicte

Editar o veure les

diferències

Triar una de les dues versions

O deixar-ho per més endavant

Page 21: Subversion

Desenvolupament d'Aplicacions Web

Resoldre● En cas de posposar-ho es pot resoldre amb una

comanda svn que digui quin és el correcte

$ svn resolve --accept working fitxer.txt

El fitxer correcte és el de la còpia de

treball

$ svn revert fitxer.txt

Descartar els meus canvis

Page 22: Subversion

Desenvolupament d'Aplicacions Web

Bloqueig de fitxers● Subversion ofereix la possibilitat de bloquejar

els fitxers perquè ningú més els pugui modificar

$ svn lock fitxer.txt -d “Bloquejat”'fitxer.txt' locked by user 'xavier'.

$ svn unlock fitxer.txt

No es pot modificar pels altres usuaris fins que sigui desbloquejat

Page 23: Subversion

Desenvolupament d'Aplicacions Web

$ svn add *.txt$ svn delete fitxer.txt$ svn mv fitxer2.txt fitxer.txt$ svn copy fitxer.txt fitxer3.txt$ svn cat fitxer.txt$ svn ls

Gestió dels fitxers● Es poden gestionar els fitxers a emmatzemar

en el repositori

MEU

Page 24: Subversion

Desenvolupament d'Aplicacions Web

Perquè serveix fer “branques”?● Es solen fer branques quan:

– S'ha de fer una modificació important que pot deixar el projecte principal “inestable”

– Quan es vol fer un projecte derivat que tingui diferències puntuals del principal

Page 25: Subversion

Desenvolupament d'Aplicacions Web

Branching● En Subversion es poden crear projectes derivats

de la línia principal

Trunk

La línia principal és anomenada Trunk

Les derivacions són branches

Page 26: Subversion

Desenvolupament d'Aplicacions Web

Crear una branca● Crear una branca és copiar la branca principal

en un altre directori

$ svn copy http://repositori/animals/trunk http://repositori/animals/branches/animals-marins

trunkRepositori

branches

animals-marins

Page 27: Subversion

Desenvolupament d'Aplicacions Web

Branching...● Però subversion no té internament el concepte

de “branching”. Només és una còpia de fitxers i directoris

trunk

animals

branches animalets

Es poden copiar a

qualsevol lloc

/

Page 28: Subversion

Desenvolupament d'Aplicacions Web

Merging● En subversion el procés de copiar dades d'una

branca a una altra s'anomena barrejar (“merging”)

trunkRepositori

branches

animals-marins

Copiar elscanvis

Page 29: Subversion

Desenvolupament d'Aplicacions Web

Sincronitzar de trunk● És corrent que les branques a més de fer la

seva feina sincronitzin els canvis que es produeixin en la branca principal

Si es va sincronitzant periòdicament no hi haurà sorpreses si es

reintegra

$ svn merge ^/animals/trunk

Page 30: Subversion

Desenvolupament d'Aplicacions Web

Barrejar branques● Subversion permet copiar diferències entre

branques “a la carta”

$ svn merge -c 2345

$ svn diff -c 2345

Veure les diferències amb la

versió 2345

Integrar els canvis de la versió 2345

Page 31: Subversion

Desenvolupament d'Aplicacions Web

Reintegrar branques● Moltes vegades l'objectiu final de les branques

és reintegrar-se a la línia principal

$ svn merge –reintegrate ^/animals/branches-/animalets

Page 32: Subversion

Desenvolupament d'Aplicacions Web

Subversion

Servidor de subversion

Page 33: Subversion

Desenvolupament d'Aplicacions Web

Subversion● A través de svnadmin es pot gestionar

qualsevol repositori Subversion

REPOSITORI

# svnadmin create /opt/repositori

# chown -R www-data:svn repositori# chmod -R g+rws repositori

Adaptar permisos

Page 34: Subversion

Desenvolupament d'Aplicacions Web

Subversion● El repositori pot ser accedit de diferents

formes:

file://

http://https://

svn://svn+ssh://

Accés al repositori en

local

Accés al repositori per xarxa amb el

protocol svn

Accés al repositori per xarxa per HTTP via DAV

Page 35: Subversion

Desenvolupament d'Aplicacions Web

file:///● La forma més senzilla d'accedir-hi és

directament:

# svn co file:///opt/repositori

Els permisos els donarà el sistema

operatiu

Page 36: Subversion

Desenvolupament d'Aplicacions Web

WebDAV● Per accedir al repositori via WebDAV cal un

servidor web i el plugin de DAV i Subversion

● S'accedirà al repositori fent servir una URL web

# apt-get install subversion libapache2-svn apache2

# svn co http://192.168.3.22/svn

# svn co https://192.168.3.22/svn

Més seguretat

Page 37: Subversion

Desenvolupament d'Aplicacions Web

Configuració WebDAV● La configuració es defineix al directori

/etc/apache2/mods-available/dav_svn.conf en el que s'hi defineix un Location

<Location /svn> DAV svn SVNPath /opt/repositori AuthType Basic AuthName "Repository" AuthUserFile /etc/subversion/passwd <LimitExcept GET PROPFIND OPTIONS REPORT> Require valid-user </LimitExcept></Location>

Els permisos els definirà el

servidor web

Page 38: Subversion

Desenvolupament d'Aplicacions Web

WebDaV● S'hi pot accedir amb el client Subversion però

també amb un navegador web

● S'han de crear els usuaris i les contrasenyes

# htpasswd -c /etc/subversion/passwd manel

El camí el defineix Apache

Page 39: Subversion

Desenvolupament d'Aplicacions Web

El protocol SVN● Per poder accedir al repositori fent servir aquest

protocol cal iniciar el servidor svnserve

● S'hi accedeix fent servir una ULR amb svn

# svn co svn://192.168.3.22/opt/repositori

REPOSITORI

svnserve -d --foreground -r /opt/repositori

Page 40: Subversion

Desenvolupament d'Aplicacions Web

svn+ssh● Ofereix més seguretat ja que la comunicació va

xifrada

– No cal tenir el servidor svnserve en marxa

# svn co svn+ssh://192.168.3.22/opt/repositori

Definim tot el camí cap al repositori