Τοπικό αποθετήριο και commits

7 λεπτά

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


1 — Οι τρεις ζώνες του Git

Για να κατανοήσετε τα commits, πρέπει πρώτα να οπτικοποιήσετε τις τρεις ζώνες μέσα από τις οποίες το Git μετακινεί τα αρχεία σας.

ΖώνηΠεριγραφήΕντολή για να εισέλθετε
Κατάλογος εργασίαςΤα αρχεία σας όπως τα επεξεργάζεστε(άμεση επεξεργασία)
Ζώνη staging (index)Οι αλλαγές που προετοιμάζετε να καταγράψετεgit add
Τοπικό αποθετήριοΤο μόνιμο ιστορικό των commitsgit commit

Αναλογία: προετοιμασία ενός δέματος. Ο κατάλογος εργασίας είναι το ακατάστατο γραφείο σας· η ζώνη staging είναι το κουτί όπου τοποθετείτε ό,τι θέλετε να στείλετε· το commit είναι η στιγμή που σφραγίζετε το κουτί και το αρχειοθετείτε.

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


2 — Αρχικοποίηση ενός τοπικού αποθετηρίου

Για να μετατρέψετε έναν συνηθισμένο φάκελο σε αποθετήριο Git:

bash
# Τοποθέτηση στον φάκελο του έργου
cd mon-projet

# Αρχικοποίηση του αποθετηρίου
git init

Αυτό δημιουργεί έναν κρυφό υποφάκελο .git/ που περιέχει όλο το ιστορικό και τη διαμόρφωση του αποθετηρίου.

bash
# Επαλήθευση της κατάστασης του μόλις δημιουργημένου αποθετηρίου
git status

Προσοχή: μην διαγράψετε ποτέ τον φάκελο .git/: περιέχει όλο το ιστορικό. Η διαγραφή του ισοδυναμεί με απώλεια της εκδοσιοποίησης (αλλά όχι των τρεχόντων αρχείων σας).

🔧 Μικρή άσκηση — Γράψτε την εντολή που μετατρέπει τον τρέχοντα φάκελο σε αποθετήριο Git, και έπειτα εκείνη που εμφανίζει την κατάστασή του.

✅ Δείτε μια λύση
bash
git init
git status

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


3 — Παρακολούθηση των αρχείων

Ένα αρχείο μπορεί να είναι παρακολουθούμενο (tracked) ή μη παρακολουθούμενο (untracked) από το Git.

bash
# Προετοιμασία ενός συγκεκριμένου αρχείου
git add fichier.txt

# Προετοιμασία όλων των αλλαγών του φακέλου
git add .

# Προβολή της κατάστασης (παρακολουθούμενο / μη παρακολουθούμενο / προετοιμασμένο)
git status
ΕντολήΑποτέλεσμα
git add fichier.txtΠροετοιμάζει ένα συγκεκριμένο αρχείο
git add .Προετοιμάζει όλα τα τροποποιημένα/νέα αρχεία
git restore --staged fichier.txtΑφαιρεί ένα αρχείο από τη ζώνη staging
git statusΕμφανίζει την κατάσταση κάθε αρχείου

Το git status είναι ο καλύτερος φίλος σας: χρησιμοποιήστε το πριν και μετά από κάθε git add για να δείτε ακριβώς τι ετοιμάζεται να καταγράψει το Git.

🔧 Μικρή άσκηση — Μόλις τροποποιήσατε τα index.html και style.css. Γράψτε την εντολή που προετοιμάζει (stage) μόνο το index.html.

✅ Δείτε μια λύση
bash
git add index.html

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


4 — Δημιουργία ενός commit

Ένα commit είναι ένα στιγμιότυπο (snapshot) του έργου σας σε μια δεδομένη στιγμή, συνοδευόμενο από ένα μήνυμα που εξηγεί την αλλαγή.

bash
# Προετοιμασία και έπειτα καταγραφή
git add .
git commit -m "Προσθήκη της αρχικής σελίδας"

Κάθε commit διαθέτει:

ΣτοιχείοΠεριγραφή
Ένα αναγνωριστικό (hash)Π.χ. a1b2c3d… — μοναδικό
Έναν συγγραφέαΤο όνομά σας + ηλεκτρονικό ταχυδρομείο (διαμόρφωση του μαθήματος 05)
Μια ημερομηνίαΧρονική σήμανση του commit
Ένα μήνυμαΗ περιγραφή της αλλαγής
Έναν γονέαΤο προηγούμενο commit (αλυσίδα ιστορικού)
bash
# Προβολή του ιστορικού των commits
git log
git log --oneline   # συμπαγής έκδοση

Ένα καλό commit είναι ατομικό: κάνει ένα μόνο συνεκτικό πράγμα. Αποφύγετε το commit-σακούλα «ένα σωρό πράγματα» — προτιμήστε πολλά μικρά σαφή commits.

🔧 Μικρή άσκηση — Προετοιμάστε όλες τις αλλαγές σας και δημιουργήστε ένα commit με μήνυμα «Προσθέτει τη σελίδα επικοινωνίας».

✅ Δείτε μια λύση
bash
git add .
git commit -m "Προσθέτει τη σελίδα επικοινωνίας"

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


5 — Καλές πρακτικές μηνυμάτων

Το μήνυμα commit αφηγείται την ιστορία του έργου. Ένα καλό μήνυμα εξοικονομεί ώρες σε όλη την ομάδα (και στον εαυτό σας σε 6 μήνες).

Βασικοί κανόνες

  • Γράφετε σε προστακτική ενεστώτα: «Προσθέτει…», «Διορθώνει…», «Διαγράφει…».
  • Μια σύντομη γραμμή σύνοψης (≤ 50 χαρακτήρες), και έπειτα ένα αναλυτικό σώμα αν χρειάζεται.
  • Εξηγήστε το γιατί, όχι μόνο το τι.

Σύγκριση

Κακό μήνυμαΚαλό μήνυμα
updateΕνημερώνει την εξάρτηση Maven στην 3.9
fix bugΔιορθώνει τη συντριβή στην εκκίνηση αν λείπει η διαμόρφωση
wipΠροσθέτει την επικύρωση της φόρμας σύνδεσης

Συνηθισμένη σύμβαση (Conventional Commits)

feat: προσθέτει την αυθεντικοποίηση με διακριτικό
fix: διορθώνει τη σελιδοποίηση των αποτελεσμάτων
docs: συμπληρώνει το README εγκατάστασης

Μνημονικό κόλπο: ένα καλό μήνυμα πρέπει να συμπληρώνει τη φράση «Αν εφαρμόσω αυτό το commit, θα…». Παράδειγμα: «…προσθέσει την αρχική σελίδα».

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


6 — Το αρχείο .gitignore

Ορισμένα αρχεία δεν πρέπει ποτέ να εκδοσιοποιούνται: προσωρινά αρχεία, ογκώδεις εξαρτήσεις, μυστικά, μεταγλωττισμένα αρχεία. Το αρχείο .gitignore υποδεικνύει στο Git να τα αγνοεί.

bash
# Παράδειγμα περιεχομένου ενός αρχείου .gitignore
target/
node_modules/
*.log
.env
.DS_Store
Να αγνοηθείΓιατί
node_modules/, target/Ανακατασκευάζονται αυτόματα, ογκώδη
.env, *.keyΜυστικά — ποτέ στο Git!
*.log, *.tmpΠροσωρινά αρχεία χωρίς αξία

Χρυσός κανόνας ασφαλείας: μην κάνετε ποτέ commit κωδικούς πρόσβασης, κλειδιά API ή μυστικά. Μόλις μπει στο ιστορικό Git, ένα μυστικό μένει εκεί — ακόμη και αν διαγραφεί αργότερα. Βάλτε το .env στο .gitignore από την αρχή.

🔧 Μικρή άσκηση — Γράψτε τη γραμμή που πρέπει να προσθέσετε σε ένα .gitignore για να εμποδίσετε το Git να εκδοσιοποιεί το αρχείο μυστικών .env.

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

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


7 — Κουίζ — Τοπικό αποθετήριο και commits

Question 1 : Ποια εντολή μετατρέπει έναν συνηθισμένο φάκελο σε αποθετήριο Git;

a) git start

b) git init

c) git new

d) git create

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

Απάντηση: b) — Το git init δημιουργεί τον υποφάκελο .git/ που περιέχει το ιστορικό και μετατρέπει τον φάκελο σε αποθετήριο.


Question 2 : Ποια είναι η σωστή σειρά των τριών ζωνών του Git;

a) Αποθετήριο → staging → κατάλογος εργασίας

b) Κατάλογος εργασίας → staging → τοπικό αποθετήριο

c) Staging → αποθετήριο → κατάλογος εργασίας

d) Κατάλογος εργασίας → αποθετήριο → staging

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

Απάντηση: b) — Επεξεργάζεστε (κατάλογος εργασίας), προετοιμάζετε με git add (staging) και έπειτα καταγράφετε με git commit (τοπικό αποθετήριο).


Question 3 : Σε τι χρησιμεύει το git add;

a) Να δημιουργήσει ένα commit

b) Να προετοιμάσει αλλαγές στη ζώνη staging

c) Να διαγράψει ένα αρχείο

d) Να στείλει τον κώδικα στο GitHub

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

Απάντηση: b) — Το git add μετακινεί τις αλλαγές από τον κατάλογο εργασίας στη ζώνη staging, πριν από το commit.


Question 4 : Ποιο είναι ένα καλό μήνυμα commit;

a) truc

b) wip

c) Διορθώνει τη συντριβή στην εκκίνηση αν λείπει η διαμόρφωση

d) .

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

Απάντηση: c) — Είναι σαφές, σε προστακτική, και εξηγεί την αλλαγή. Τα υπόλοιπα είναι ασαφή και άχρηστα στο ιστορικό.


Question 5 : Γιατί να χρησιμοποιείτε ένα .gitignore;

a) Για να επιταχύνετε τον υπολογιστή

b) Για να εμποδίσετε το Git να εκδοσιοποιεί ορισμένα αρχεία (προσωρινά, μυστικά, εξαρτήσεις)

c) Για να διαγράψετε το ιστορικό

d) Για να αγνοείτε τα commits

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

Απάντηση: b) — Το .gitignore απαριθμεί τα αρχεία που το Git πρέπει να αγνοεί, ιδίως τα μυστικά (.env) και τους ανακατασκευάσιμους φακέλους (node_modules/).

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


8 — Πρακτική — Το πρώτο σας αποθετήριο

Οδηγία

Δημιουργήστε ένα τοπικό αποθετήριο, προσθέστε ένα αρχείο, αγνοήστε ένα μυστικό αρχείο και κάντε δύο καθαρά commits.


Διόρθωση — Αναμενόμενη ακολουθία εντολών

bash
# 1. Δημιουργία και είσοδος στον φάκελο
mkdir mon-premier-depot
cd mon-premier-depot

# 2. Αρχικοποίηση του αποθετηρίου
git init

# 3. Δημιουργία ενός αρχείου περιεχομένου και ενός .gitignore
echo "# Το έργο μου" > README.md
echo ".env" > .gitignore
echo "SECRET=123" > .env        # αυτό το αρχείο πρέπει να αγνοηθεί

# 4. Επαλήθευση της κατάστασης (το .env ΔΕΝ πρέπει να εμφανίζεται)
git status

# 5. Πρώτο commit
git add README.md .gitignore
git commit -m "Αρχικοποιεί το έργο με README και gitignore"

# 6. Τροποποίηση και έπειτα δεύτερο commit
echo "Περιγραφή του έργου" >> README.md
git add README.md
git commit -m "Συμπληρώνει την περιγραφή στο README"

# 7. Συμβουλευτείτε το ιστορικό
git log --oneline

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

b2c3d4e Συμπληρώνει την περιγραφή στο README
a1b2c3d Αρχικοποιεί το έργο με README και gitignore

Επαληθεύστε ότι το .env δεν εμφανίζεται ποτέ στο git status: αυτή είναι η απόδειξη ότι το .gitignore σας λειτουργεί και ότι το μυστικό σας προστατεύεται.

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


9 — Σύνοψη

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

  1. Τρεις ζώνες: κατάλογος εργασίας → staging (git add) → τοπικό αποθετήριο (git commit).
  2. Το git init δημιουργεί το αποθετήριο (φάκελος .git/).
  3. Ένα commit είναι ένα στιγμιότυπο + ένα μήνυμα, συνδεδεμένο με το γονικό commit.
  4. Καλά μηνύματα: προστακτική, σαφή, ατομικά, που εξηγούν το γιατί.
  5. Το .gitignore προστατεύει τα μυστικά και αποκλείει τα άχρηστα αρχεία.

Η συνέχεια

Μάθημα 07 — Κλάδοι και ιστορικό: εργασία σε πολλές εκδόσεις παράλληλα χωρίς να σπάσετε την κύρια έκδοση.

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


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

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