Salta el contingut
 

Exercici: Git en IntelliJ

Joan Puigcerver Ibáñez

Llicència: CC BY-NC-SA 4.0

(Reconeixement - NoComercial - CompartirIgual) 🅭

Objectius

L'objectiu d'aquest exercici és utilitzar la integració de Git dins de l'entorn de desenvolupament IntelliJ IDEA.

L'exercici té dos apartats amb la mateixa dinàmica: es parteix d'un programa Java i cada funcionalitat nova s'implementa en una branca diferent. Després, es fusionen totes les branques en la branca principal de l'apartat.

Requisits

Per poder fer aquest exercici, cal complir els requisits següents:

Si no formes part de l'organització, completa la tasca «Usuari de GitHub» en Aules.

Repositori

En aquest exercici cal utilitzar el repositori CognomNom-ED de l'organització del mòdul.

Organització fpmislata-dam1s-ed.

Organització fpmislata-daw1-ed.

Passos

Cada apartat treballa en una branca principal pròpia, creada a partir de main. D'aquesta manera, la branca main no es modifica i cada apartat es pot repetir sense afectar l'altre.

Pots fer les tasques des de la terminal o amb les opcions que proporciona IntelliJ IDEA.

Tingues en compte les consideracions següents:

  • Utilitza exactament el mateix nom per a les branques.
  • Utilitza exactament el mateix missatge per als commits.
    • Deixa el missatge per defecte dels commits quan faces merge o rebase.
  • Fes un push només quan ho indique l'enunciat.

Fes els passos següents en cada apartat:

  1. Situa't en la branca main i crea la branca principal de l'apartat.
  2. En la branca principal, afig el fitxer de l'apartat al paquet ud2.exercises de la carpeta src/main/java i crea un commit.
  3. Publica la branca principal en el repositori remot.
  4. A partir de la branca principal, crea les branques de l'apartat.
  5. En cada branca, fes el canvi indicat, crea un commit i publica la branca en el repositori remot.
  6. Fusiona totes les branques en la branca principal de manera que la història dels commits siga lineal.

    Fixa't en el resultat final a l'hora de resoldre els conflictes.

    No tornes a publicar cada branca en el repositori remot.

  7. Publica la branca principal en el repositori remot.

  8. Elimina les branques locals i remotes de l'apartat, excepte la branca principal.
  9. Comprova que el resultat coincideix amb la secció Resultat final de l'apartat. Quan siga correcte, fusiona la branca principal de l'apartat en la branca main i publica la branca main en el repositori remot.

    Una vegada fusionada en main, ja no podràs tornar a començar l'apartat només eliminant les branques.

Apartat 1: BasicOperations

El codi següent demana dos nombres enters, a i b, però encara no fa res amb ells. Cal modificar-lo perquè realitze les operacions següents: suma, resta, multiplicació i divisió.

  • Branca principal: operacions/main.
  • Fitxer: BasicOperations.java, amb el missatge Afegit BasicOperations.
BasicOperations.java
package ud2.exercises;

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

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

Branques

Crea una branca per a cada operació i fes-hi els canvis següents:

Missatge del commit: Operació de suma

diff --git a/src/main/java/ud2/exercises/BasicOperations.java b/src/main/java/ud2/exercises/BasicOperations.java
index 7fb0359..b64063a 100644
--- a/src/main/java/ud2/exercises/BasicOperations.java
+++ b/src/main/java/ud2/exercises/BasicOperations.java
@@ -8,5 +8,9 @@ public class BasicOperations {
         Scanner in = new Scanner(System.in).useLocale(Locale.US);
         int a = in.nextInt();
         int b = in.nextInt();
+
+        int suma = a + b;
+
+        System.out.println("Suma: " + suma);
     }
 }

Missatge del commit: Operació de resta

diff --git a/src/main/java/ud2/exercises/BasicOperations.java b/src/main/java/ud2/exercises/BasicOperations.java
index 7fb0359..ab2e3cb 100644
--- a/src/main/java/ud2/exercises/BasicOperations.java
+++ b/src/main/java/ud2/exercises/BasicOperations.java
@@ -8,5 +8,9 @@ public class BasicOperations {
         Scanner in = new Scanner(System.in).useLocale(Locale.US);
         int a = in.nextInt();
         int b = in.nextInt();
+
+        int resta = a - b;
+
+        System.out.println("Resta: " + resta);
     }
 }

Missatge del commit: Operació de multiplicació

diff --git a/src/main/java/ud2/exercises/BasicOperations.java b/src/main/java/ud2/exercises/BasicOperations.java
index 7fb0359..236bc8b 100644
--- a/src/main/java/ud2/exercises/BasicOperations.java
+++ b/src/main/java/ud2/exercises/BasicOperations.java
@@ -8,5 +8,9 @@ public class BasicOperations {
         Scanner in = new Scanner(System.in).useLocale(Locale.US);
         int a = in.nextInt();
         int b = in.nextInt();
+
+        int multiplicacio = a * b;
+
+        System.out.println("Multiplicació: " + multiplicacio);
     }
 }

Missatge del commit: Operació de divisió

diff --git a/src/main/java/ud2/exercises/BasicOperations.java b/src/main/java/ud2/exercises/BasicOperations.java
index 7fb0359..bbecd15 100644
--- a/src/main/java/ud2/exercises/BasicOperations.java
+++ b/src/main/java/ud2/exercises/BasicOperations.java
@@ -8,5 +8,9 @@ public class BasicOperations {
         Scanner in = new Scanner(System.in).useLocale(Locale.US);
         int a = in.nextInt();
         int b = in.nextInt();
+
+        int divisio = a / b;
+
+        System.out.println("Divisió: " + divisio);
     }
 }

Abans de fusionar les branques, la història del repositori hauria de quedar així:

jpuigcerver@fp:~/IdeaProjects/PuigcerverJoan-ED (operacions/divisio) $ git lga
* be47910 - (38 minutes ago) Operació de divisió - Joan Puigcerver (HEAD -> operacions/divisio, origin/operacions/divisio)
| * 086d121 - (42 minutes ago) Operació de multiplicació - Joan Puigcerver (origin/operacions/multiplicacio, operacions/multiplicacio)
|/  
| * 7b1b22f - (46 minutes ago) Operació de resta - Joan Puigcerver (origin/operacions/resta, operacions/resta)
|/  
| * d0d9093 - (50 minutes ago) Operació de suma - Joan Puigcerver (origin/operacions/suma, operacions/suma)
|/  
* de75ad6 - (54 minutes ago) Afegit BasicOperations - Joan Puigcerver (origin/operacions/main, operacions/main)
* 286b785 - (58 minutes ago) Commit inicial - Joan Puigcerver (origin/main, main)

...

Resultat final

El resultat final del fitxer BasicOperations.java hauria de ser el següent:

BasicOperations.java
package ud2.exercises;

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

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

        int suma = a + b;
        int resta = a - b;
        int multiplicacio = a * b;
        int divisio = a / b;

        System.out.println("Suma: " + suma);
        System.out.println("Resta: " + resta);
        System.out.println("Multiplicació: " + multiplicacio);
        System.out.println("Divisió: " + divisio);
    }
}

La història del repositori hauria de quedar així:

jpuigcerver@fp:~/IdeaProjects/PuigcerverJoan-ED (operacions/main) $ git lga
* baa7c59 - (38 minutes ago) Operació de divisió - Joan Puigcerver (HEAD -> operacions/main, origin/operacions/main)
* 50159e6 - (42 minutes ago) Operació de multiplicació - Joan Puigcerver
* 9da045a - (46 minutes ago) Operació de resta - Joan Puigcerver
* d0d9093 - (50 minutes ago) Operació de suma - Joan Puigcerver
* de75ad6 - (54 minutes ago) Afegit BasicOperations - Joan Puigcerver
* 286b785 - (58 minutes ago) Commit inicial - Joan Puigcerver (origin/main, main)

...

Apartat 2: Statistics

El codi següent llig cinc nombres enters i els guarda en l'array nombres, però encara no fa res amb ells. Cal modificar-lo perquè calcule i mostre les dades següents: suma, mitjana, màxim i mínim.

  • Branca principal: stats/main.
  • Fitxer: Statistics.java, amb el missatge Afegit Statistics.
Statistics.java
package ud2.exercises;

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

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

        for (int i = 0; i < nombres.length; i++) {
            nombres[i] = in.nextInt();
        }
    }
}

Branques

Crea una branca per a cada càlcul i fes-hi els canvis següents:

Missatge del commit: Càlcul de la suma

diff --git a/src/main/java/ud2/exercises/Statistics.java b/src/main/java/ud2/exercises/Statistics.java
index 7f2164c..0b917a1 100644
--- a/src/main/java/ud2/exercises/Statistics.java
+++ b/src/main/java/ud2/exercises/Statistics.java
@@ -11,5 +11,11 @@ public class Statistics {
         for (int i = 0; i < nombres.length; i++) {
             nombres[i] = in.nextInt();
         }
+
+        int suma = 0;
+        for (int i = 0; i < nombres.length; i++) {
+            suma += nombres[i];
+        }
+        System.out.println("Suma: " + suma);
     }
 }

Missatge del commit: Càlcul de la mitjana

diff --git a/src/main/java/ud2/exercises/Statistics.java b/src/main/java/ud2/exercises/Statistics.java
index 7f2164c..b267ef4 100644
--- a/src/main/java/ud2/exercises/Statistics.java
+++ b/src/main/java/ud2/exercises/Statistics.java
@@ -11,5 +11,12 @@ public class Statistics {
         for (int i = 0; i < nombres.length; i++) {
             nombres[i] = in.nextInt();
         }
+
+        int suma = 0;
+        for (int i = 0; i < nombres.length; i++) {
+            suma += nombres[i];
+        }
+        double mitjana = (double) suma / nombres.length;
+        System.out.println("Mitjana: " + mitjana);
     }
 }

Missatge del commit: Càlcul del màxim

diff --git a/src/main/java/ud2/exercises/Statistics.java b/src/main/java/ud2/exercises/Statistics.java
index 7f2164c..5d9ab18 100644
--- a/src/main/java/ud2/exercises/Statistics.java
+++ b/src/main/java/ud2/exercises/Statistics.java
@@ -11,5 +11,13 @@ public class Statistics {
         for (int i = 0; i < nombres.length; i++) {
             nombres[i] = in.nextInt();
         }
+
+        int maxim = nombres[0];
+        for (int i = 1; i < nombres.length; i++) {
+            if (nombres[i] > maxim) {
+                maxim = nombres[i];
+            }
+        }
+        System.out.println("Màxim: " + maxim);
     }
 }

Missatge del commit: Càlcul del mínim

diff --git a/src/main/java/ud2/exercises/Statistics.java b/src/main/java/ud2/exercises/Statistics.java
index 7f2164c..e836d6d 100644
--- a/src/main/java/ud2/exercises/Statistics.java
+++ b/src/main/java/ud2/exercises/Statistics.java
@@ -11,5 +11,13 @@ public class Statistics {
         for (int i = 0; i < nombres.length; i++) {
             nombres[i] = in.nextInt();
         }
+
+        int minim = nombres[0];
+        for (int i = 1; i < nombres.length; i++) {
+            if (nombres[i] < minim) {
+                minim = nombres[i];
+            }
+        }
+        System.out.println("Mínim: " + minim);
     }
 }

Abans de fusionar les branques, la història del repositori hauria de quedar així:

jpuigcerver@fp:~/IdeaProjects/PuigcerverJoan-ED (stats/minim) $ git lga
* fd7ce3b - (38 minutes ago) Càlcul del mínim - Joan Puigcerver (HEAD -> stats/minim, origin/stats/minim)
| * 18ba0b5 - (42 minutes ago) Càlcul del màxim - Joan Puigcerver (origin/stats/maxim, stats/maxim)
|/  
| * 39c4583 - (46 minutes ago) Càlcul de la mitjana - Joan Puigcerver (origin/stats/mitjana, stats/mitjana)
|/  
| * 52636e6 - (50 minutes ago) Càlcul de la suma - Joan Puigcerver (origin/stats/suma, stats/suma)
|/  
* a243c57 - (54 minutes ago) Afegit Statistics - Joan Puigcerver (origin/stats/main, stats/main)
* 286b785 - (58 minutes ago) Commit inicial - Joan Puigcerver (origin/main, main)

...

En resoldre els conflictes, fes tots els càlculs dins d'un únic bucle for.

Resultat final

El resultat final del fitxer Statistics.java hauria de ser el següent:

Statistics.java
package ud2.exercises;

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

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

        for (int i = 0; i < nombres.length; i++) {
            nombres[i] = in.nextInt();
        }

        int suma = 0;
        int maxim = nombres[0];
        int minim = nombres[0];
        for (int i = 0; i < nombres.length; i++) {
            suma += nombres[i];
            if (nombres[i] > maxim) {
                maxim = nombres[i];
            }
            if (nombres[i] < minim) {
                minim = nombres[i];
            }
        }
        double mitjana = (double) suma / nombres.length;

        System.out.println("Suma: " + suma);
        System.out.println("Mitjana: " + mitjana);
        System.out.println("Màxim: " + maxim);
        System.out.println("Mínim: " + minim);
    }
}

La història del repositori hauria de quedar així:

jpuigcerver@fp:~/IdeaProjects/PuigcerverJoan-ED (stats/main) $ git lga
* f5a8841 - (38 minutes ago) Càlcul del mínim - Joan Puigcerver (HEAD -> stats/main, origin/stats/main)
* d0574f7 - (42 minutes ago) Càlcul del màxim - Joan Puigcerver
* 4bb1919 - (46 minutes ago) Càlcul de la mitjana - Joan Puigcerver
* 52636e6 - (50 minutes ago) Càlcul de la suma - Joan Puigcerver
* a243c57 - (54 minutes ago) Afegit Statistics - Joan Puigcerver
* 286b785 - (58 minutes ago) Commit inicial - Joan Puigcerver (origin/main, main)

...

Tornar a començar

Si t'equivoques en algun apartat abans de fusionar-lo en main i vols tornar a començar, elimina totes les branques de l'apartat, també la branca principal. Com que la branca main no s'ha modificat, els commits de l'apartat deixen d'estar associats a cap branca i s'eliminen del repositori.

  1. Situa't en la branca main:

    git checkout main
    
  2. Elimina les branques locals de l'apartat:

    git branch -D <branca>
    

    No elimines la branca main.

  3. Elimina les branques remotes de l'apartat:

    git push -d origin <branca>
    

Si alguna branca ja no existeix, Git mostra un error que pots ignorar.

Exemple: Eliminar totes les branques d'un apartat

S'eliminen les branques locals i remotes de cada apartat:

$ git checkout main
$ git branch -D operacions/main
$ git branch -D operacions/suma
$ git branch -D operacions/resta
$ git branch -D operacions/multiplicacio
$ git branch -D operacions/divisio
$ git push -d origin operacions/main
$ git push -d origin operacions/suma
$ git push -d origin operacions/resta
$ git push -d origin operacions/multiplicacio
$ git push -d origin operacions/divisio
$ git checkout main
$ git branch -D stats/main
$ git branch -D stats/suma
$ git branch -D stats/mitjana
$ git branch -D stats/maxim
$ git branch -D stats/minim
$ git push -d origin stats/main
$ git push -d origin stats/suma
$ git push -d origin stats/mitjana
$ git push -d origin stats/maxim
$ git push -d origin stats/minim
📌 Aquest document pot quedar desactualitzat després d’imprimir-lo. Pots consultar la versió més recent a la pàgina web.
🌿 Abans d’imprimir aquest document, considera si és realment necessari. Redueix el consum de paper i ajuda a protegir el nostre entorn.