Introducció

A l'hora de desenvolupar aplicacions informàtiques en grup és molt important disposar d'un sistema de control de versions (VCSversion control system). Explicat molt breument, els VCS són eines de desenvolupament que permeten desar captures del codi font (revisions) creant tot un historial de canvis a mida que avança el desenvolupament del programa; a més, permeten compartir aquestes captures amb els companys de treball i normalment tenen capacitats per resoldre conflictes entre revisions creades en para?lel per diferents persones.

Un VCS potent utilitzat correctament pot incrementar la productivitat de forma dràstica, al reduir problemes de coordinació facilitant que diferents desenvolupadors puguin compartir fàcilment les últimes versions de la seva feina i que més d'una persona pugui fer canvis simultanis a un mateix conjunt de fitxers minimitzant els possibles conflictes resultants.

Hi ha un gran ventall de sistemes de control de versions disponibles, dels quals el més conegut és segurament el Subversion. Aquest, però, permet únicament un model centralitzat i en general és bastant limitat. Personalment prefereixo sistemes com ara el Bazaar (bzr). (El Git és encara més potent, però és molt més difícil d'aprendre a utilitzar, pel qual en aquest apunt em centraré en el Bazaar; també hi ha altres alternatives, com ara el Mercurial, però no estic familiaritzat amb aquestes).

Instal·lació

En sistemes com ara l'Ubuntu o Debian està disponible en un paquet anomenat «bzr» i segurament el mateix sigui cert per a altres distribucions de GNU/Linux. Si feu servir un altre sistema operatiu podeu baixar-lo de bazaar.canonical.com.

Com a nota al marge, el Bazaar també disposa d'una interfície gràfica (Bazaar Explorer), però ja que aquest apunt l'escric orientat a desenvolupadors només explicaré el seu ús des de la línia d'ordres.

Configuració

Abans de poder fer operacions d'escriptura cal que digueu al Bazaar com us voleu identificar. Podeu fer-ho de la següent forma:

bzr whoami "Nom Cognom <email@domini.tld>"

En cas que feu servir el portal Launchpad, també podeu habilitat la integració amb aquest (si no coneixeu el Launchpad, podeu ignorar això):

bzr launchpad-login nom_usuari

Primers passos

Imaginem que estem dins un directori «el-meu-projecte» on hi tenim un seguit de fitxers de codi («main.c» i «utils.c»). Per començar a utilitzar el Bazaar amb aquest codi el primer que hem de fer és crear una branca:

bzr init

Ara podem afegir-hi els fitxers que volem que controli:

bzr add main.c utils.c

i tot seguit podem crear una primera revisió (una captura del contingut actual dels fitxers):

bzr commit -m "Primera revisió del meu nou projecte..."

Un cop fet això, imaginem que acabem de fer uns canvis al fitxer main.c. Un cop comprovat que aquests funcionen correctament, procedirem a crear una segona revisió:

bzr commit -m "Aquí aniria una descripció dels últims canvis."

I ja tenim dues revisions en la nostra branca. Ara podem recuperar el llistat de canvis que hem fet amb:

bzr log

I veuriem alguna cosa com la següents

------------------------------------------------------------
revno: 2
committer: Nom Cognom <email@domini.tld>
branch nick: foo
timestamp: Tue 2011-05-17 18:19:48 +0200
message:
  Alguns altres canvis que he fet...
------------------------------------------------------------
revno: 1
committer: Nom Cognom <email@domini.tld>
branch nick: projecte1
timestamp: Tue 2011-05-17 18:19:29 +0200
message:

  Primera revisió del meu nou projecte...

Si voleu analitzar en més detall una revisió, podeu comparar dues (o més) revisions amb l'ordre:

bzr diff -r1..2

A més, quan arribeu a una versió estable del vostre programa podeu marcar la revisió actual amb una etiqueta, fent:

bzr tag nom-etiqueta

Llavors podreu utilitzar "tag:nom-etiqueta" per referir-vos a aquella versió en lloc d'haver de consultar el número de revisió (revno).

Compartint la branca amb altres

Fins ara només hem estat treballant en local (això és possible ja que el Bazaar -al contrari de l'SVN- és un sistema distribuït). Imaginem que ara voleu compartir el codi amb un company perquè pugui ajudar amb el desenvolupament. Per això us caldrà disposar d'un servidor (qualsevol ordinador accessible, en realitat) on els dos hi tingueu accés SFTP. Enviar-hi la vostra branca completa (amb totes les revisions) és tan fàcil com:

bzr push sftp://el-meu-servidor.tld/directori/destí/projecte1

(Si més enllà de l'SFTP també teniu accés via SSH, i el servidor té el bzr insta?lat, podeu utilitzar el mode de servidor inte?ligent amb «bzr+ssh://». D'altra banda, si el company/a no té accés al servidor, sempre es pot posar la branca en un lloc accessible des de la web i llavors hi tindrà accés només de lectura, via «http://»).

Per obtenir una còpia de la branca, l'altre persona pot fer:

bzr branch sftp://nom-d'usuari@el-meu-servidor.tld/directori/destí/projecte1

A partir d'aquí, els dos podeu fer «bzr push» per enviar els vostres canvis després d'un commit i «bzr pull» per recuperar canvis nous. En cas de produir-se un conflicte (el qual es produeix si es fa un commit sense tenir les últimes revisions de la branca del servidor) es pot arreglar amb «bzr merge».

A més d'aquests constants intercanvis, en qualsevol moment un dels dos pot decidir fer un push a una nova branca (per exemple, per desenvolupar alguna nova característica experimental) i quan la feina en aquesta estigui acabada, tornar-la a integrar (amb un merge) dins la branca principal (que, per cert, normalment s'anomena trunk).