curso avanzado svn
DESCRIPTION
Subversion uso avanzado by Bruno Gonzalez @ Irontec.TRANSCRIPT
SubversionUso avanzado
Bruno Gonzalez <[email protected]>Irontec – Internet y Sistemas sobre GNU/Linux
Curso Avanzado SVN
2
1 Esquema del curso
1.Nociones básicas:1.Svn 1012.Estructura de un checkout3.Estructura de un repo
2.merge y su hijo bastardo: update3.Merge avanzado: branches4.Arreglar los conflictos de merge/update
5.Externals
6.Miscelanea
Curso Avanzado SVN
3
Nociones básicas
1Nociones Básicas
Curso Avanzado SVN
4
➢ Comandos típicos➢ Checkout – svn co➢ Update – svn up➢ Commit – svn ci➢ Status – svn st➢ cat, blame, log… → svn help
➢ Usar siempre que se pueda:➢ Copy – cp➢ Move – mv
➢ URLs:➢ Locales: ./X➢ Remotas: http://dev2.../X➢ Remota (rev): http://dev2.../X@R
1Nociones Básicas: SVN 101
Curso Avanzado SVN
5
➢ Datos → ls➢ Metadatos → ls .svn
➢ svn info *➢ svn proplist (propedit, propdel...)
➢ Se puede mover un checkout o subdirectorio por el disco duro sin problemas.
1Nociones Básicas: Estructura básica de un checkout
Curso Avanzado SVN
6
➢ trunk tags branches:➢ Es un estandard de-facto➢ Podemos usarlo o no, a svn le da igual
➢ Los directorios de svn tienen el significado que nosotros le demos:
➢ trunk releases branches➢ trunk tags branches➢ edge released estable➢ internal external➢ (nada)➢ ...
1Nociones Básicas: Estructura básica de un
repositorio
Curso Avanzado SVN
7
Merge y su hijo bastardo: update
1Merge y su hijo bastardo: update
Curso Avanzado SVN
8
➢ Qué es merge → DIFF + PATCH➢ 1) Encontrar cambios en un sitio➢ 2) Aplicar los cambios en otro sitio (by
default: “.”)
svn merge -r rev1:rev2 origen [destino]
➢ Ejemplo:➢ svn merge -r BASE:HEAD .➢ svn update -r HEAD
➢ svn help merge➢ --dry-run para previsualizar sin aplicar
1Merge y su hijo bastardo update: merge 101
Curso Avanzado SVN
9
➢ Qué es un backport: aplicar un bugfix/feature de otro sitio a nuestro checkout/fichero.svn merge -rREV-1:REV otroSitio nuestroCheckout
svn merge -c REV otroSitio nuestroCheckout
➢ Backport de varios revisiones concretas:svn merge -c 5, 7, 10,11 otroSitio nuestroCheckoutsvn merge -r 4:5 6:7 9:11 otroSitio nuestroCheckout
➢ Restaurar una version vieja:svn merge -r BASE:X nuestroFichero nuestroCheckout
svn cp nuestroFichero@X nuestroCheckout
➢ Para evitar conflictos, no tener cambios locales
1Merge y su hijo bastardo update: backports/rollbacks
Curso Avanzado SVN
10
Merge avanzado: branches
1Merge avanzado: branches
Curso Avanzado SVN
11
➢ Tipos básicos:➢ Ramas constantes (nunca cambiarán):
➢ Tags, releases, snapshots➢ Ramas a corto plazo (horas/días):
➢ Features, bugfixes complicados➢ Ramas a largo plazo (infinito):
➢ Estable, trunk
➢ Antes de remezclar ramas ni mergear nada:Eliminar/Committear siempre los
cambios locales!!
1Merge avanzado de branches: premisas
Curso Avanzado SVN
12
➢ Crear una rama:➢ svn cp trunk miRama➢ svn cp http://.../trunk http://.../miRama
➢ Renombrar una rama: ➢ svn mv http://.../miRama http://.../foo
➢ Eliminar una rama que ya no hace falta:➢ svn rm http://.../miRama
➢ Aún así, siempre quedarán en el historial!!➢ Atajo: http://.../svn/proyecto/XXX == ^XXX
1Merge avanzado de branches: premisas
Curso Avanzado SVN
13
➢ Son lo más simple:➢ svn cp http://.../trunk http://.../tags/XXX
➢ Lo normal es que jamás se modifiquen estas ramas (excepto renombrar tal vez).
➢ Es típico usarlas para cada “entrega” o checkpoint importante.
➢ Entregas:➢ svn export http://.../tags/XXX XXX➢ zip -r 9 XXX.zip XXX➢ thunderbird XXX.zip (o lo que sea...)
1Merge avanzado de branches: ramas constantes
Curso Avanzado SVN
14
➢ Crear rama como siempre:➢ svn cp http://.../trunk http://.../featureX
➢ Developear en esa rama:➢ while (1): vi *.php; svn ci
➢ Ponerse al día con trunk:➢ svn merge ^/trunk
➢ Pasar tu featureX a trunk:➢ svn switch ^/trunk➢ svn merge ^/featureX
➢ Eliminar rama como siempre:➢ svn rm http://.../featureX
1Merge avanzado de branches: ramas a corto plazo
Curso Avanzado SVN
15
➢ Crear rama como siempre:➢ svn cp http://.../trunk http://.../clienteX
➢ Developear en esa rama:➢ while (1): vi *.php; svn ci
➢ Ponerse al día con todo trunk:➢ svn merge ^/trunk
➢ Backportear un revisiones concretas:➢ svn merge -c 158 ^/clienteYYY➢ svn merge -c 48,49,109 ^/clienteZZZ
1Merge avanzado de branches: ramas a largo plazo
Curso Avanzado SVN
16
Arreglar los conflictos de merge/update
1Arreglar los conflictos de merge/update
Curso Avanzado SVN
17
➢ “Mi casa es blanca”➢ Juan: “Mi casa es negra” → svn commit➢ Svn: OK!➢ Enjuto: “Tu casa es blanca” → svn commit➢ Svn: error, updatea tu version➢ Enjuto: svn update➢ Svn: error, hay un conflicto
SVN no sabe si debe dejarlo como juan quiere o como enjuto quiere.
1Arreglar los conflictos: qué son
Curso Avanzado SVN
18
➢ Aparece una 'C' en svn status➢ Aparecen fichero.mine, fichero.r27, etc.➢ Svn modifica el fichero con el intento de
merge.>>>>>>
“Mi casa es negra”
======
“Tu casa es blanca”
<<<<<<
➢ Enjuto: vi fichero→“mi casa es negra, la tuya blanca”
➢ Enjuto: svn resolved fichero➢ Enjuto: svn commit➢ Svn: OK!
1Arreglar los conflictos: cómo se identifican y
resuelven
Curso Avanzado SVN
19
svn externals y otros consejos
1Svn externals y otros consejos
Curso Avanzado SVN
20
➢ Son metadatos. Permite symlinkear a cualquier directorio de cualquier repositorio.
➢ Como crearlos:➢ svn propedit svn:externals .
libs/karma -r1287 http://.../karma/trunk libs/karma http://.../karma/tags/v1.5”
➢ Usar revisiones o ramas constantes siempre!➢ Así un checkout de tu proyecto obtendra
siempre karma en el mismo estado ahora y el año que viene.
➢ Ojo: las rutas no se actualizan solas!
1Svn externals y otros consejos
Curso Avanzado SVN
21
➢ Versionar un fichero como ejecutable:svn propset svn:executable “*” fichero
➢ Ignorar ficheros de un directorio:➢ Svn propedit svn:ignore .
tmp.*
cache/.*jpg
Debug$
➢ Poder visualizar un diff:apt-get install colordiffecho 'svn diff $* |colordiff |less -R' >svndiff.sh
➢ Autonotas en mantis?
1Svn externals y otros consejos