Πρακτική Εργασία N°1: Διαφορά μεταξύ git merge και git rebase

3 λεπτά

Παιδαγωγικοί στόχοι:

  • Κατανόηση των θεμελιωδών διαφορών μεταξύ git merge και git rebase.
  • Παρατήρηση των αποτελεσμάτων των δύο εντολών στο ιστορικό Git.
  • Τεκμηρίωση των χειρισμών με στιγμιότυπα οθόνης και σαφείς εξηγήσεις.

Στόχοι του TP

Στο τέλος αυτού του TP, θα είστε σε θέση να:

  1. Χρησιμοποιείτε τα git merge και git rebase για να ενσωματώνετε τροποποιήσεις κλάδων.
  2. Αναλύετε τις διαφορές μεταξύ των δύο εντολών στη δομή του ιστορικού.
  3. Εντοπίζετε τις ιδανικές περιπτώσεις χρήσης για merge και rebase.

Οδηγίες και λεπτομερή βήματα

Προετοιμασία

  1. Δημιουργήστε έναν φάκελο εργασίας για αυτό το TP:

    • Στο τερματικό σας, πληκτρολογήστε τις ακόλουθες εντολές για να προετοιμάσετε το περιβάλλον σας:
      bash
      mkdir git-evaluation-1
      cd git-evaluation-1
      git init
  2. Στιγμιότυπο οθόνης: Τραβήξτε ένα στιγμιότυπο που δείχνει την αρχικοποίηση του αποθετηρίου (git init).


Βήμα 1: Αρχικοποίηση του αποθετηρίου και δημιουργία του κύριου κλάδου

  1. Δημιουργία του αρχικού αρχείου
    Δημιουργήστε ένα αρχείο με όνομα fichier1.txt (αρχικό αρχείο) και προσθέστε ένα βασικό commit στον κύριο κλάδο main:

    bash
    echo "Contenu initial dans fichier1" > fichier1.txt
    git add fichier1.txt
    git commit -m "Initialisation du projet avec fichier1.txt"
  2. Μετονομάστε τον κύριο κλάδο σε main (αν χρειάζεται):

    bash
    git branch -M main
  3. Στιγμιότυπο οθόνης: Δείξτε την προσθήκη του αρχείου και το πρώτο commit.


Βήμα 2: Δημιουργία των κλάδων για rebase και merge

  1. Δημιουργήστε τους κλάδους branche1 και branche2 από το main:

    • Δημιουργήστε το branche1:
      bash
      git checkout -b branche1
    • Επιστρέψτε στο main και δημιουργήστε το branche2:
      bash
      git checkout main
      git checkout -b branche2
  2. Δημιουργία των κλάδων εργασίας:

    • Δημιουργήστε το branche-rebase από το branche1:
      bash
      git checkout branche1
      git checkout -b branche-rebase
    • Δημιουργήστε το branche-merge από το branche2:
      bash
      git checkout branche2
      git checkout -b branche-merge
  3. Στιγμιότυπο οθόνης: Δείξτε τη δημιουργία των κλάδων με την εντολή git branch.


Βήμα 3: Προσθήκη πανομοιότυπων commits στα branche-rebase και branche-merge

Σημείωση: Θα χρησιμοποιήσουμε διαφορετικά αρχεία (fichier-2-rebase.txt και fichier-2-merge.txt) και θα κάνουμε τις ίδιες τροποποιήσεις ώστε να συγκρίνουμε τα αποτελέσματα του merge και του rebase.

  1. Εργασία στο branche-rebase:

    • Πρώτο commit:

      bash
      git checkout branche-rebase
      echo "Modification 1 dans branche-rebase" > fichier-2-rebase.txt
      git add fichier-2-rebase.txt
      git commit -m "Ajout de fichier-2-rebase.txt avec modification 1"
    • Δεύτερο commit:

      bash
      echo "Modification 2 dans branche-rebase" >> fichier-2-rebase.txt
      git add fichier-2-rebase.txt
      git commit -m "Ajout de modification 2 dans fichier-2-rebase.txt"
    • Τρίτο commit:

      bash
      echo "Modification 3 dans branche-rebase" >> fichier-2-rebase.txt
      git add fichier-2-rebase.txt
      git commit -m "Ajout de modification 3 dans fichier-2-rebase.txt"
  2. Εργασία στο branche-merge:

    • Πρώτο commit:

      bash
      git checkout branche-merge
      echo "Modification 1 dans branche-merge" > fichier-2-merge.txt
      git add fichier-2-merge.txt
      git commit -m "Ajout de fichier-2-merge.txt avec modification 1"
    • Δεύτερο commit:

      bash
      echo "Modification 2 dans branche-merge" >> fichier-2-merge.txt
      git add fichier-2-merge.txt
      git commit -m "Ajout de modification 2 dans fichier-2-merge.txt"
    • Τρίτο commit:

      bash
      echo "Modification 3 dans branche-merge" >> fichier-2-merge.txt
      git add fichier-2-merge.txt
      git commit -m "Ajout de modification 3 dans fichier-2-merge.txt"
  3. Στιγμιότυπο οθόνης: Δείξτε τα commits που έγιναν σε κάθε κλάδο με git log.


Βήμα 4: Ενσωμάτωση των κλάδων με merge και rebase

  1. Rebase του branche-rebase στο branche1:

    • Μεταβείτε στο branche1:

      bash
      git checkout branche1
    • Κάντε rebase το branche-rebase στο branche1:

      bash
      git rebase branche-rebase
    • Στιγμιότυπο οθόνης: Χρησιμοποιήστε git log --oneline --graph --all για να δείξετε το γραμμικό ιστορικό που δημιουργήθηκε από το rebase.

  2. Merge του branche-merge στο branche2:

    • Μεταβείτε στο branche2:

      bash
      git checkout branche2
    • Συγχωνεύστε το branche-merge στο branche2:

      bash
      git merge branche-merge -m "Fusion de branche-merge dans branche2"
    • Στιγμιότυπο οθόνης: Χρησιμοποιήστε git log --oneline --graph --all για να δείξετε το ιστορικό με το commit συγχώνευσης.


Βήμα 5: Τελική σύγκριση και ερωτήσεις προβληματισμού

Ερωτήσεις προβληματισμού

  1. Σύγκριση των ιστορικών:

    • Τι παρατηρείτε στη διαφορά μεταξύ του ιστορικού του branche1 (με rebase) και εκείνου του branche2 (με merge);
    • Τραβήξτε ένα στιγμιότυπο κάθε ιστορικού και εξηγήστε τις παρατηρούμενες διαφορές.
  2. Επιχειρήματα για κάθε μέθοδο:

    • Σε ποιες περιπτώσεις θα ήταν προτιμότερο να χρησιμοποιήσετε rebase για να ενσωματώσετε τροποποιήσεις;
    • Σε ποιες περιπτώσεις το merge είναι πιο επωφελές;
  3. Σενάρια εφαρμογής:

    • Φανταστείτε ένα ομαδικό έργο. Εξηγήστε μια συγκεκριμένη περίπτωση όπου το merge θα μπορούσε να προκαλέσει συγκρούσεις στο ιστορικό, και πώς το rebase θα μπορούσε να λύσει αυτό το πρόβλημα.
    • Αντίστροφα, περιγράψτε μια περίπτωση όπου η υπερβολική χρήση του rebase θα μπορούσε να δημιουργήσει δυσκολίες παρακολούθησης σε ένα συνεργατικό έργο.

Σύνοψη και υποβολή

Για να υποβάλετε αυτό το TP:

  1. Συγκεντρώστε τις απαντήσεις και τα στιγμιότυπα οθόνης σε ένα έγγραφο (PDF ή Word).
  2. Απαντήστε στις ερωτήσεις προβληματισμού στο κάτω μέρος του εγγράφου.
  3. Υποβάλετε το αρχείο σας στην πλατφόρμα του μαθήματος.