Curso avanzado SVN

4,925 views

Published on

Subversion uso avanzado by Bruno Gonzalez @ Irontec.

Published in: Technology, Health & Medicine
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,925
On SlideShare
0
From Embeds
0
Number of Embeds
80
Actions
Shares
0
Downloads
139
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Curso avanzado SVN

  1. 1. Subversion Uso avanzado Bruno Gonzalez <bruno@irontec.com> Irontec – Internet y Sistemas sobre GNU/Linux
  2. 2. Curso Avanzado SVN 1 Esquema del curso 1.Nociones básicas: 1.Svn 101 2.Estructura de un checkout 3.Estructura de un repo 2.merge y su hijo bastardo: update 3.Merge avanzado: branches 4.Arreglar los conflictos de merge/update 5.Externals 6.Miscelanea 2
  3. 3. Curso Avanzado SVN 1 Nociones Básicas Nociones básicas 3
  4. 4. Curso Avanzado SVN 1 Nociones Básicas: SVN 101 ➢ 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 4
  5. 5. Curso Avanzado SVN 1 Nociones Básicas: Estructura básica de un checkout ➢ Datos → ls ➢ Metadatos → ls .svn ➢ svn info * ➢ svn proplist (propedit, propdel...) ➢ Se puede mover un checkout o subdirectorio por el disco duro sin problemas. 5
  6. 6. Curso Avanzado SVN Nociones Básicas: Estructura básica de un 1 ➢ trunk tags branches: repositorio ➢ 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) ➢ ... 6
  7. 7. Curso Avanzado SVN 1 Merge y su hijo bastardo: update Merge y su hijo bastardo: update 7
  8. 8. Curso Avanzado SVN 1 Merge y su hijo bastardo update: merge 101 ➢ 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 8
  9. 9. Curso Avanzado SVN 1 Merge y su hijo bastardo update: backports/rollbacks ➢ 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 nuestroCheckout svn 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 9
  10. 10. Curso Avanzado SVN 1 Merge avanzado: branches Merge avanzado: branches 10
  11. 11. Curso Avanzado SVN 1 Merge avanzado de branches: premisas ➢ 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!! 11
  12. 12. Curso Avanzado SVN 1 Merge avanzado de branches: premisas ➢ 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 12
  13. 13. Curso Avanzado SVN 1 Merge avanzado de branches: ramas constantes ➢ 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...) 13
  14. 14. Curso Avanzado SVN 1 Merge avanzado de branches: ramas a corto plazo ➢ 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 14
  15. 15. Curso Avanzado SVN 1 Merge avanzado de branches: ramas a largo plazo ➢ 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 15
  16. 16. Curso Avanzado SVN 1 Arreglar los conflictos de merge/update Arreglar los conflictos de merge/update 16
  17. 17. Curso Avanzado SVN 1 Arreglar los conflictos: qué son ➢ “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. 17
  18. 18. Curso Avanzado SVN Arreglar los conflictos: cómo se identifican y 1 ➢ Aparece una 'C' en svn status resuelven ➢ 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! 18
  19. 19. Curso Avanzado SVN 1 Svn externals y otros consejos svn externals y otros consejos 19
  20. 20. Curso Avanzado SVN 1 Svn externals y otros consejos ➢ 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! 20
  21. 21. Curso Avanzado SVN 1 Svn externals y otros consejos ➢ 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 colordiff echo 'svn diff $* |colordiff |less -R' >svndiff.sh ➢ Autonotas en mantis? 21

×