|
Esta sección es un esbozo en construcción. Se aprecian tus aportes y paciencia |
Bazaar: Un sistema de control de versiones distribuido hecho en python
Categorías: Debian | Sabayon/Gentoo |
La Siguiente documentación es una adaptación del tutorial de Bazaar en ingles.
1. Introducción
Bazaar es un DRCS (Decentralized Revision Control Systems). A diferencia de otros sistemas de control de versiones, los cuales hacen el versionado contra un servidor central. Bazaar lo hace de forma distribuida. mas adelante explicaremos esto.
2. Instalación
2.1. En Debian
Esta instalación se hace en ubuntu 6.algo via apt.
Para instalar bazaar lo que debemos hacer es lo siguiente:
- Agregamos las siguientes fuentes a nuestro listado de fuentes de apt las cuales se encuentran en el archivo /etc/apt/sources.list
deb http://bazaar-vcs.org/releases/debs/edgy ./ deb-src http://bazaar-vcs.org/releases/debs/edgy ./
- Actualizamos nuestro caché de apt.
$ apt-get update
- Buscamos los paquetes relacionados con Bazaar
$ apt-cache search bzr
- Instalamos los paquetes necesarios.
% apt-get install bzr
2.2. En gentoo
# emerge bzr bzrtools
Bazaar nos agrega un simple comando a nuestro listado de comandos que encontramos en el sistema el cual es bzr.
2.3. Clientes gráficos
Para los que ya han trabajado con Subversion (SVN) el manejo de Bazaar es muy similar a Subversion mas adelante se podrán dar cuenta.
Si eres de las personas que te gusta tener un entorno gráfico para el manejo de las herramientas. Tenemos diferentes posibilidades para ti. Una de ellas en Olive.
Olive es un GUI (Grafical User Interface) para Bazaar, es muy fácil de instalar y utilizar.
Para instalar Olive lo único que debes hacer es lo siguiente:
% apt-get install olive
y para ejecutarlo
$ olive
3. Introducción al manejo de Bazaar
Uno de los objetivos de un sistema de control de versiones es el seguirle la pista a el cambio de algo. En un sistema descentralizado como lo es Bazaar, requiere de un identificador por cada autor. Muchas personas ya utilizan un correo electrónico. Bazaar está en la capacidad de generar automáticamente correos electrónicos revisando tu nombre de usuario y nombre de host. Si no quieres que Bazaar adivine esto, tienes tres posibilidades para definir tu correo y nombre de usuario.
Seleccionando una cuenta de correo via bzr whoami
Nota: Recordemos que el comando whoami retorna el nombre del usuario que ejecuta el comando.
- Para tomar un identificador global utilizamos el siguiente comando:
$ bzr whoami "Your Name <email@example.com>"
- Si lo que usted quiere es tener diferentes identificaciones por ramas especificas lo que debe hacer es entrar al folder de la rama y ejecutar los siguiente:
$ bzr whoami --branch "Your Name <email@example.com>"
Configurando el correo electrónico en el archivo ~/.bazaar/bazaar.conf . esto lo podemos haces añadiendo las siguientes lineas:
Nota: Recuerde que [DEFAULT] es case sensitive, es decir hace distinciones entre mayúsculas y minúsculas
[DEFAULT] email=Your Name <email@isp.com>o[/the/path/to/the/branch] email=Your Name <email@isp.com>
En el archivo ~/.bazaar/location.conf
- Sobre-escribiendo las dos opciones anteriores.
3.1. Creando una rama
La historia de cambios se almacena por omisión en un directorio llamado .bzr el cual se encuentra en el directorio de la rama. Creamos una nueva rama la ejecutar le comando bzr init en el directorio donde sera ubicada.
A continuación podemos ver como luego de ejecutar el comando bzr init se genera una nueva carpeta la cual contendra el historial de esa rama:
$ mkdir Tutorial $ cd Tutorial $ ls -a ./ ../ $ bzr init $ ls -a ./ ../ .bzr/
3.2. Versionando Archivos
Al igual que con CVS, se tiene tres status de archivos: desconocido, ignorado y versionado. El comando Add convierte un archivo desconocido en uno versionado.
$ echo 'mi texto' > texto.txt $ bzr status unknown: texto.txt $ bzr add hello.txt added texto.txt $ bzr status added: texto.txt
3.3. Eliminando archivos versionados
Para eliminar archivos ya versionados, es decir para retirar este archivo de la rama de versiones lo que debemos hacer es lo siguiente:
$ bzr remove texto.tx deleted: texto.txt $ bzr status removed: texto.txt
Nota: a diferencia de SVN este comando si elimina el archivo del disco. Si a eliminado un archivo o rama que no quería lo que debe hacer es lo siguiente:
$ bzr revert +N texto.txt
3.4. Localización de ramas
Todo el historial de una rama se encuentra en cada directorio o rama, en un directorio llamado .bzr, este contiene archivos de control de Bazaar. Por omisión este es un repositorio o separado como es usado en SVN o SVk. usted puede seleccionar para crear un repositorio si lo necesita hacer (Ver el comando bzr init-repo)
3.5. Revisando los Cambios
Una ves hallas terminado algún trabajo, podrás enviar estos cambios al historial de cambios, hacer esto es una buena practica ya que siempre tendrás la versión actualizada de tu trabajo, si quieres hacer cambios, correcciones, etc. De esta forma podrás dividir en diferentes puntos en el tiempo la evolución de tu trabajo.
Dos comandos comúnmente utilizados para estas tareas son: status y diff
3.5.1. bzr status
El comando status te informa de que cambios han sido realizados en una rama o directorio de trabajo a partir de la ultima versión.
$ bzr status modificado: texto.txt
el comando status oculta en el informe los archivos que no tienen cambios o los que se definieron para ser omitidos.
3.5.2. bzr diff
el comando diff muestra todo el texto y sus diferencias de un archivo o conjunto de ellos en formato unificado diff.
$ bzr diff === modified file 'texto.tex' --- rama2/texto.tex 2007-07-25 14:37:03 +0000 +++ rama2/texto.tex 2007-07-25 14:37:33 +0000 @@ -1,2 +1,2 @@ texto base -texto eliminado + texto agregado
cuando colocamos la opción -r el árbol es comparado con la ultima versión o entre diferentes versiones.
$ bzr diff -r 2..4
Esto nos mostraría las diferencias entre la versión 2 y la 4 de todo el árbol.
La opción --dif-options corre el programa externo diff pasandole opciones. Por ejemplo:
$ bzr --diff-options -side-by-side texto.txt === modified file 'rama2/texto.tex' texto de prueba texto de prueba texto agregado | texto agregado
3.6. Enviando Cambios
Luego que el comando status sea satisfactorio, usted podrá enviar los cambios al repositorio y de esta forma crear un nuevo numero de versión, una instantánea de los archivos en este punto del tiempo.
El comando commit viene acompañado de un mensaje en el cual se describe los cambios hechos en el o los archivos. Este mensaje es digitado por el usuario y viene acompañado de la fecha, hora, id del usuario, inventario y contenido del árbol. el mensaje es especificado con la opción -m o --message. También puedes ingresar un comentario con múltiples lineas.
$ bzr commit -m "added my first file" modified: texto.tex Committed revision 5.
Puedes usar también la opción -F para tomar el mensaje desde un archivo, de esta forma puedes editar un archivo plano y que su contenido sea tomado como el comentario de la actualización del archivo. Cuando no definimos un archivo o un mensaje, bzr ejecuta el editor por omisión del sistema. Este lo podemos encontrar en la variable de entorno BZR_EDITOR.
Por omisión son actualizado todos los archivos y subdirectorios del árbol al menos que especifique el archivo o subdirectorio a actualizar.
3.7. Ignorando Archivos
En muchos árboles hay archivos que no necesitamos versionar como lo pueden ser archivos temporales, etc. Para que Bazaar ignore estos archivos, lo que debemos hacer es agregar un archivo llamado .bzrignore que contenga expresiones regulares en el nombre de los archivos que queremos que sean ignorados. Cada expresión debe ser definida en una linea distinta.
Cada directorio o rama puede contener su listado de archivos ignorados definidos en el archivo .bzrignore que se encuentra en cada rama, pero si quiere ignorar archivos globalmente lo puedes hacer editando el archivo ~/.bazaar/ignored. Por ejemplo:
*.tmp *~
En este caso no ignorará los archivos terminados en .tmp y ~ los cuales por lo general son archivos temporales.
Para ver que archivo han sido ignorados en una rama especifica lo que debemos hacer es ubicarnos en cada rama y ejecutar el comando ignored
$ bzr ignored texto.txt.tmp
3.8. Examinando el Historial
El comando log nos muestra un listado da lar revisiones previas. El comando log al igual que el comando diff antes mencionado soporta también la opción -r la cual tiene la misma función que en el comando diff.
$ bzr log -r 2..4 ------------------------------------------------------------ revno: 4 committer: Guio <fredy_guio@yahoo.es> branch nick: PruebasBazaar timestamp: Wed 2007-07-25 09:37:03 -0500 message: texto agregado ------------------------------------------------------------ revno: 3 committer: cogniware <cogniware@cogniware> branch nick: PruebasBazaar timestamp: Tue 2007-07-24 12:17:13 -0500 message: actualiza todo ------------------------------------------------------------ revno: 2 committer: cogniware <cogniware@cogniware> branch nick: PruebasBazaar timestamp: Tue 2007-07-24 12:03:00 -0500 message: ij
3.9. Estadísticas de Ramas
El comando info nos muestra un resumen de los trabajos o actividad realizada en una rama.
$ bzr info Location: branch root: file:///home/guio/PruebasBazaar/ Related branches: publish to branch: file:///home/cogniware/PruebasBazaar/ Format: control: Meta directory format 1 working tree: Working tree format 4 branch: Branch format 5 repository: Knit repository format 1 In the working tree: 6 unchanged 0 modified 0 added 0 removed 0 renamed 1 unknown 0 ignored 2 versioned subdirectories Branch history: 5 revisions 0 days old first revision: Tue 2007-07-24 11:56:27 -0500 latest revision: Wed 2007-07-25 10:05:55 -0500 Repository: 5 revisions 5 KiB
3.10. Ramificando
Algunas veces cuando inicias tu propio proyecto, necesitas enviar tus cambios a un proyecto existente. Para hace resto tu necesitas traer un copia de la rama existente. Por que esta nueva copia es una potencial nueva rama del proyecto. Para esto utilizamos el comando branch.
$ bzr branch http://bazaar-vcs.org/bzr/bzr.dev $ cd bzr.dev
Esta copia descarga el historial completo de de la rama, allí podemos hacer todas la acciones en esta copia local de la rama. también se tiene la opción de traer una parte de un historial si así lo deseas.
No entiendo muy bien el concepto
3.11. Siguiendo Cambios contracorriente (upstream)
Te puedes mantener actualizado con la rama padre trayendo adentro sus cambios:
$ bzr pull
Después de esos cambios, el directorio local puede ser un espejo (mirror) de la fuente. Esto incluye el historial de revision el cual es una lista de commits hechos en esta rama, mejor dicho la mezcla de otras ramas.
Este comando funciona solamente si tu rama local (destino)es, bien una copia de la rama padre sin nuevos commits de su propietario. o si el mas reciente commit en tu rama local a sido mezclada en la rama padre.
3.12. Mezclando con Ramas Relacionadas
Si dos ramas se han dividido (ambas tienen cambios únicos) entonces bzr merge es un comando apropiado para utilizar. fuzzy (El comando merge calcula los cambios existentes en la rama cuando tu estas mezclando las ramas intenta aplicar los cambios hechos en la tuya.)
$ bzr merge URL
Si se genera un conflicto mientras mezclas la ramas, tres archivos con la mismo nombre base son creados. El archivo con la base común es llamado con la extensión .BASE , el archivo con tus cambios es llamado con la extensión .THIS y el archivo con el cambio del otro árbol es llamado con la extensión .OTHER . Usando un programa llamado kdiff3 puedes mezclar estos dos archivos (.BASE y .OTHER) sobreescribiendo el archivo .THIS para luego renombrarlo como el archivo original y por ultimo resolviendo la versión. Por Ejemplo:
$ kdiff3 texto.BASE texto.OTHER texto.THIS $ mv texto.THIS texto $ bzr resolve texto
4. Publicando Tu Rama
No necesitas un servidor especial para publicar tu rama bzr, solamente un servidor Web normal. Precisamente refleja (mirror) tus archivos a tu servidor, incluyendo el directorio .bzr. Solamente puedes subir una rama (o los cambios de una rama) por uno de los siguientes métodos:
- El mejor método para hacer esto es bzr.
bzr push sftp://servername.com/ruta/del/directorio
Otra de las opciones es la de utilizar el plugin rspush que viene en el paquete BzTools Este utiliza rsync para subir los cambios al historial de revisiones y al árbol de trabajo.
Tambien puedes hacer esto haciendo una copia manual via rsyn o por algún otro medio de copiado.
4.1. Moviendo Cambios Entre Árboles
Algunas veces haces cambios en el árbol equivocado. Algunas veces por que accidentalmente empezaste a trabajar en el árbol equivocado, tal ves por que estas trabajando de la misma manera, el cambio es mayor de lo que esperabas, por lo que necesitas una nueva rama para esto.
Para mover tus cambios de una rama a otra has esto:
$ cd Otro/directorio $ bzr merge --uncommitted directorio/viejo
5. Referencias
Pagina prinicpal de Bazaar
Otros CVS's
C%C3%B3mo_instalar_y_configurar_Subversion Subversion en el-directorio.
Guia rapida de bazaar (no pregunte por que ni para que)
