subversion
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 usatsTRANSCRIPT
Xavier Sala PujolarInstitut Cendrassos
CFGS Desenvolupament d'aplicacions Web M8 - Desplegament d'aplicacions web
Subversion
UF4 Control de versions i documentació
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/
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
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
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
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
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
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
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
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
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
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
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
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ó
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
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
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
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
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
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
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
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
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
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
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
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
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
/
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
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
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
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
Desenvolupament d'Aplicacions Web
Subversion
Servidor de 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
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
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
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
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
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
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
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