1 Bazaar: Nueva generacion de sistemas de versionamiento distribuido Martin Albisetti [email protected]
2 Informacion General ● Hecho completamente desde cero ● Integramente desarrollado en Python ● Financiado por Canonical ● GPL v2 and newer! :D ● Muy facil de agregar funcionalidades ● Comunidad muy amigable ● En constante desarrollo
3 Conceptos Basicos
4 Revision ● Una foto del arbol de archivos y directorios, incluyendo su contenido y estado ● Incluye metadata: – fecha creado – autor – mensaje del commit – ancestro de cada archivo – mas cosas :D
5 Working Tree ● Un directorio versionado que contiene archivos y directorios que el usuarios puede editar ● Muchos comandos usan el Working Tree como su contexto – e.j. commit hace una nueva revision usando el contenido actual del Working Tree
6 Branch ● Una serie de revisiones ordenadas ● La ultima revision de un branch es llamada “head” ● Los Branches pueden ser separados y vueltos a “unir” mas adelante ● Los Branches estan relacionados si tienen “ancestros comunes”
7 Repository ● Donde se guardan las revisiones ● Por defecto, cada Branch tiene su propio repositorio – para ahorrar disco y optimizar, los Branches pueden compartir repositorios
8 Empezando desde el principio Instalar, Configurar e Interfaz
9 Instalando Bazaar ● Paquetes para Linux disponibles: – Ubuntu/Debian (apt) – Redhat/Fedora (yum) ● Otros sistemas operativos: – Windows – instalador disponible – Mac OS X – MacPorts o Fink – Free BSD - FreshPorts
10 Configurando Bazaar ● Nos presentamos a Bazaar... – bzr whoami “ [email protected]” ● Verifiquemos... – bzr whoami [email protected] ● o – vi ~/.bazaar/bazaar.conf
11 Ejecutando Comandos ● Sintaxis general: – bzr comando opciones/argumentos ● A tener en cuenta: – Las opciones pueden aparecer antes o despues de los argumentos – Las opciones globales tambien
12 Comandos Comunes ● -h, --help ● -v, --verbose ● -q, --quiet ● -r, --revision ● ayuda! ● mostrar mas info ● mostrar menos info ● elegir rango de revisiones: x..y – incluye x – excluye y – ambos opcionales
13 Aliases de Comandos ● Muchos comandos tienen aliases: – escribimos menos :D – mas facil para usuarios de SVN o CVS ● Podes crear los tuyos: [ALIASES] diffm=diff –-using meld
14 Plugins ● Los plugins agregan comandos, mas opciones, formatos y funcionalidades completamente nuevas
15 Interfaces Graficas
16 Ayuda! ● Bazaar viene con la ayuda integrada ● Para ver los temas disponibles: – bzr help ● Ayuda de un comando especifico: – bzr help xxx
17 Control de Versionamiento Personal Quien digo que los SCV son solo para equipos?
18 Empezando un Proyecto ● Versionando un proyecto existente: – cd super_proyecto – bzr init – bzr add – bzr commit -m “Inicio del Versionamiento” ● Una copia de todos los archivos estan almacenados en el directorio.bzr – Solo en el directorio superior (en contraste con cvs/svn)
19 Ver nuestros cambios ● Cambios realizados: – bzr status ● Diferencias reales: – bzr diff
20 Versionando archivos y directorios ● Versionar todos los archivos y directorios: – bzr add ● Registrar *algunos* archivos y directorios: – bzr add foo.py bar/
21 Registrando tus Cambios ● Registrar todos los cambios: – bzr commit ● Registrando solo algunos cambios: – bzr commit README doc/ ● El comando -m se usar para darle el mensaje directamente desde la linea de comando – en caso contrario se abre un editor de texto
22 Deshacer Cambios ● Des-versionando un archivo: – bzr remove foo.py ● Deshacer el ultimo commit: – bzr uncommit ● Deshacer todos los cambios desde el ultimo commit: – bzr revert – bzr revert foo.py
23 Viendo nuestro Historial ● Historial de este Branch: – bzr log ● Historial resumido: – bzr log --short ● Interfaces graficos disponibles... ● bzr-gtk (GNOME) – bzr visualize ● Qbzr (KDE) – bzr qlog
24 Viendo el Historial de un Archivo ● Mostrar cambios que afectar foo.py: – bzr log foo.py ● Contenido de foo.py en la Revision X: – bzr cat -r X foo.py
25 Comandos Principales ● Mas usados: init add commit status diff log export ● Otros comandos: remove uncommit revert cat tag mv
26 Compartiendo Dos cabezas son mejor que una
27 Creando un Branch nuevo ● Clonar un Branch existente: – bzr branch URL [directorio] ● Por defecto el nombre del directorio se toma de la ultima parte de la URL ● Ejemplos: – bzr branch /home/jbazaar/super-dev – bzr branch /home/jbazaar/super-dev mega – bzr branch http://jbazaar.su/super-dev – bzr branch sftp://[email protected]/super-dev
28 Volviendo a Unir cambios ● Para tomar los cambios de otro branch usamos el comando merge: – bzr merge [URL] ● Si omitimos la URL, se usa la URL del Branch padre
29 Conflictos :( ● Algunas operaciones solo pueden ser realizadas con la intervencion de una persona ● Si el comando merge reporta problemas, crea tres archivos: ● foo.THIS ● foo.OTHER ● foo.BASE
30 Resolviendo Conflictos Marcadores Claro: >> MERGE-SOURCE ● Despues de editar, los damos por resueltos: – bzr resolve ● Para dar por resuelto foo.py: – bzr resolve foo.py
31 Quien hizo que? ● Cuando desarrollan una o mas personas, a veces es util saber quien hizo que – bzr annotate foo.py ● Tambien disponible en forma grafica con el plugin bzr-gtk – bzr gannotate foo.py
32 Desarrollando en Equipo Hay mas de una forma para hacer lo mismo!
33 Enviando Branches ● La forma mas facil para compartir nuestro branch es hacer un “push” a un lugar compartido ● Comunmente se usa: – discos compartidos (Windows/Samba, NFS) – servidores web (via sftp o ftp) ● Ejemplos: – bzr push x:\proyectos\super – bzr push sftp://jbazaar.su/public_html/super
34 Administrando Branches ● A veces se nos pueden acomular muchos branches del mismo proyecto ● Para saber mas del branch: – bzr info ● Bautizar un branch: – bzr nick super-funcionalidad-nueva ● Comprar con el Branch padre: – bzr missing
35 Checkouts ● Un working tree que esta unido al branch remoto ● Commits en un checkout: – Verifica que el working tree este actualizado – guarda primero en el branch remoto ● Para hacer un checkout: – bzr checkout URL ● Crear un checkout sin un branch local: – bzr checkout --lightweight URL
36 Checkouts ● Unificar los cambios desde el branch padre: – bzr update ● Una vez que estamos actualizados con el branch padre podes hacer un commit: – bzr commit
37 Ayudando en la Comunidad Open Source El podes a la gente
38 Cambiando las reglas de la Comunidad... ● SCV Central: – solo pueden mandar cambios los dev. principales – solo ellos le sacan el jugo al SCV – el resto de los dev. manda parches ● SCV Distribuido: – solo pueden mandar cambios los dev. principales – todo el mundo le gana con el SCV – el resto de la gente manda sus branches (o bundles)
39 Los Desarrolladores Secundarios ganan ● SCVD elimina la barrera tecnica entre los que pueden mandar cambios y los que no ● La cuestion pasa a ser a donde pueden mandar sus cambios: – solo su branch? – el branch del equipo? – el branch principal? ● La barrera que queda es social
40 Los Desarrolladores Principales ganan tambien ● Menos administracion: – compartir y unificar ya no requiere otro branch mas – cada branch es un backup completo :D ● Mas flexibilidad: – podemos compartir nuestros cambios con cualquiera, no solo el branch principal – si usamos Bazaar, se puede cambiar el flujo de trabajo a medida que evoluciona la comunidad sin cambiar de herramienta
41 Hay mucho mas! ● Algunas cosas que no cubrimos: – Integracion con IDEs y sistemas de manejos de archivos – Smart servers – Nested trees – Testaments (firmar commits con gpg) – Branches externos (e.j. bzr-svn) – Programar para Bazaar
42 Web Sites ● Web site principal: – http://bazaar-vcs.org http://bazaar-vcs.org ● Launchpad – Bug tracking, etc: – https://launchpad.net/bazaar/ (Bazaar related) https://launchpad.net/bazaar/ – https://launchpad.net/bzr/ (Bazaar core) https://launchpad.net/bzr/ ● Documentacion oficial: – http://doc.bazaar-vcs.org http://doc.bazaar-vcs.org
43 La Comunidad Bazaar Internet Relay Chat: – #bzr en irc.freenode.net Listas de correo: – Ver el site principal Nuevos contribuidores bienvenidos!
44 Gracias! [email protected] [email protected] nick irc: beuno