curso avanzado svn

21
Subversion Uso avanzado Bruno Gonzalez <[email protected]> Irontec – Internet y Sistemas sobre GNU/Linux

Upload: irontec-internet-y-sistemas-sobre-gnulinux

Post on 12-Jun-2015

4.338 views

Category:

Technology


1 download

DESCRIPTION

Subversion uso avanzado by Bruno Gonzalez @ Irontec.

TRANSCRIPT

Page 1: Curso avanzado SVN

SubversionUso avanzado

Bruno Gonzalez <[email protected]>Irontec – Internet y Sistemas sobre GNU/Linux

Page 2: Curso avanzado SVN

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

Page 3: Curso avanzado SVN

Curso Avanzado SVN

3

Nociones básicas

1Nociones Básicas

Page 4: Curso avanzado SVN

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

Page 5: Curso avanzado SVN

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

Page 6: Curso avanzado SVN

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

Page 7: Curso avanzado SVN

Curso Avanzado SVN

7

Merge y su hijo bastardo: update

1Merge y su hijo bastardo: update

Page 8: Curso avanzado SVN

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

Page 9: Curso avanzado SVN

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

Page 10: Curso avanzado SVN

Curso Avanzado SVN

10

Merge avanzado: branches

1Merge avanzado: branches

Page 11: Curso avanzado SVN

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

Page 12: Curso avanzado SVN

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

Page 13: Curso avanzado SVN

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

Page 14: Curso avanzado SVN

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

Page 15: Curso avanzado SVN

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

Page 16: Curso avanzado SVN

Curso Avanzado SVN

16

Arreglar los conflictos de merge/update

1Arreglar los conflictos de merge/update

Page 17: Curso avanzado SVN

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

Page 18: Curso avanzado SVN

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

Page 19: Curso avanzado SVN

Curso Avanzado SVN

19

svn externals y otros consejos

1Svn externals y otros consejos

Page 20: Curso avanzado SVN

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

Page 21: Curso avanzado SVN

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