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
1. Xavier Sala Pujolar
Institut Cendrassos
CFGS Desenvolupament d'aplicacions Web
M8 - Desplegament d'aplicacions web
Subversion
UF4 Control de versions i
documentació
2. 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/
3. 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
4. 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
5. Desenvolupament d'Aplicacions Web
Importar un projecte
●
Tot comença quan un client importa un projecte
al repositori
REPOSITORI
Gos
$ svn import animals
svn://repositori/animals
Animals.txt
1
7. Desenvolupament d'Aplicacions Web
Identificar revisions
●
Subversion manté un número per identificar
tots els canvis que es facin en el repositori
Gos
Animals.txt
Gos
Gat
Gos
Gat
Gallina
2
1
3
Cada canvi (el faci qui
el faci) incrementa el
número de versió
$ svn log
Els comentaris
en les versions
$ svn diff -r 3 fitxer.txt
Les diferències
entre versions
8. 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
9. Desenvolupament d'Aplicacions Web
Refrescar el projecte
●
Els clients poden treballar amb les seves còpies
sense que això afecti a ningú més
REPOSITORI
Gos
Animals.txt
Gos
Gat
Animals.txt
Gos
Animals.txt
Gos
Animals.txt
Sense
canvis
$ svn update
Si algú actualitza
rebrà el que hi ha
en el repositori
1 1
1
1
10. Desenvolupament d'Aplicacions Web
Comprovar què hem canviat
●
Sempre es pot veure què s'ha canviat en el
directori de treball i està pendent
REPOSITORI
Gos
Animals.txt
Gos
Gat
Animals.txt
Gos
Animals.txt
Gos
Animals.txt
$ svn status
M Animals.txt
1 1
1
1
El primer caràcter
indica què hem fet en
el fitxer: Modificat
11. 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
REPOSITORI
Gos
Animals.txt
Gos
Gat
Animals.txt
Gos
Animals.txt
Gos
Animals.txt
$ svn add Animals2.txt
M Animals.txt
1 1
1
1
El primer caràcter
indica què hem fet en
el fitxer: Modificat
Peix
Animals2.txt
1
12. Desenvolupament d'Aplicacions Web
Actualitzar un projecte
●
Un cop acabin de fer les modificacions els
clients pugen els canvis al repositori
REPOSITORI
Gos
Animals.txt
Gos
Gat
Animals.txt
Gos
Animals.txt
Gos
Animals.txt
$ svn commit -m “Afegit gat”
Gos
Gat
1 2
1
1
2
13. Desenvolupament d'Aplicacions Web
Gos
Gat
Actualitzar un projecte
●
Els clients es descarreguen la darrera versió del
projecte
REPOSITORI
Gos
Animals.txt
Gos
Gat
Animals.txt
Gos
Animals.txt
Canvis
$ svn update
Gos
Gat
Animals.txt
1
2
2
1
2
14. Desenvolupament d'Aplicacions Web
Gos
Gat
Versions del projecte
●
El repositori manté versions de tots els canvis
REPOSITORI
Gos
Animals.txt
Gos
Gat
Animals.txt
Gos
Animals.txt
Gos
Gat
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ó
15. Desenvolupament d'Aplicacions Web
Problema de compartir...
●
Si dos clients modifiquen alhora el mateix arxiu
en el mateix lloc i un fa commit...
REPOSITORI
Gos
Animals.txt
Gos
Gat
Gallina
Animals.txt
Gos
Gat
Conill
Animals.txt
Gos
Animals.txt
$ svn commit -m “Afegida Gallina”
Gos
Gat
Gos
Gat
Gallina
3
1
1
1
2
3
16. Desenvolupament d'Aplicacions Web
Problema de compartir...
●
Quan ho faci l'altre si no es fa res tenim un
problema...
REPOSITORI
Gos
Animals.txt
Gos
Gat
Gallina
Animals.txt
Gos
Gat
Conill
Animals.txt
Gos
Animals.txt
$ svn commit -m “Afegit gat”
Gos
Gat
Gos
Gat
Gallina
Gos
Gat
Conill
3
1
1
1
2
3
17. Desenvolupament d'Aplicacions Web
Problema de compartir...
●
Subversion “mescla” automàticament els canvis
que no porten conflictes ...
REPOSITORI
Gos
Animals.txt
Gos
Gat
Gallina
Animals.txt
Gos
Gat
Conill
Animals.txt
Gos
Gat
Animals.txt
Gos
Gat
Gos
Gat
Gallina Desactualitzada
2
1
3 2
2
3
2
3
Si els canvis són en els
mateixos llocs es crea
un conflicte
18. Desenvolupament d'Aplicacions Web
Problema de compartir...
●
Subversion soluciona el conflicte avisant de que
la versió de treball està desactualitzada
REPOSITORI
Gos
Animals.txt
Gos
Gat
Gallina
Animals.txt
Gos
Gat
Conill
Animals.txt
Gos
Gat
Animals.txt
$ svn commit -m “Afegit gat”
svn: Commit failed (details follow):
Gos
Gat
Gos
Gat
Gallina Desactualitzada
2
1
3 2
2
3
2
3
19. 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
20. 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
21. 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
22. 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
23. 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
24. 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
26. 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
27. 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
/
28. 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 els
canvis
29. 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
30. 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
31. 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
33. 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
34. 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
36. 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
37. 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
38. 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
39. 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
40. 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