Salta el contingut
 

Pràctica 2: Introducció a Git

Autor: Joan Puigcerver Ibáñez

Correu electrònic: j.puigcerveribanez@edu.gva.es

Llicència: CC BY-NC-SA 4.0

(Reconeixement - NoComercial - CompartirIgual) 🅭

Objectius

L'objectiu d'aquesta pràctica és aplicar els coneixements de Git a un entorn hipotètic.

Entrega

Entregar en Aules l'enllaç al repositori creat dins de l'organització.

Hauria de ser alguna cosa semblant a:

https://github.com/fpmislata-dam1s-ed/CognomNom-ED.git

Requisits

Per poder realitzar la pràctica, cal:

Advertència

Si no ho eres, cal que tramites la tasca "Usuari de GitHub" a Aules

Pràctica: Git

Repositori

Important

En aquesta tasca cal utilitzar el repositori CognomNom-ED creat en el material Integració Git amb IntelliJ creat en l'organització del mòdul.

Organització fpmislata-dam1s-ed.

Organització fpmislata-daw1-ed.

Introducció

Tenim el següent codi, que mostra per pantalla una matriu amb les taules de multiplicar.

MultiplyTableFull.java
package ud2.practices;

import java.util.Scanner;
import java.util.Locale;

public class MultiplyTableFull {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in).useLocale(Locale.US);

        for (int i = 1; i <= 10; i++) {
            for (int j = 5; j <= 20; j++) {
                System.out.printf(" %3d", i*j);
            }            
            System.out.println();
        }
    }
}

La idea del codi és que mostre les taules de multiplicar del 1 fins al número N. Cada taula de multiplicar ha d'arribar fins al número 10.

Hem detectat els següents problemes:

  • No demana el número fins al que vol arribar a l'usuari.
  • Arriba sempre fins al número 20
  • Comença pel número 5, en compte del número 1.

Anem a fer un projecte de Git, on s'allotjarà aquest codi i on es resoldran els tres errors en tres branques diferents.

Passos

En aquesta pràctica podeu realitzar les tasques mitjançant la consola o mitjançant les opcions que ens proporciona IntelliJ.

Advertència

Tingueu en compte les següents consideracions:

  • Utilitzeu exactament el mateix nom de les branques.
  • Utilitzeu exactament el mateix missatge per als commits.
    • Deixeu el nom per defecte dels commits quan feu merge o rebase.
  • Feu un push sols quan s'indique en l'enunciat.

Has de realitzar els següents passos en el repositori de Git:

  1. Crea la branca p2/backup. Aquesta branca servirà per indicar-nos el punt de partida de la pràctica, per poder tornar enrere fàcilment.

  2. Crear el package ud2.practices.

    • Aquest package ha d'estar situat dins de la carpeta src/main/java.
  3. Situa't a la branca main i fes el següent canvi:

    • Afegeix el fitxer MultiplyTableFull.java al package ud2.practices.
    • Crea un commit amb el missatge: Added MultiplyTableFull
    MultiplyTableFull.java
    package ud2.practices;
    
    import java.util.Scanner;
    import java.util.Locale;
    
    public class MultiplyTableFull {
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in).useLocale(Locale.US);
    
            for (int i = 1; i <= 10; i++) {
                for (int j = 5; j <= 20; j++) {
                    System.out.printf(" %3d", i*j);
                }            
                System.out.println();
            }
        }
    }
    
  4. Publica la branca main al repositori remot.

  5. Crea la branca p2/ask_n_user.

  6. Crea la branca p2/fix_repetitions.

  7. Crea la branca p2/fix_first_operator.

  8. Situa't a la branca p2/ask_n_user i fes el següent canvi:

    • Modifica el fitxer MultiplyTableFull.java amb els següents canvis:

      Info

      Un diff indica els canvis realitzats en un fitxer respecte a la versió anterior.

      diff --git a/MultiplyTableFull.java b/MultiplyTableFull.java
      index 52bcc2ab..67587da0 100644
      --- a/MultiplyTableFull.java
      +++ b/MultiplyTableFull.java
      @@ -4,6 +4,7 @@ import java.util.Locale;
       public class MultiplyTableFull {
           public static void main(String[] args) {
               Scanner in = new Scanner(System.in).useLocale(Locale.US);
      +        int n = in.nextInt();
      
               for (int i = 1; i <= 10; i++) {
                   for (int j = 5; j <= 20; j++) {
      
    • Crea un commit amb el missatge: Added functionality: Ask N to the user

  9. Publica la branca p2/ask_n_user al repositori remot.

  10. Situa't a la branca p2/fix_repetitions i fes el següent canvi:

    • Modifica el fitxer MultiplyTableFull.java amb els següents canvis:

      diff --git a/MultiplyTableFull.java b/MultiplyTableFull.java
      index 52bcc2ab..28ad728d 100644
      --- a/MultiplyTableFull.java
      +++ b/MultiplyTableFull.java
      @@ -6,7 +6,7 @@ public class MultiplyTableFull {
               Scanner in = new Scanner(System.in).useLocale(Locale.US);
      
               for (int i = 1; i <= 10; i++) {
      -            for (int j = 5; j <= 20; j++) {
      +            for (int j = 5; j <= n; j++) {
                       System.out.printf(" %3d", i*j);
                   }
                   System.out.println();
      
    • Crea un commit amb el missatge: Fixed repetitions

  11. Publica la branca p2/fix_repetitions al repositori remot.

  12. Situa't a la branca p2/fix_first_operator i fes el següent canvi:

    • Modifica el fitxer MultiplyTableFull.java amb els següents canvis:

      diff --git a/MultiplyTableFull.java b/MultiplyTableFull.java
      index 52bcc2ab..78d7dce4 100644
      --- a/MultiplyTableFull.java
      +++ b/MultiplyTableFull.java
      @@ -6,7 +6,7 @@ public class MultiplyTableFull {
               Scanner in = new Scanner(System.in).useLocale(Locale.US);
      
               for (int i = 1; i <= 10; i++) {
      -            for (int j = 5; j <= 20; j++) {
      +            for (int j = 1; j <= 20; j++) {
                       System.out.printf(" %3d", i*j);
                   }
                   System.out.println();
      
    • Crea un commit amb el missatge: Fixed first operator

  13. Publica la branca p2/fix_first_operator al repositori remot.

  14. Fusiona (merge) els canvis de la branca p2/ask_n_user a la branca main. Hauria de ser un Fast-Forward Merge

    Warning

    Compte amb els noms de les branques. p2/ask_n_user no és el mateix que origin/p2/ask_n_user.

    Utilitzeu les branques locals (no tenen origin).

  15. Fusiona (merge) els canvis de la branca p2/fix_repetitions a la branca main. Hauria de ser una fusió de branques divergents. Podeu deixar el missatge per defecte.

  16. Canviar la base (rebase) de la branca p2/fix_first_operator a l'estat actual de la branca main. Haurien de sorgir conflictes. Resol-los. Recorda que per continuar amb el rebase una vegada resolts els conflictes has de executar git rebase --contiune. Deixa el missatge del commit per defecte.

    Danger

    No publiques (push) els canvis de la branca p2/fix_first_operator.

  17. Fusiona (merge) els canvis de la branca p2/fix_first_operator a la branca main. Com ja has resolt els conflictes i has fet el canvi de base, la fusió hauria de ser Fast-Forward.

  18. Publica (push) els canvis realitzats a la branca main.

Figura 1. Esquema dels passos realitzats en la pràctica.

Resultat final

El resultat final del fitxer MutliplyTableFull.java hauria de ser:

MultiplyTableFull.java
package ud2.practices;

import java.util.Scanner;
import java.util.Locale;

public class MultiplyTableFull {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in).useLocale(Locale.US);
        int n = in.nextInt();

        for (int i = 1; i <= 10; i++) {
            for (int j = 1; j <= n; j++) {
                System.out.printf(" %3d", i*j);
            }            
            System.out.println();
        }
    }
}

L'estat del repositori local hauria de ser:

Informació

L'ordre git lga és un àlies configurat prèviament en el fitxer ~/.gitconfig:

Vegeu: Introducció a Git: Històric de canvis

joapuiib@FP:~/IdeaProjects/PuigcerverJoan-ED $ git lga
* 5494185 - (63 seconds ago) Fixed first operator - Joan Puigcerver (HEAD -> main, origin/main, p2/fix_first_operator)
* f39f45f - (89 seconds ago) Merge branch 'p2/fix_repetitions' - Joan Puigcerver
|\
| * b709898 - (2 minutes ago) Fixed repetitions - Joan Puigcerver (p2/fix_repetitions, origin/p2/fix_repetitions)
* | ea0e2d4 - (1 minutes ago) Added functionality: Ask N to the user - Joan Puigcerver (p2/ask_n_user, origin/p2/ask_n_user)
|/
| * 9c376e8 - (63 seconds ago) Fixed first operator - Joan Puigcerver (origin/p2/fix_first_operator)
|/
* c489359 - (3 minutes ago) Added MultiplyTableFull - Joan Puigcerver
...

L'estat del repositori remot hauria de ser igual que l'estat d'aquest repositori.

  • Podeu consultar l'estructura de commits a l'apartat Insights > Network del vostre repositori.

Tornar a començar

Si durant la pràctica s'enganyeu i voleu tornar enrere, podeu eliminar els commits realitzats.

Aquesta part s'estudiarà més a fons en la 2a avaluació, però vos deixe unes indicacions.

Per eliminar un commit, heu de llevar-li totes les referències. Si un commit no està associat a cap branca, s'eliminarà del repositori.

Podeu realitzar les següents accions.

  • Eliminar les branques locals: Podeu eliminar les branques locals creades.

    git branch -D <branch_name>
    

    Example

    Eliminem les 3 branques locals.

    $ git branch -D p2/ask_n_user
    $ git branch -D p2/fixed_repetitions
    $ git branch -D p2/fix_first_operator
    

    Danger

    No elimineu la branca main o master.

  • Eliminar les branques remotes: Podeu eliminar les branques remotes.

    git push -d origin <branch_name>
    

    Example

    Eliminem les 3 branques remotes.

    $ git push -d origin p2/ask_n_user
    $ git push -d origin p2/fixed_repetitions
    $ git push -d origin p2/fix_first_operator
    
  • Moure la referència de la branca principal a l'inici de l'exercici: Moure enrere la referència de la branca main a la branca p2/backup.

    git reset --hard <ref>
    

    Example

    $ git reset --hard p2/backup
    
  • Moure una branca remota: Després d'haver mogut la branca local, podeu moure la branca remota a la mateixa posició amb:

    git push -f
    

    Example

    Actualitzem la branca remota origin/main a la mateixa posició que la branca local main.

    $ git checkout main
    $ git push -f