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

  1. Configureu mercurial seguint les instruccions de l’apartat Fitxer de configuració.

  2. Creeu els directoris Alice i Bob per tal de simular l’espai de treball de cada un d’ells:

    mkdir Alice Bob
    

Alice comença el projecte trencamur

  1. Aneu al directori d’Alice:

    cd Alice
    
  2. Inicialitzeu el dipòsit mercurial trencamur:

    hg init trencamur
    

    Aquesta ordre crea el subdirectori trencamur que és el directori de treball del dipòsit mercurial.

  3. Aneu al directori de treball del dipòsit mercurial trencamur:

    cd trencamur
    
  4. 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.png i Alice/fase-1/pilota2.png

    Warning

    Comproveu que els fitxers es desen amb el nom que diu l’enunciat. Especialment el fitxer .hgignore que comença amb un punt.

  5. Proveu el programa:

    python3 trencamur.py
    
  6. Observeu el contingut del fitxer .hgignore. Conté patrons de fitxers del directori de treball que no han de formar part del dipòsit mercurial.

  7. Comproveu l’estat:

    hg status
    

    Els fitxers del directori de treball que no pertanyen al dipòsit mercurial es marquen amb un ?.

  8. Afegiu-los al dipòsit mercurial:

    hg add
    
  9. Comproveu l’estat:

    hg status
    

    Els fitxers que s’afegiran al dipòsit mercurial a la propera versió es marquen amb A.

  10. Enregistreu una nova versió al dipòsit mercurial:

    hg commit -m "Acabada la fase 1"
    
  11. Comproveu les versions que teniu al dipòsit:

    hg log --graph | more
    
  12. Etiqueteu aquesta versió per localitzar-la amb més facilitat més endavant:

    hg tag fase-1
    
  13. Comproveu les versions que teniu al dipòsit:

    hg log --graph | more
    

Alice comença a treballar en la fase 2.

  1. 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.

  1. Aneu al directori de Bob:

    cd ../../Bob
    
  2. 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.

  3. Aneu al directori de treball:

    cd trencamur
    
  4. Estudieu el dipòsit:

    hg log --graph | more
    hg tags
    hg heads
    hg parents
    
  5. En Bob vol provar la versió etiquetada com a fase-1:

    hg update -r fase-1
    hg parents
    python3 trencamur.py
    
  6. Un cop fetes les proves torna a la darrera versió (tip):

    hg update
    hg parents
    
  7. Descarregueu els fitxers següents: Bob/fase-3/pala.py, Bob/fase-3/pilota.py i Bob/fase-3/trencamur.py.

    Warning

    Comproveu que els fitxers es desen amb el nom que diu l’enunciat. pilota.py i trencamur.py han de substituir els fitxers que ja teniu.

  8. 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
    
  9. Proveu el programa:

    python3 trencamur.py
    
  10. Afegiu al dipòsit el fitxer pala.py:

    hg add pala.py
    
  11. Enregistreu una nova versió al dipòsit mercurial:

    hg commit -m "Acabada la fase 3"
    
  12. Etiqueteu aquesta versió per localitzar-la amb més facilitat més endavant:

    hg tag fase-3
    
  13. 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.

  1. Aneu al directori de treball d’Alice:

    cd ../../Alice/trencamur
    
  2. Descarregueu els fitxers següents: Alice/fase-2/mur.py, Alice/fase-2/pilota.py i Alice/fase-2/trencamur.py.

    Warning

    Comproveu que els fitxers es desen amb el nom que diu l’enunciat. pilota.py i trencamur.py han de substituir els fitxers que ja teniu.

  3. 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
    
  4. Proveu el programa:

    python3 trencamur.py
    
  5. Afegiu al dipòsit el fitxer mur.py:

    hg add mur.py
    
  6. Enregistreu una nova versió al dipòsit mercurial:

    hg commit -m "Acabada la fase 2"
    
  7. Etiqueteu aquesta versió per localitzar-la amb més facilitat més endavant:

    hg tag fase-2
    
  8. 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.

  1. Aneu al directori de treball de Bob:

    cd ../../Bob/trencamur
    
  2. Per saber quins canvis del dipòsit mercurial d’Alice s’incorporaran al dipòsit de Bob feu:

    hg incoming ../../Alice/trencamur | more
    
  3. Incorporeu els canvis del dipòsit d’Alice al de Bob fent:

    hg pull ../../Alice/trencamur
    
  4. 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.

  5. 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.

  6. Llisteu els conflictes fent:

    hg resolve --list
    
  7. Com que tant Alice com Bob han modificat les mateixes línies dels fitxers mur.py, pilota.py i 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: Bob/fases-2-i-3/mur.py, Bob/fases-2-i-3/pilota.py i Bob/fases-2-i-3/trencamur.py.

    Warning

    Comproveu que els fitxers es desen amb el nom que diu l’enunciat. mur.py, pilota.py i trencamur.py han de substituir els fitxers que ja teniu.

  8. També s’ha produït un conflicte en el fitxer .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 =.

  9. Marqueu els conflictes com resolts fent:

    hg resolve --mark
    hg resolve --list
    
  10. 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
    
  11. Proveu el programa:

    python3 trencamur.py
    
  12. Enregistreu una nova versió al dipòsit mercurial:

    hg commit -m "Fusionades les fases 2 i 3"
    
  13. Etiqueteu aquesta versió per localitzar-la amb més facilitat més endavant:

    hg tag fases-2-i-3
    
  14. 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.

  1. Aneu al directori de treball d’Alice:

    cd ../../Alice/trencamur
    
  2. Incorporeu els canvis del dipòsit de Bob al d’Alice fent:

    hg pull ../../Bob/trencamur
    
  3. 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.

  4. Actualitzeu la còpia de treball a la versió més recent del dipòsit:

    hg update
    
  5. Comproveu que esteu a la darrera versió:

    hg log --graph | more
    hg parents
    
  6. Proveu el programa:

    python3 trencamur.py