Charla svn subversion

653 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
653
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
20
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Charla svn subversion

  1. 1. Introducción a Subversion Subversion● Introducción a subversion
  2. 2. Introducción a Subversion ¿Qué es subversion? (aka svn)● Un ”sistema de control de versiones”.● Almacena ficheros en un servidor central.● Mantiene el historial (diferencial) completo de los datos: nunca se pierde nada. servidor svn (”repositorio”)
  3. 3. Introducción a Subversion ¿Qué es subversion?● Es genérico: – código fuente – imagenes – /etc/* – documentos – Lo que sea!● Es maduro y estable, buen soporte.● Es multiusuario.
  4. 4. Introducción a Subversion Forma de trabajo tradicional● Modificas tus archivos. ...● Decides subir los archivos al servidor común.● Descubres que otro compañero ha modificado cosas en los mismos archivos.● Te das cuenta de las horas que supone integrar sus cambios con los tuyos.● Corres en círculos y te tiras por la ventana.
  5. 5. Introducción a Subversion Forma de trabajo con svn● Modificas tus archivos. ...● Decides subir los archivos al repositorio.● Subversion descubre que otro compañero ha modificado cosas en los mismos archivos.● Subversion integra tus cambios con los de tu compañero y los sube al servidor.● Te vas a tomar unas birras con los amigos.
  6. 6. Introducción a Subversion Sí, claro...● En efecto, svn no siempre sabe como integrar los cambios. – Ej: dos usuarios modifican la misma línea de texto. Original: París es la capital de Japón. Paco: París es la capital de Francia. Ana: Tokyo es la capital de Japón. Subversion: wtf? ---> ”conflicto” Subversion le pregunta a Ana, pues es la última que ha tocao el texto.
  7. 7. Introducción a Subversion No me fío de svn y sus movidas...● Siempre puedes revisar los datos antes de que se suban al repositorio.● Tu set de modificaciones nunca quedará a medio subir: atomicidad (todo o nada).● Antes de subir nada, svn siempre comprueba si otra persona ha tocado el repositorio. ???
  8. 8. Introducción a Subversion Vamos a lo práctico● Subir mis cambios al repositorio: – svn diff //muestra todas las lineas cambiadas – echo ”svn diff $* |colordiff |less -R” >> svndiff.sh – svn commit//saca tu $EDITOR pa que escribas un //resumen de tus cambios, y de seguido los sube // si nadie ha cambiado los mismos ficheros – Ej. de log: revision 42 bugfixed input validator (mantis id: 01183). refactored database: now using DNI as PK in Users table. added spellchecker to contact form.
  9. 9. Introducción a Subversion ...y si han tocado los ficheros? yo: quiero subir mis cambios svn commit svn: quieto parao! hay modificaciones en el repo yo: ah. cuáles son? svn update svn: pues.. te las integro en tu copia local yo: a ver cómo me has dejao el tinglao... svn diff vi file.txtopcional: oh, hay conflictos! los resuelvo. svn resolved file.txt yo: todo ok. quiero subir mis cambios once again svn commit svn: ahora sí que los subo :-D he creado una nueva ”revision”
  10. 10. Introducción a Subversion ¿Qué es eso de las revisiones?● Numero entero incremental asignado a cada modificacion (commit).● Repository-wide: un commit incrementa la revision de todos los ficheros y directorios del repo.● ”head” es un alias para la ultima revision.● Muchos comandos svn aceptan elegir la revision. Ej: -r 120 -r 120:146 -r 120:head
  11. 11. Introducción a Subversion Comandos basicos● Crear una copia local del repositorio (al ppio): svn checkout <repositorio> <directorio local>● Eliminar una copia local (al final): rm -rf <directorio local>● Hacer cambios locales: vi file1 file2 :wqa● Eliminar cambios locales: svn revert file{1,2} //elegantemente rm file{1,2}; svn update file{1,2} //warramente
  12. 12. Introducción a Subversion Comandos basicos II● Añadir, eliminar, copiar, mover, renombrar: svn add/rm/cp/mv/mkdir ...● Se mantiene el historial! add cp mv (editar) rm mv test.cpp file.hpp file.hpp file.hpp file.cpp file.cpp file.cpp file.cpp file.cpp r1 r2 r3 r4 r5 r6
  13. 13. Introducción a Subversion Más cosillas...● Ver número de revision de tu copia local: svn info● Ver los mensajitos de log... svn log //todos los logs desde el primero svn log -r 150 //log de la revision 150 svn log -r head //log de la ultima rev. svn log -r 150:head //logs de la r150..head● Volver a la revision 150 en tu copia local: svn update -r 150 //tb se puede con fechas
  14. 14. Introducción a Subversion Más cosillas II● Ver estado de todos los ficheros/dirs: svn status ● ? .configuration.ini.swp //no versionado ● M Doxyfile //modificado ● M configuration.ini //modificado ● A nuevoFichero.txt //añadido● Ignorar ficheros/dirs (*.bak *.swp binarios ...): svn propedit svn:ignore . *.bak .*.swp log???.txt Debug :wq
  15. 15. Introducción a Subversion Uhh... ”propedit”?● Sirve para almacenar metadatos: – Propiedades usadas por subversion: svn:ignore, svn:externals, svn:eol-style,svn:author, svn:executable... – Propiedades usadas por otros: svnmerge-integrated... – Datos usados por nosotros, por ej: iron:client, iron:trac-url, iron:public-url...● Subcomandos de svn: proplist, propget, propset, propedit, propdel
  16. 16. Introducción a Subversion Ese gran odioso invento: ramas● Ramas paralelas de desarrollo. Ejs: – Una web en castellano vs inglés – Un programa estable vs bleeding-edge – Un programa completo vs demo – Un apache2.conf para windows vs linux● Cómo se crean? – svn cp directorioOriginal ramaNueva● También mantienen el historial.
  17. 17. Introducción a Subversion Ese gran odioso invento: ramas Para hacer: svn cp original ramahabrá que tener un directorio ”original”, claro.Estándar de-facto: /trunk //el original /branches/estable //una rama /branches/demo //otra rama /branches/* //más ramas
  18. 18. Introducción a Subversion Sincronizar cambios concretos trunkr1: svn cp trunk branches/stable trunk new branch stabler2: vi main.cpp trunk new featurer3: vi main.cpp trunk bugfix Ar4: vi main.cpp trunk bugfix Br5: svn merge -c 3:4 ../../trunk stable bugfixes A,BEs como hacer un update de los cambios... contra otro directorio.Hay que mantener manualmente una lista de las revisiones mergeadas :-(
  19. 19. Introducción a Subversion Sincronizar casi todos los cambios● Caso ejemplo: tenemos una software web para la empresa X y otro para la empresa Y. – La empresa X quiere colores verdes, la Y amarillos. – La empresa X quiere su logo.gif, la empresa Y quiere tb su propio logo, claro. – El resto del software web será siempre idéntico. – No vale poner if(empresaX) {...} elif (empresaY) {...} porque se les vende el código fuente también.
  20. 20. Introducción a Subversion Sincronizar casi todos los cambios trunk empresa X desarrollo 1 empresa Y cambio colores trunk cambio colores y logo y logo empresa X desarrollo 2 empresa Y mergeo trunk mergeo desarrollo 1 desarrollo 1 y 2 empresa X empresa Y mergeo Desarrollo N cambio algun texto desarrollo 2 empresa X empresa Y mergeo desarrollo Nmergeo desarrollo N
  21. 21. Introducción a Subversion Sincronizar casi todos los cambios● También hay que mantener una lista de las revisiones mergeadas. – ¿Por qué? El algoritmo de merging es un poco kk.● Como es un coñazo, dejamos que un programa lleve la lista por nosotros: – svnmerge.py ● En teoría www.orcaware.com/svn/wiki/Svnmerge.py... ● ...pero está caída asi que usad su google-cache (solo parece tirar en modo ”text only”).
  22. 22. Introducción a Subversion Tags (etiquetas)● Ejemplos: ”alpha 0.7”, ”rc2”, ”v2.5”...● Cómo se puede hacer?: – Llevar manualmente una lista de esos tags<-->revs – svn cp -r 176 repo/trunk tags/beta2 ● Típica estructura svn: trunk, branches/*, tags/*● Subversion solo almacena las modificaciones, asi que un tag ocupa virtualmente nada.
  23. 23. Introducción a Subversion ”Montar” repositorios externos● Incluir un repositorio de terceras partes: – A mano (local, mantenimiento manual): $ cd ~/miRepo $ svn co svn://foo.com/libbar/tags/v1.7 libbar $ svn co -r943 svn://svn.irontec.com/gesti/trunk libgesti – Con externals (repository-wide, mantenimiento automatico): $ cd ~/miRepo $ svn propedit svn:externals . libbar svn://foo.com/libbar/tags/v1.7 libgesti -r943 svn://svn.irontec.com/gesti/trunk :wq $ svn commit -m”Added 3rd party libs and gesti lib” $ svn update (recomendable usar siempre -rN: versiones consistentes!) – Ignorar externals: svn <subcomando> --ignore-externals
  24. 24. Introducción a Subversion ”Montar” repositorios externos● Los externals son usables... y mejorables: – Solo se puede referenciar directorios, no ficheros. – Referencias a directorios absolutos (no vale ../algo). – La propiedad svn:externals no se actualiza con svn mv/etc. – Commits manuales: ● arreglamos un bug: vi libgesti/gesti.inc ● committamos el apaño (mal!): svn commit -m”Fixed login (mantis id:001919).” ● committamos el apaño (ahora sí): cd libgesti svn commit -m”Fixed login (mantis id:001919).”
  25. 25. Introducción a Subversion Administración● Crear un repo: – svnadmin create /var/svn/miRepositorio● Servir un repo: – Svnserve: svn:// – Apache: http:// https:// – SSH: svn+ssh://● Backup: – svnadmin hotcopy miRepo /backups/miRepo
  26. 26. Introducción a Subversion Recomendaciones mías● ”Save early, save often”. Haz commits muy a menudo.● Cambios independientes, commits independientes (backports de fixes, etc...). Puedes tener varios checkouts.● Todos los commits deben ser usables/compilables. Puedes usar ramas para versionar tus cambios grandes.● Revisa el status y el diff antes de cada commit (cambios temporales, archivos no añadidos, etc...).● Siempre escribe un log. Básate en el diff.● Referencia número de issue en el log de svn y el número de revisión al cerrar el issue.
  27. 27. Introducción a Subversion Recomendaciones mías● Los comentarios sobre código van en el código, no en el log.● Yo suelo usar palabras clave, pueden ayudar a crear un ”changelog” publico (a mano o incluso scriptado). Por ejs: – fixed login failures. modified logo image: it had pixelation issues (issue #9). replaced Exit with Logout class. added new Pedido class (issue #225). removed deprecated headers from /common/foo. bufixed invisible checkbox labels (issue #98). renamed classes to CamelCase. refactored footer DIVs (patch by Joe <joe.a@gmail.com>). etc...
  28. 28. Introducción a Subversion Administración● FAQ: ”¡Auxilio, socorro! Se me ha colado mi número de VISA en un commit!!!!11!1one!! qué hago???” – Primer intento (mal): ● svn rm visa.txt ● svn commit -m”Removed my visa number” – Segundo intento (ahora sí): ● Se hace un svnadmin dump del repositorio. ● Se le pasa por svndumpfilter ● Se recarga el dump al repositorio con svnadmin load.● Sip, es una warrada... así que revisad los commits!
  29. 29. Introducción a Subversion Más información● CLIs: apt-get install subversion && ls /usr/bin/svn*● GUIs (http://subversion.tigris.org/links.html): – Standalone: tortoisesvn, rapidsvn, kdesvn, ... – Plugin: subclipse, vcscommand.vim, psvn.el, ksvn, ...● APIs: – SvnCPP, PySvn, SvnKit (java), SubversionSharp (C#), PECL SVN (PHP)● Ayuda: ● <comando> help [subcomando] ● Para todo lo demás... el libraco (sig. pag.):
  30. 30. Introducción a Subversion Más información
  31. 31. Introducción a Subversion Aftermatch● ¿Dudas, sugerencias, insultos, etc?
  32. 32. Introducción a Subversion The End. ● Gracias por asistir! :-D2007 © Bruno González Campo aka STenyaK <stenyak@stenyak.com>Creative Commons Attribution-Noncommercial-Share Alike 2.5 Spain License
  33. 33. Introducción a Subversion Licencia Copyleft●Este documento está protegido bajo la licenciaReconocimiento-SinObraDerivada 2.1 España de CreativeCommon (http://creativecommons.org/licenses/by-nd/2.1/es/)Copyright © 2007 Irontec <contacto@irontec.com>Se permite la copia, modificación, distribución, usocomercial y realización de la obra, siempre y cuando sereconozca la autoría de la misma, a no sea ser que seobtenga permiso expreso del autor. El autor no permitedistribuir obras derivadas a esta.Esta nota no es la licencia completa de la obra, sinouna traducción de la nota orientativa de la licenciaoriginal completa (jurídicamente válida).

×