| # | Ενότητα |
|---|---|
| 1 | Γιατί κλάδοι; |
| 2 | Οι τύποι κλάδων |
| 3 | Git Flow |
| 4 | GitHub Flow |
| 5 | Trunk-Based Development |
| 6 | Σύγκριση και επιλογή στρατηγικής |
| 7 | Κουίζ — Οι στρατηγικές διακλάδωσης |
| 8 | Πρακτική — Εφαρμογή του GitHub Flow |
| 9 | Σύνοψη |
Ένας κλάδος είναι μια ανεξάρτητη γραμμή ανάπτυξης. Επιτρέπει να εργάζεστε σε μια νέα λειτουργία ή μια διόρθωση χωρίς να αγγίζετε τον σταθερό κώδικα που χρησιμοποιούν οι άλλοι.
Σκεφτείτε έναν κλάδο σαν ένα ξεχωριστό πρόχειρο. Μπορείτε να κάνετε όλες τις δοκιμές που θέλετε· όσο δεν έχετε συγχωνεύσει, η δουλειά των άλλων δεν επηρεάζεται.
Χωρίς κλάδους, όλη η ομάδα θα έγραφε στο ίδιο αρχείο ταυτόχρονα: χάος εξασφαλισμένο. Με τους κλάδους, ο καθένας προχωρά στον διάδρομό του και έπειτα συγκεντρώνουμε καθαρά.
Οι βασικές εντολές που είδαμε ήδη στο module 01:
# Δημιουργία κλάδου και μετάβαση σε αυτόν
git switch -c feature/login
# Λίστα κλάδων
git branch
# Επιστροφή στο main
git switch main| Ενέργεια | Σύγχρονη εντολή | Παλιά σύνταξη |
|---|---|---|
| Δημιουργία + μετάβαση | git switch -c nom | git checkout -b nom |
| Μετάβαση | git switch nom | git checkout nom |
| Λίστα | git branch | git branch |
| Διαγραφή | git branch -d nom | git branch -d nom |
🔧 Μίνι-άσκηση — Γράψτε τη σύγχρονη εντολή για να δημιουργήσετε έναν κλάδο feature/login και να μεταβείτε σε αυτόν με μία κίνηση.
git switch -c feature/login (ισοδύναμο με την παλιά σύνταξη git checkout -b feature/login).
Σε μια ομάδα, δεν δημιουργούμε κλάδους στην τύχη: τους δίνουμε έναν ρόλο και ένα συμβατικό όνομα. Ακολουθούν οι πιο διαδεδομένοι τύποι.
| Τύπος κλάδου | Σύνηθες πρόθεμα | Ρόλος | Διάρκεια ζωής |
|---|---|---|---|
| Κύριος | main (ή master) | Κώδικας σε παραγωγή, πάντα σταθερός | Μόνιμος |
| Ενσωμάτωση | develop | Συγκεντρώνει τις λειτουργίες σε εξέλιξη | Μόνιμος |
| Λειτουργία | feature/ | Ανάπτυξη μιας νέας λειτουργίας | Σύντομη |
| Έκδοση | release/ | Σταθεροποίηση πριν από την παραγωγή | Σύντομη |
| Επείγον διορθωτικό | hotfix/ | Διόρθωση κρίσιμου σφάλματος στην παραγωγή | Πολύ σύντομη |
Παραδείγματα ρεαλιστικών ονομάτων:
feature/ajout-paiement-stripe
feature/dashboard-utilisateur
release/1.4.0
hotfix/correction-faille-loginΜια καλή σύμβαση ονοματοδοσίας είναι δωρεάν τεκμηρίωση: μόνο από το όνομα του κλάδου, η ομάδα καταλαβαίνει για τι πρόκειται.
🔧 Μίνι-άσκηση — Πρέπει να διορθώσετε επειγόντως ένα κενό ασφαλείας σύνδεσης στην παραγωγή. Ποιο πρόθεμα κλάδου χρησιμοποιείτε, και προτείνετε ένα πλήρες όνομα.
Το πρόθεμα hotfix/ (επείγουσα διόρθωση που ξεκινά από το main). Παράδειγμα: hotfix/correction-faille-login.
Το Git Flow είναι μια δομημένη στρατηγική που εισήγαγε ο Vincent Driessen το 2010. Βασίζεται σε δύο μόνιμους κλάδους (main και develop) και τρεις τύπους προσωρινών κλάδων (feature, release, hotfix).
Ο τυπικός κύκλος:
develop για να δημιουργήσουμε έναν κλάδο feature/*.feature συγχωνεύεται στο develop.release/* για σταθεροποίηση.release συγχωνεύεται στο main (και λαμβάνει ετικέτα) και στο develop.hotfix/* από το main, έπειτα το συγχωνεύουμε στο main και στο develop.# Έναρξη μιας λειτουργίας (χωρίς την επέκταση git-flow)
git switch develop
git switch -c feature/panier
# ... εργασία + commits ...
git switch develop
git merge feature/panier
git branch -d feature/panier| Πλεονεκτήματα | Μειονεκτήματα |
|---|---|
| Πολύ δομημένο, σαφείς ρόλοι | Βαρύ, πολλοί κλάδοι |
| Ιδανικό για προγραμματισμένες εκδόσεις | Ακατάλληλο για συνεχή ανάπτυξη |
| Διαχωρίζει καθαρά ανάπτυξη και παραγωγή | Πολύπλοκες συγχωνεύσεις, κίνδυνος συγκρούσεων |
Το Git Flow λάμπει σε λογισμικό που παραδίδεται ανά εκδόσεις (εφαρμογές κινητών, εγκατεστημένα προγράμματα). Για έναν ιστότοπο που αναπτύσσεται 10 φορές την ημέρα, γίνεται τροχοπέδη.
Το GitHub Flow είναι μια στρατηγική απλή και ελαφριά, σχεδιασμένη για τη συνεχή ανάπτυξη. Ένας μόνο μόνιμος κλάδος: main. Όλα τα υπόλοιπα περνούν από σύντομους κλάδους feature και pull requests.
Οι χρυσοί κανόνες:
main είναι πάντα έτοιμο για ανάπτυξη.main.main.main.git switch main
git pull
git switch -c feature/filtre-recherche
# ... commits ...
git push -u origin feature/filtre-recherche
# → άνοιγμα ενός Pull Request στο GitHub| Πλεονεκτήματα | Μειονεκτήματα |
|---|---|
| Απλό, λίγοι κλάδοι | Προϋποθέτει καλή κάλυψη δοκιμών |
| Ιδανικό για web / SaaS | Λιγότερο κατάλληλο για πολλές εκδόσεις προς συντήρηση |
| Ενθαρρύνει τις μικρές συχνές παραδόσεις | Απαιτεί πειθαρχία στην ποιότητα του main |
Το GitHub Flow είναι πιθανότατα το καλύτερο σημείο εκκίνησης για μια σύγχρονη ομάδα: αρκετή δομή για συνεργασία, αρκετή ελαφρότητα για ταχύτητα.
🔧 Μίνι-άσκηση — Στο GitHub Flow, γράψτε τις δύο εντολές για να ξεκινήσετε από ένα ενημερωμένο main πριν δημιουργήσετε τον κλάδο εργασίας σας.
git switch main
git pullΚαι μόνο μετά: git switch -c feature/....
Το Trunk-Based Development (ανάπτυξη στον κορμό) ωθεί την απλότητα ακόμα πιο μακριά: όλοι ενσωματώνουν τη δουλειά τους σε έναν μοναδικό κλάδο (τον trunk, δηλαδή το main) πολύ συχνά — ιδανικά αρκετές φορές την ημέρα.
Βασικές αρχές:
# Υπερσύντομος κύκλος
git switch main
git pull
# μικρή τροποποίηση...
git commit -am "Ajout du bouton export"
git push # ενσωματωμένο στον κορμό λίγα λεπτά μετά| Πλεονεκτήματα | Μειονεκτήματα |
|---|---|
| Πραγματική συνεχής ενσωμάτωση | Απαιτεί στερεή και γρήγορη CI |
| Αποφεύγει τα «συγχωνεύσεις της κόλασης» | Απαιτεί πολλή πειθαρχία |
| Πρακτική πολύ αποδοτικών ομάδων (Google κ.λπ.) | Feature flags προς διαχείριση |
Ο χειρότερος εχθρός των ομάδων Git είναι οι κλάδοι που ζουν εβδομάδες. Όσο πιο αργά ενσωματώνουμε, τόσο πιο επώδυνη είναι η συγχώνευση. Το trunk-based το λύνει ενσωματώνοντας νωρίς και συχνά.
🔧 Μίνι-άσκηση — Στο Trunk-Based, πώς ενσωματώνετε μια λειτουργία μη ολοκληρωμένη χωρίς να μπλοκάρετε τους άλλους ούτε να δημιουργήσετε μακρύ κλάδο;
Κρύβουμε τον ημιτελή κώδικα πίσω από ένα feature flag (σημαία λειτουργίας): είναι ενσωματωμένος στον κορμό αλλά απενεργοποιημένος για τους χρήστες.
Δεν υπάρχει καθολική στρατηγική: η σωστή επιλογή εξαρτάται από τον τύπο προϊόντος, την ωριμότητα της ομάδας και τη συχνότητα ανάπτυξης.
| Κριτήριο | Git Flow | GitHub Flow | Trunk-Based |
|---|---|---|---|
| Μόνιμοι κλάδοι | 2 (main + develop) | 1 (main) | 1 (main) |
| Πολυπλοκότητα | Υψηλή | Χαμηλή | Πολύ χαμηλή |
| Συχνότητα παράδοσης | Ανά εκδόσεις | Συνεχής | Πολύ συνεχής |
| Διάρκεια κλάδων | Μεγάλη | Σύντομη | Πολύ σύντομη (< 1 ημ.) |
| Απαιτούμενες αυτοματοποιημένες δοκιμές | Επιθυμητές | Σημαντικές | Απαραίτητες |
| Ιδανική περίπτωση | Εκδόσεις εφαρμογών, κινητά | Web / SaaS, μέση ομάδα | Ώριμη ομάδα, ισχυρή CI |
Συμβουλή: οι περισσότερες ομάδες θα πρέπει να ξεκινήσουν με το GitHub Flow. Προσφέρει τον καλύτερο συμβιβασμό απλότητας / ασφάλειας. Μεταβαίνουμε στο trunk-based όταν η CI είναι ώριμη, ή στο Git Flow μόνο αν το προϊόν επιβάλλει εκδόσεις.
Question 1 : Σε τι χρησιμεύει κυρίως ένας κλάδος Git;
a) Να δημιουργεί αντίγραφο ασφαλείας του αποθετηρίου στο cloud
b) Να εργάζεστε απομονωμένα χωρίς να επηρεάζετε τον σταθερό κώδικα
c) Να συμπιέζετε τα αρχεία
d) Να διαγράφετε το ιστορικό
✅ Απάντηση: b) — Ένας κλάδος είναι μια ανεξάρτητη γραμμή ανάπτυξης που απομονώνει τη δουλειά μέχρι τη συγχώνευση.
Question 2 : Πόσους μόνιμους κλάδους χρησιμοποιεί το Git Flow;
a) Έναν μόνο (main)
b) Δύο (main και develop)
c) Κανέναν
d) Έναν ανά προγραμματιστή
✅ Απάντηση: b) — Το Git Flow βασίζεται σε δύο μόνιμους κλάδους: main (παραγωγή) και develop (ενσωμάτωση).
Question 3 : Ποια στρατηγική ταιριάζει καλύτερα σε έναν ιστότοπο που αναπτύσσεται αρκετές φορές την ημέρα;
a) Git Flow
b) GitHub Flow ή Trunk-Based
c) Καθόλου κλάδοι
d) Ένας κλάδος ανά έτος
✅ Απάντηση: b) — Το GitHub Flow (και ακόμα περισσότερο το Trunk-Based) έχουν σχεδιαστεί για συνεχή ανάπτυξη. Το Git Flow θα ήταν υπερβολικά βαρύ.
Question 4 : Στο Trunk-Based Development, πώς κρύβουμε μια μη ολοκληρωμένη λειτουργία;
a) Σε έναν μακρύ κλάδο αρκετών εβδομάδων
b) Με ένα feature flag (σημαία λειτουργίας)
c) Διαγράφοντας τον κώδικα κάθε βράδυ
d) Δεν γίνεται, πρέπει να τελειώσουμε τα πάντα μονομιάς
✅ Απάντηση: b) — Τα feature flags επιτρέπουν να ενσωματώνουμε ημιτελή κώδικα χωρίς να τον ενεργοποιούμε για τους χρήστες, αποφεύγοντας τους μακρούς κλάδους.
Question 5 : Ποιο πρόθεμα κλάδου χρησιμοποιούμε για να διορθώσουμε ένα κρίσιμο σφάλμα απευθείας στην παραγωγή;
a) feature/
b) release/
c) hotfix/
d) develop/
✅ Απάντηση: c) — Ένας κλάδος hotfix/ ξεκινά από το main για να διορθώσει ένα επείγον σφάλμα, έπειτα συγχωνεύεται στο main και στο develop.
Εργάζεστε σε ένα αποθετήριο του οποίου το main είναι σταθερό. Σας ζητείται να προσθέσετε μια σελίδα «Σχετικά». Εφαρμόστε το GitHub Flow:
main.apropos.html.# 1. Εκκίνηση από ενημερωμένο main
git switch main
git pull origin main
# 2. Δημιουργία περιγραφικού κλάδου
git switch -c feature/page-apropos
# 3. Δημιουργία του αρχείου και commit
echo "<h1>À propos</h1>" > apropos.html
git add apropos.html
git commit -m "Ajout de la page À propos"
# 4. Αποστολή του κλάδου στο απομακρυσμένο
git push -u origin feature/page-apropos
# 5. Επαλήθευση των κλάδων
git branchΑναμενόμενο αποτέλεσμα:
| Βήμα | Επαλήθευση |
|---|---|
| Κλάδος δημιουργήθηκε | Το git branch εμφανίζει * feature/page-apropos |
| Το commit υπάρχει | Το git log --oneline -1 δείχνει «Ajout de la page À propos» |
| Ο κλάδος στάλθηκε | Το Git εμφανίζει * [new branch] feature/page-apropos -> feature/page-apropos |
| Παρακολούθηση ρυθμισμένη | Το -u συνδέει τον τοπικό κλάδο με τον απομακρυσμένο |
* feature/page-apropos
mainΕπόμενο λογικό βήμα: άνοιγμα ενός pull request στο GitHub για αναθεώρηση και συγχώνευση αυτής της εργασίας — αυτό ακριβώς είναι το αντικείμενο του μαθήματος 03.
main, develop, feature/, release/, hotfix/ — ο καθένας με τον ρόλο του.main + pull requests, ιδανικό για το web.Τώρα που ξέρετε να οργανώνετε τους κλάδους σας, σειρά έχει το μάθημα 02 — Merge και rebase: πώς να συγκεντρώνετε καθαρά αυτούς τους κλάδους και να επιλύετε συγκρούσεις.
Με την επιφύλαξη παντός δικαιώματος. Οποιαδήποτε αναπαραγωγή, διάδοση, χρήση ή προσαρμογή αυτού του μαθήματος, εν όλω ή εν μέρει, απαγορεύεται αυστηρά χωρίς την προηγούμενη γραπτή άδεια του Dr. Haythem REHOUMA.
Μάθημα δημιουργημένο από τον Dr. Haythem REHOUMA — Ανάπτυξη και ανάπτυξη λύσεων δεδομένων