Συνεργατική ροή εργασίας

8 λεπτά

Πίνακας περιεχομένων


1 — Συνεργασία: δύο μοντέλα

Για να εργαστείτε πολλοί σε ένα αποθετήριο, υπάρχουν δύο μεγάλα μοντέλα συνεργασίας. Η επιλογή εξαρτάται κυρίως από το ποιος έχει δικαίωμα εγγραφής στο αποθετήριο.

ΜοντέλοΑρχήΤυπική περίπτωση
Κοινόχρηστος κλάδοςΌλα τα μέλη έχουν πρόσβαση εγγραφής· ο καθένας δημιουργεί τους κλάδους του στο ίδιο αποθετήριοΕσωτερική ομάδα, επιχείρηση
Fork & pullΑντιγράφετε το αποθετήριο στον δικό σας λογαριασμό, εργάζεστε εκεί, έπειτα προτείνετε ένα PR προς το πρωτότυποOpen source, εξωτερικοί συνεισφέροντες

Στην επιχείρηση, χρησιμοποιούμε σχεδόν πάντα τον κοινόχρηστο κλάδο (μαθήματα 01–03). Για να συνεισφέρετε σε ένα έργο open source του οποίου δεν είστε μέλος, περνάτε από το fork.

↑ Επιστροφή στην αρχή


2 — Fork και clone

Ένα fork είναι ένα προσωπικό αντίγραφο ενός αποθετηρίου στον δικό σας λογαριασμό GitHub. Έχετε όλα τα δικαιώματα εκεί, χωρίς να αγγίζετε το πρωτότυπο. Το clone, από την άλλη, κατεβάζει ένα αποθετήριο στον τοπικό υπολογιστή σας.

Μην τα συγχέετε:

ΌροςΠού;Ενέργεια
ForkΣτο GitHubΑντιγράφει το αποθετήριο στον λογαριασμό σας
CloneΑπό το GitHub στον υπολογιστή σαςΚατεβάζει το αποθετήριο τοπικά
originΤο απομακρυσμένο fork σαςΕκεί που στέλνετε
upstreamΤο αρχικό αποθετήριοΗ πηγή που ακολουθείτε
bash
# 1. Το fork γίνεται με το κουμπί "Fork" στο GitHub (ή το CLI)
gh repo fork projet/app --clone

# Χειροκίνητο ισοδύναμο μετά από ένα fork:
# 2. Κλωνοποίηση ΤΟΥ ΔΙΚΟΥ ΣΑΣ fork
git clone https://github.com/vous/app.git
cd app

# 3. Επαλήθευση του remote
git remote -v
# origin  https://github.com/vous/app.git (fetch/push)

Το fork είναι το «sandbox» σας: μπορείτε να τα σπάσετε όλα χωρίς κίνδυνο για το αρχικό έργο. Όταν η δουλειά σας είναι έτοιμη, ένα pull request την προτείνει στον συντηρητή, που αποφασίζει αν θα την αποδεχτεί.

🔧 Μίνι-άσκηση — Με το gh, κάντε fork το αποθετήριο projet/app και κλωνοποιήστε το στον υπολογιστή σας με μία εντολή.

✅ Δείτε μια λύση

gh repo fork projet/app --clone

↑ Επιστροφή στην αρχή


3 — Συγχρονισμός του fork (upstream)

Ενώ εργάζεστε, το αρχικό αποθετήριο εξελίσσεται. Το fork σας δεν ενημερώνεται μόνο του. Πρέπει να προσθέσετε ένα remote upstream που δείχνει στο πρωτότυπο, και έπειτα να ανακτάτε τις αλλαγές του τακτικά.

bash
# 1. Δήλωση του αρχικού αποθετηρίου ως 'upstream'
git remote add upstream https://github.com/projet/app.git

# 2. Ανάκτηση των τελευταίων αλλαγών του
git fetch upstream

# 3. Ενημέρωση του τοπικού main
git switch main
git merge upstream/main

# 4. Αποστολή στο δικό σας fork
git push origin main
RemoteΡόλοςΚατεύθυνση χρήσης
originΤο fork σαςpush της εργασίας σας
upstreamΑρχικό αποθετήριοfetch των ενημερώσεων των άλλων

Ο συγχρονισμός νωρίς και συχνά με το upstream αποτρέπει το fork σας από το να «απομακρυνθεί» από το έργο. Όσο περισσότερο περιμένετε, τόσο περισσότερες θα είναι οι συγκρούσεις την ημέρα του PR.

🔧 Μίνι-άσκηση — Γράψτε την εντολή για να δηλώσετε το αρχικό αποθετήριο https://github.com/projet/app.git ως remote upstream.

✅ Δείτε μια λύση

git remote add upstream https://github.com/projet/app.git

↑ Επιστροφή στην αρχή


4 — Τα issues

Ένα issue είναι ένα εισιτήριο: ένα μέρος για να σηματοδοτήσετε ένα σφάλμα, να προτείνετε μια λειτουργία ή να θέσετε μια ερώτηση. Είναι το σύστημα παρακολούθησης ενός έργου GitHub.

Τι βάζουμε σε ένα καλό issue σφάλματος:

ΣτοιχείοΠαράδειγμα
Σαφής τίτλος«Crash στο κλικ στο Εξαγωγή»
Βήματα αναπαραγωγής1. Άνοιγμα X, 2. κλικ στο Y…
Αναμενόμενη συμπεριφορά«Το αρχείο κατεβαίνει»
Παρατηρούμενη συμπεριφορά«Η εφαρμογή κλείνει»
ΠεριβάλλονΛΣ, περιηγητής, έκδοση
bash
# Δημιουργία issue από το τερματικό
gh issue create --title "Crash au clic sur Exporter" \
  --body "Étapes : 1) ouvrir X 2) cliquer Exporter → l'app se ferme."

# Λίστα ανοιχτών issues
gh issue list

# Σύνδεση ενός PR με ένα issue: στην περιγραφή του PR
#   Closes #42   → κλείνει αυτόματα το issue #42 στη συγχώνευση

Οι ετικέτες οργανώνουν τα issues: bug, enhancement, documentation, good first issue, help wanted

Τα issues μετατρέπουν το «θα έπρεπε να το διορθώσουμε κάποια μέρα» σε ιχνηλατήσιμες και συζητήσιμες εργασίες. Η σύνδεση ενός PR με Closes #N κλείνει το issue αυτόματα στη συγχώνευση: μηδέν ξεχασμένα.

🔧 Μίνι-άσκηση — Με το gh, δημιουργήστε ένα issue με τίτλο «Crash au clic sur Exporter».

✅ Δείτε μια λύση

gh issue create --title "Crash au clic sur Exporter" --body "L'app se ferme au clic sur Exporter."

↑ Επιστροφή στην αρχή


5 — Καλές πρακτικές ομάδας

Πέρα από τις εντολές, η αποτελεσματική συνεργασία βασίζεται σε κοινές συμβάσεις. Ακολουθούν εκείνες που κάνουν τη διαφορά.

Καλή πρακτικήΣυγκεκριμένα
Σαφή μηνύματα commit«Διορθώνει τον υπολογισμό ΦΠΑ», όχι «update»
Σύμβαση ονοματοδοσίαςfeature/, fix/, docs/ για τους κλάδους
Σύντομοι κλάδοιΕνσωμάτωση νωρίς για περιορισμό συγκρούσεων
Μικρά και αναθεωρημένα PRΣοβαρή ανάγνωση, λιγότερα σφάλματα
Το main πάντα αναπτύξιμοΠοτέ δεν σπάμε τον κύριο κλάδο
Ένα αρχείο README + CONTRIBUTINGΤεκμηριώνει πώς να συνεισφέρετε

Το πρότυπο των «Conventional Commits», πολύ διαδεδομένο:

bash
git commit -m "feat: ajout de l'export CSV"
git commit -m "fix: corrige le crash au login"
git commit -m "docs: mise à jour du README"
git commit -m "refactor: simplifie le service de paiement"
ΠρόθεμαΣημασία
feat:Νέα λειτουργία
fix:Διόρθωση σφάλματος
docs:Τεκμηρίωση
refactor:Επανεγγραφή χωρίς αλλαγή συμπεριφοράς
test:Προσθήκη ή τροποποίηση δοκιμών

Μια ομάδα που μοιράζεται συμβάσεις δεν χρειάζεται να συνεννοείται αδιάκοπα: ο κώδικας, τα commits και οι κλάδοι «μιλούν» την ίδια γλώσσα. Αυτό είναι η συνεργατική ρευστότητα.

🔧 Μίνι-άσκηση — Μόλις προσθέσατε την εξαγωγή CSV. Γράψτε το μήνυμα commit στη μορφή Conventional Commits.

✅ Δείτε μια λύση

git commit -m "feat: ajout de l'export CSV" (πρόθεμα feat: για νέα λειτουργία).

↑ Επιστροφή στην αρχή


6 — Κουίζ — Η συνεργατική ροή εργασίας

Question 1 : Τι είναι ένα fork;

a) Συγχώνευση δύο κλάδων

b) Προσωπικό αντίγραφο ενός αποθετηρίου στον λογαριασμό σας GitHub

c) Ένας τύπος σύγκρουσης

d) Διαγραφή του ιστορικού

💡 Δείτε τη λύση

Απάντηση: b) — Ένα fork αντιγράφει το αποθετήριο στον λογαριασμό σας· εργάζεστε ελεύθερα χωρίς να αγγίζετε το πρωτότυπο.


Question 2 : Ποια είναι η διαφορά μεταξύ origin και upstream στο μοντέλο fork & pull;

a) Καμία, είναι συνώνυμα

b) Το origin είναι το fork σας, το upstream είναι το αρχικό αποθετήριο

c) Το origin είναι τοπικό, το upstream είναι στον δίσκο σας

d) Το upstream χρησιμεύει για διαγραφή κλάδων

💡 Δείτε τη λύση

Απάντηση: b) — Στέλνουμε στο origin (το fork μας) και ανακτούμε ενημερώσεις από το upstream (το πρωτότυπο).


Question 3 : Σε τι χρησιμεύει ένα issue;

a) Να μεταγλωττίσετε τον κώδικα

b) Να σηματοδοτήσετε ένα σφάλμα, να προτείνετε μια λειτουργία ή να συζητήσετε μια εργασία

c) Να συγχωνεύσετε αυτόματα τους κλάδους

d) Να κλωνοποιήσετε ένα αποθετήριο

💡 Δείτε τη λύση

Απάντηση: b) — Ένα issue είναι ένα εισιτήριο παρακολούθησης: σφάλμα, ιδέα, ερώτηση, οργανωμένο με ετικέτες.


Question 4 : Τι κάνει το Closes #42 στην περιγραφή ενός pull request;

a) Διαγράφει το commit 42

b) Κλείνει αυτόματα το issue #42 όταν συγχωνευθεί το PR

c) Ανοίγει ένα νέο issue

d) Ακυρώνει το PR

💡 Δείτε τη λύση

Απάντηση: b) — Η λέξη-κλειδί ClosesFixes) συνδέει το PR με το issue και το κλείνει στη συγχώνευση.


Question 5 : Τι σημαίνει το πρόθεμα commit fix: στα Conventional Commits;

a) Νέα λειτουργία

b) Διόρθωση σφάλματος

c) Τεκμηρίωση

d) Δοκιμή

💡 Δείτε τη λύση

Απάντηση: b) — Το fix: δηλώνει διόρθωση σφάλματος· το feat: μια λειτουργία, το docs: τεκμηρίωση.

↑ Επιστροφή στην αρχή


7 — Πρακτική — Συνεισφορά μέσω fork

Οδηγία

Θέλετε να συνεισφέρετε σε ένα έργο open source projet/app του οποίου δεν είστε μέλος. Εκτελέστε τον πλήρη κύκλο του μοντέλου fork & pull:

  1. Κάντε fork και κλωνοποιήστε το αποθετήριο.
  2. Προσθέστε το remote upstream και συγχρονίστε το main σας.
  3. Δημιουργήστε έναν κλάδο, κάντε ένα commit (που διορθώνει το issue #8) και στείλτε τον στο fork σας.
  4. Ανοίξτε ένα pull request προς το αρχικό αποθετήριο συνδέοντας το issue.

Διόρθωση

bash
# 1. Fork + κλωνοποίηση
gh repo fork projet/app --clone
cd app

# 2. Προσθήκη upstream και συγχρονισμός
git remote add upstream https://github.com/projet/app.git
git fetch upstream
git switch main
git merge upstream/main
git push origin main

# 3. Διακλάδωση, commit, αποστολή
git switch -c fix/correction-typo-readme
# ... διόρθωση του αρχείου README ...
git commit -am "fix: corrige une faute dans le README"
git push -u origin fix/correction-typo-readme

# 4. Άνοιγμα του PR προς το ΑΡΧΙΚΟ αποθετήριο
gh pr create --repo projet/app \
  --base main --head vous:fix/correction-typo-readme \
  --title "fix: faute de frappe dans le README" \
  --body "Corrige une coquille. Closes #8"

Αναμενόμενο αποτέλεσμα:

ΒήμαΕπαλήθευση
Fork δημιουργήθηκεΤο αποθετήριο εμφανίζεται στο github.com/vous/app
Προστέθηκε upstreamΤο git remote -v εμφανίζει origin και upstream
Κλάδος στάλθηκεΟ κλάδος υπάρχει στο δικό σας fork (origin)
PR άνοιξεΤο PR στοχεύει το projet/app:main από το vous:fix/...
Issue συνδεδεμένοΤο Closes #8 θα κλείσει το issue όταν συγχωνεύσει ο συντηρητής
text
$ git remote -v
origin    https://github.com/vous/app.git (push)
upstream  https://github.com/projet/app.git (fetch)

Το PR ξεκινά από τον δικό σας κλάδο (vous:fix/...) προς το main του αρχικού αποθετηρίου. Ο συντηρητής το αναθεωρεί και αποφασίζει να συγχωνεύσει: μόλις συνεισφέρατε στο open source χωρίς ποτέ να έχετε δικαίωμα εγγραφής στο έργο.

↑ Επιστροφή στην αρχή


8 — Σύνοψη

Σημεία που πρέπει να θυμάστε

  1. Δύο μοντέλα: κοινόχρηστος κλάδος (εσωτερική ομάδα) και fork & pull (open source).
  2. Fork = αντίγραφο στον λογαριασμό σας· clone = αντίγραφο στον υπολογιστή σας.
  3. origin = το fork σας· upstream = το αρχικό αποθετήριο προς τακτικό συγχρονισμό.
  4. Τα issues ιχνηλατούν σφάλματα, ιδέες και εργασίες· το Closes #N συνδέει και κλείνει στη συγχώνευση.
  5. Καλές πρακτικές: σαφή commits, σύντομοι κλάδοι, μικρά PR, σταθερό main.
  6. Conventional Commits (feat:, fix:, docs:…) τυποποιούν τα μηνύματα.

Η συνέχεια

Αυτό το module 02 ολοκληρώθηκε: ξέρετε πλέον να διακλαδώνετε, να συγχωνεύετε, να ανοίγετε pull requests και να συνεργάζεστε σε μεγάλη κλίμακα. Το module 03 συνεχίζει τη διαδρομή DevOps με τη συνεχή ενσωμάτωση (CI/CD), που θα αυτοματοποιήσει δοκιμές και αναπτύξεις από τα ίδια αυτά pull requests.

↑ Επιστροφή στην αρχή


Με την επιφύλαξη παντός δικαιώματος. Οποιαδήποτε αναπαραγωγή, διάδοση, χρήση ή προσαρμογή αυτού του μαθήματος, εν όλω ή εν μέρει, απαγορεύεται αυστηρά χωρίς την προηγούμενη γραπτή άδεια του Dr. Haythem REHOUMA.

Μάθημα δημιουργημένο από τον Dr. Haythem REHOUMA — Ανάπτυξη και ανάπτυξη λύσεων δεδομένων