Cooperació amb Mercurial ======================== Alice i Bob decideixen col·laborar per resoldre el projecte `Trenca el mur `_. En aquest exercici simularem el desenvolupament en paral·lel d'Alice i Bob. L'estructura d'aquest desenvolupament és la mateixa que la de l'apartat 4 del document `Understanding Mercurial `_ #. Configureu mercurial seguint les instruccions de l'apartat :ref:`config-hg`. #. Creeu els directoris :file:`Alice` i :file:`Bob` per tal de simular l'espai de treball de cada un d'ells:: mkdir Alice Bob Alice comença el projecte trencamur ----------------------------------- #. Aneu al directori d'Alice:: cd Alice #. Inicialitzeu el dipòsit mercurial :file:`trencamur`:: hg init trencamur Aquesta ordre crea el subdirectori :file:`trencamur` que és el directori de treball del dipòsit mercurial. #. Aneu al directori de treball del dipòsit mercurial :file:`trencamur`:: cd trencamur #. Descarregueu els fitxers següents: :download:`Alice/fase-1/.hgignore`, :download:`Alice/fase-1/mur3.png`, :download:`Alice/fase-1/pilota.py`, :download:`Alice/fase-1/mur1.png`, :download:`Alice/fase-1/pilota1.png`, :download:`Alice/fase-1/trencamur.py`, :download:`Alice/fase-1/mur2.png` i :download:`Alice/fase-1/pilota2.png` .. warning:: Comproveu que els fitxers es desen amb el nom que diu l'enunciat. Especialment el fitxer :file:`.hgignore` que comença amb un punt. #. Proveu el programa:: python3 trencamur.py #. Observeu el contingut del fitxer :file:`.hgignore`. Conté patrons de fitxers del directori de treball que no han de formar part del dipòsit mercurial. #. Comproveu l'estat:: hg status Els fitxers del directori de treball que no pertanyen al dipòsit mercurial es marquen amb un `?`. #. Afegiu-los al dipòsit mercurial:: hg add #. Comproveu l'estat:: hg status Els fitxers que s'afegiran al dipòsit mercurial a la propera versió es marquen amb `A`. #. Enregistreu una nova versió al dipòsit mercurial:: hg commit -m "Acabada la fase 1" #. Comproveu les versions que teniu al dipòsit:: hg log --graph | more #. Etiqueteu aquesta versió per localitzar-la amb més facilitat més endavant:: hg tag fase-1 #. Comproveu les versions que teniu al dipòsit:: hg log --graph | more Alice comença a treballar en la fase 2. #. Descarregueu el fitxer :download:`Alice/fase-1/bloc.py`, afegiu-lo al dipòsit i feu una nova versió:: hg status hg add hg status hg commit -m "Afegida la classe Bloc" hg status .. warning:: Comproveu que els fitxers es desen amb el nom que diu l'enunciat. Bob decideix col·laborar amb Alice ---------------------------------- Bob i Alice s'han repartit la feina. Han vist que poden desenvolupar en paral·lel les fases 2 i 3. Bob treballarà en la fase 3 mentre Alice continuarà treballant en la fase 2. #. Aneu al directori de Bob:: cd ../../Bob #. Cloneu el dipòsit mercurial d'Alice:: hg clone ../Alice/trencamur El resultat és una còpia idèntica del dipòsit mercurial d'Alice en el directori :file:`trencamur`. #. Aneu al directori de treball:: cd trencamur #. Estudieu el dipòsit:: hg log --graph | more hg tags hg heads hg parents #. En Bob vol provar la versió etiquetada com a `fase-1`:: hg update -r fase-1 hg parents python3 trencamur.py #. Un cop fetes les proves torna a la darrera versió (*tip*):: hg update hg parents #. Descarregueu els fitxers següents: :download:`Bob/fase-3/pala.py`, :download:`Bob/fase-3/pilota.py` i :download:`Bob/fase-3/trencamur.py`. .. warning:: Comproveu que els fitxers es desen amb el nom que diu l'enunciat. :file:`pilota.py` i :file:`trencamur.py` han de substituir els fitxers que ja teniu. #. Comproveu l'estat del dipòsit i reviseu els canvis en alguns fitxers:: hg status hg diff pilota.py | more hg diff trencamur.py | more #. Proveu el programa:: python3 trencamur.py #. Afegiu al dipòsit el fitxer :file:`pala.py`:: hg add pala.py #. Enregistreu una nova versió al dipòsit mercurial:: hg commit -m "Acabada la fase 3" #. Etiqueteu aquesta versió per localitzar-la amb més facilitat més endavant:: hg tag fase-3 #. Comproveu les versions que teniu al dipòsit:: hg log --graph | more Alice treballa en paral·lel en la fase 2 ---------------------------------------- Mentre Bob està treballant en la fase 3, Alice continua la seva feina a la fase 2. #. Aneu al directori de treball d'Alice:: cd ../../Alice/trencamur #. Descarregueu els fitxers següents: :download:`Alice/fase-2/mur.py`, :download:`Alice/fase-2/pilota.py` i :download:`Alice/fase-2/trencamur.py`. .. warning:: Comproveu que els fitxers es desen amb el nom que diu l'enunciat. :file:`pilota.py` i :file:`trencamur.py` han de substituir els fitxers que ja teniu. #. Comproveu l'estat del dipòsit i reviseu els canvis en alguns fitxers:: hg status hg diff pilota.py | more hg diff trencamur.py | more #. Proveu el programa:: python3 trencamur.py #. Afegiu al dipòsit el fitxer :file:`mur.py`:: hg add mur.py #. Enregistreu una nova versió al dipòsit mercurial:: hg commit -m "Acabada la fase 2" #. Etiqueteu aquesta versió per localitzar-la amb més facilitat més endavant:: hg tag fase-2 #. Comproveu les versions que teniu al dipòsit:: hg log --graph | more Bob fusiona les fases 2 i 3 --------------------------- L'Alice avisa Bob que ja ha acabat la fase 2. Quan Bob acaba la fase 3 decideix fusionar la fase 2 desenvolupada per Alice amb la fase 3 desenvolupada per ell mateix. #. Aneu al directori de treball de Bob:: cd ../../Bob/trencamur #. Per saber quins canvis del dipòsit mercurial d'Alice s'incorporaran al dipòsit de Bob feu:: hg incoming ../../Alice/trencamur | more #. Incorporeu els canvis del dipòsit d'Alice al de Bob fent:: hg pull ../../Alice/trencamur #. Estudieu el dipòsit:: hg log --graph | more hg tags hg heads hg parents Observeu que hi ha dos caps a fusionar corresponents a les branques paral·leles de desenvolupament d'Alice i Bob. #. Fusioneu els dos caps:: hg merge Durant la fusió es poden produir conflictes si Alice i Bob han modificat les mateixes línies dels mateixos fitxers. #. Llisteu els conflictes fent:: hg resolve --list #. Com que tant Alice com Bob han modificat les mateixes línies dels fitxers :file:`mur.py`, :file:`pilota.py` i :file:`trencamur.py` s'han produït conflictes que cal resoldre. Reviseu aquests fitxers per veure com mercurial marca els conflictes. Resoleu els conflictes descarregant noves versions d'aquests fitxers: :download:`Bob/fases-2-i-3/mur.py`, :download:`Bob/fases-2-i-3/pilota.py` i :download:`Bob/fases-2-i-3/trencamur.py`. .. warning:: Comproveu que els fitxers es desen amb el nom que diu l'enunciat. :file:`mur.py`, :file:`pilota.py` i :file:`trencamur.py` han de substituir els fitxers que ja teniu. #. També s'ha produït un conflicte en el fitxer :file:`.hgtags` que cal resoldre editant el fitxer i incorporant les etiquetes tant d'Alice com de Bob. Només cal esborrar les línies que comencen per <, > i =. #. Marqueu els conflictes com resolts fent:: hg resolve --mark hg resolve --list #. Comproveu l'estat del dipòsit i reviseu els canvis en alguns fitxers:: hg status hg diff mur.py | more hg diff pilota.py | more hg diff trencamur.py | more #. Proveu el programa:: python3 trencamur.py #. Enregistreu una nova versió al dipòsit mercurial:: hg commit -m "Fusionades les fases 2 i 3" #. Etiqueteu aquesta versió per localitzar-la amb més facilitat més endavant:: hg tag fases-2-i-3 #. Comproveu les versions que teniu al dipòsit:: hg log --graph | more Observeu les branques paral·leles de desenvolupament d'Alice i Bob. Alice actualitza el seu dipòsit ------------------------------- Quan Bob avisa l'Alice que ha acabat la fusió, l'Alice actualitza el seu dipòsit per tenir la darrera versió del projecte. #. Aneu al directori de treball d'Alice:: cd ../../Alice/trencamur #. Incorporeu els canvis del dipòsit de Bob al d'Alice fent:: hg pull ../../Bob/trencamur #. Estudieu el dipòsit:: hg log --graph | more hg tags hg heads hg parents Observeu que només hi ha un cap perquè l'actualització no ha produït cap conflicte. #. Actualitzeu la còpia de treball a la versió més recent del dipòsit:: hg update #. Comproveu que esteu a la darrera versió:: hg log --graph | more hg parents #. Proveu el programa:: python3 trencamur.py