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 Fitxer de configuració.
Creeu els directoris
AliceiBobper 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
trencamur:hg init trencamur
Aquesta ordre crea el subdirectori
trencamurque és el directori de treball del dipòsit mercurial.Aneu al directori de treball del dipòsit mercurial
trencamur:cd trencamur
Descarregueu els fitxers següents:
Alice/fase-1/.hgignore,Alice/fase-1/mur3.png,Alice/fase-1/pilota.py,Alice/fase-1/mur1.png,Alice/fase-1/pilota1.png,Alice/fase-1/trencamur.py,Alice/fase-1/mur2.pngiAlice/fase-1/pilota2.pngWarning
Comproveu que els fitxers es desen amb el nom que diu l’enunciat. Especialment el fitxer
.hgignoreque comença amb un punt.Proveu el programa:
python3 trencamur.py
Observeu el contingut del fitxer
.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
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
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:
Bob/fase-3/pala.py,Bob/fase-3/pilota.pyiBob/fase-3/trencamur.py.Warning
Comproveu que els fitxers es desen amb el nom que diu l’enunciat.
pilota.pyitrencamur.pyhan 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
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:
Alice/fase-2/mur.py,Alice/fase-2/pilota.pyiAlice/fase-2/trencamur.py.Warning
Comproveu que els fitxers es desen amb el nom que diu l’enunciat.
pilota.pyitrencamur.pyhan 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
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
mur.py,pilota.pyitrencamur.pys’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:Bob/fases-2-i-3/mur.py,Bob/fases-2-i-3/pilota.pyiBob/fases-2-i-3/trencamur.py.Warning
Comproveu que els fitxers es desen amb el nom que diu l’enunciat.
mur.py,pilota.pyitrencamur.pyhan de substituir els fitxers que ja teniu.També s’ha produït un conflicte en el fitxer
.hgtagsque 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