Αποθετήριο Git — είναι η αποθήκη του πηγαίου κώδικα του έργου, όπου το Git παρακολουθεί κάθε αλλαγή αρχείων καθ' όλη τη διάρκεια της ανάπτυξης. Το αποθετήριο περιέχει το πλήρες ιστορικό των commit, των κλάδων και των ετικετών, επιτρέποντας στους προγραμματιστές να συνεργάζονται στον κώδικα. Σύμφωνα με στοιχεία του Git, 2024, το αποθετήριο αποτελεί τη βάση κάθε συστήματος ελέγχου εκδόσεων και χρησιμοποιείται σε εκατομμύρια έργα παγκοσμίως.
Κύρια σημεία
Αποθετήριο Git — είναι μια δομή δεδομένων στην οποία το σύστημα ελέγχου εκδόσεων αποθηκεύει μεταδεδομένα και αντικείμενα που περιγράφουν το ιστορικό αλλαγών των αρχείων του έργου. Όταν ένας προγραμματιστής αρχικοποιεί ένα αποθετήριο με την εντολή git init, το Git δημιουργεί έναν κρυφό φάκελο .git στη ρίζα του έργου.
Μέσα σε αυτόν τον φάκελο βρίσκονται όλα τα αντικείμενα, οι αναφορές και τα αρχεία ρυθμίσεων που είναι απαραίτητα για τη λειτουργία του συστήματος. Το αποθετήριο δεν είναι δεσμευμένο σε συγκεκριμένη τοποθεσία — ο προγραμματιστής μπορεί να το δημιουργήσει τοπικά και στη συνέχεια να το συνδέσει με έναν απομακρυσμένο διακομιστή.
Το Git χρησιμοποιεί το μοντέλο του κατανεμημένου αποθετηρίου: κάθε συμμετέχων στο έργο έχει ένα πλήρες αντίγραφο του ιστορικού στον υπολογιστή του. Αυτό σημαίνει ότι οι περισσότερες λειτουργίες — commit, προβολή ιστορικού, δημιουργία κλάδων — εκτελούνται τοπικά χωρίς πρόσβαση στον διακομιστή.
Σύμφωνα με τα έγγραφα του Git, η κατανεμημένη αρχιτεκτονική καθιστά το σύστημα ανθεκτικό σε βλάβες: εάν ο διακομιστής καταρρεύσει, οποιοδήποτε τοπικό αποθετήριο μπορεί να γίνει πηγή για την αποκατάσταση του πλήρους ιστορικού του έργου.
Τοπικό αποθετήριο — είναι ένα αντίγραφο του έργου στον υπολογιστή του προγραμματιστή. Περιέχει ολόκληρο το ιστορικό commit, κλάδων και ετικετών και επιτρέπει την εκτέλεση λειτουργιών commit, branch, merge και rebase χωρίς σύνδεση δικτύου.
Απομακρυσμένο αποθετήριο φιλοξενείται σε έναν διακομιστή και χρησιμεύει ως σημείο συγχρονισμού για όλα τα μέλη της ομάδας. Οι προγραμματιστές στέλνουν τις αλλαγές τους με την εντολή git push και λαμβάνουν αλλαγές άλλων με την εντολή git pull.
Η σύνδεση μεταξύ τοπικού και απομακρυσμένου αποθετηρίου ρυθμίζεται μέσω του remote origin — της διεύθυνσης URL του διακομιστή που αποθηκεύεται στη ρύθμιση του Git. Ένα τοπικό αποθετήριο μπορεί να συνδεθεί με πολλαπλά απομακρυσμένα αποθετήρια, κάτι που είναι χρήσιμο κατά την εργασία με forks.
Το κύριο πλεονέκτημα αυτού του μοντέλου — ο προγραμματιστής μπορεί να εργάζεται στον κώδικα εκτός σύνδεσης και να συγχρονίζει τις αλλαγές μόνο όταν είναι έτοιμος να στείλει το αποτέλεσμα.
| Χαρακτηριστικό | Τοπικό | Απομακρυσμένο |
|---|---|---|
| Τοποθεσία | Στον υπολογιστή του προγραμματιστή | Σε διακομιστή (GitHub, GitLab) |
| Πρόσβαση χωρίς δίκτυο | Πλήρης πρόσβαση σε όλες τις λειτουργίες | Μη διαθέσιμο χωρίς σύνδεση |
| Συγχρονισμός | Push/Pull με απομακρυσμένο | Δέχεται push από τοπικά |
| Αντίγραφο ασφαλείας | Δεν προστατεύεται από απώλεια δεδομένων | Αποθηκεύεται σε διακομιστή με αντίγραφα ασφαλείας |
Το μοντέλο αποθήκευσης του Git διαφέρει ριζικά από άλλα συστήματα ελέγχου εκδόσεων. Αντί να αποθηκεύει μια λίστα αλλαγών (δέλτα) μεταξύ εκδόσεων, το Git αποθηκεύει πλήρη στιγμιότυπα όλων των αρχείων του έργου τη στιγμή κάθε commit.
Κάθε αντικείμενο στο αποθετήριο αναγνωρίζεται από ένα μοναδικό SHA-1 hash μήκους 40 χαρακτήρων. Εάν το περιεχόμενο ενός αρχείου δεν έχει αλλάξει μεταξύ commit, το Git δεν δημιουργεί νέο αντικείμενο αλλά επαναχρησιμοποιεί το υπάρχον — αυτό εξοικονομεί χώρο.
Το Git χρησιμοποιεί τέσσερις τύπους αντικειμένων: blob (περιεχόμενο αρχείου), tree (δομή καταλόγου), commit (στιγμιότυπο με μεταδεδομένα) και tag (ονομασμένη αναφορά σε commit). Όλα τα αντικείμενα αποθηκεύονται στον φάκελο .git/objects.
Σύμφωνα με το Git Internals, το μοντέλο αντικειμένων του Git εξασφαλίζει την ακεραιότητα των δεδομένων: οποιαδήποτε αλλαγή στο περιεχόμενο ενός αρχείου οδηγεί σε νέο hash, καθιστώντας αδύνατη την απαρατήρητη τροποποίηση του ιστορικού.
Ο φάκελος .git — είναι η καρδιά του αποθετηρίου. Χωρίς αυτόν, το Git δεν μπορεί να παρακολουθεί αλλαγές και ένας συνηθισμένος κατάλογος παραμένει απλώς μια συλλογή αρχείων. Η κατανόηση της δομής αυτού του φακέλου βοηθά στη διάγνωση προβλημάτων με το αποθετήριο.
Το αρχείο HEAD αξίζει ιδιαίτερης προσοχής. Σε κανονική κατάσταση περιέχει μια συμβολική αναφορά σε έναν κλάδο, για παράδειγμα ref: refs/heads/main. Σε κατάσταση detached HEAD δείχνει απευθείας σε ένα commit — αυτό σημαίνει ότι τα νέα commit δεν θα είναι συνδεδεμένα με κανέναν κλάδο.
Η εργασία με αποθετήριο Git περιλαμβάνει ένα σύνολο βασικών λειτουργιών που εκτελεί ο προγραμματιστής καθημερινά. Κάθε λειτουργία αλλάζει την κατάσταση του αποθετηρίου, προσθέτοντας νέα αντικείμενα ή μετακινώντας αναφορές.
Οι λειτουργίες push και pull — είναι οι μόνες που απαιτούν σύνδεση με τον απομακρυσμένο διακομιστή. Όλες οι άλλες λειτουργίες εκτελούνται εξ ολοκλήρου τοπικά, γεγονός που εξασφαλίζει υψηλή ταχύτητα εργασίας ακόμη και με μεγάλο ιστορικό.
Κάθε αρχείο στο αποθετήριο περνά από τέσσερις καταστάσεις: untracked (δεν παρακολουθείται), modified (τροποποιημένο), staged (προετοιμασμένο) και committed (καταχωρημένο). Το Git παρακολουθεί μόνο αρχεία που έχουν προστεθεί ρητά μέσω git add ή βρίσκονται ήδη στο ιστορικό commit.
Η κατανόηση αυτού του μοντέλου — το κλειδί για αποτελεσματική εργασία με το Git. Ο προγραμματιστής μπορεί να προετοιμάσει επιλεκτικά για commit μόνο ένα μέρος των τροποποιημένων αρχείων, δημιουργώντας λογικά ολοκληρωμένα commit με σαφείς περιγραφές.
Τα απομακρυσμένα αποθετήρια συνήθως φιλοξενούνται σε εξειδικευμένες πλατφόρμες που παρέχουν διεπαφή web, σύστημα διαχείρισης πρόσβασης και πρόσθετα εργαλεία για συνεργατική ανάπτυξη.
Η επιλογή πλατφόρμας εξαρτάται από το μέγεθος της ομάδας, τις απαιτήσεις απορρήτου και τις απαραίτητες ενσωματώσεις. Για ανάπτυξη εφαρμογών κινητών, συχνά επιλέγεται το GitHub λόγω της ευρείας υποστήριξης της κοινότητας και της ενσωμάτωσης με εργαλεία CI/CD για iOS και Android.
Ας εξετάσουμε ένα πρακτικό σενάριο: ένας προγραμματιστής κλωνοποιεί ένα υπάρχον αποθετήριο, δημιουργεί έναν νέο κλάδο, κάνει αλλαγές και τις στέλνει στον διακομιστή. Κάθε εντολή παρουσιάζει την εργασία με διαφορετικά στοιχεία του αποθετηρίου.
# Κλωνοποίηση απομακρυσμένου αποθετηρίου
git clone https://github.com/user/mobile-app.git
# Μετάβαση στον κατάλογο του έργου
cd mobile-app
# Δημιουργία νέου κλάδου feature και εναλλαγή σε αυτόν
git checkout -b feature/auth
# Έλεγχος κατάστασης τροποποιημένων αρχείων
git status
# Προσθήκη όλων των αλλαγών στο staging area
git add .
# Δημιουργία commit με περιγραφή
git commit -m "Add authentication module"
# Αποστολή αλλαγών στο απομακρυσμένο αποθετήριο
git push origin feature/auth
Η εντολή git status — μία από τις πιο χρήσιμες στην καθημερινή εργασία. Δείχνει ποια αρχεία έχουν τροποποιηθεί, ποια είναι προετοιμασμένα για commit και ποια δεν παρακολουθούνται καθόλου από το Git.
Για την ανάλυση του ιστορικού του αποθετηρίου χρησιμοποιείται η εντολή git log με διάφορες σημαίες μορφοποίησης. Εμφανίζει τη χρονολογία των commit, τους συντάκτες τους, ημερομηνίες και αναγνωριστικά SHA-1.
# Προβολή ιστορικού με οπτικοποίηση γραφήματος κλάδων
git log --oneline --graph --all
# Προβολή αλλαγών σε συγκεκριμένο commit
git show a1b2c3d
# Σύγκριση τρέχουσας κατάστασης με το τελευταίο commit
git diff HEAD
# Προβολή ιστορικού συγκεκριμένου αρχείου
git log --follow src/MainActivity.kt
Η σημαία --graph εμφανίζει ένα γράφημα ASCII των διακλαδώσεων, το οποίο είναι ιδιαίτερα χρήσιμο σε αποθετήρια με ενεργή εργασία σε πολλαπλούς κλάδους. Για έργα κινητών με συχνές εκδόσεις, το οπτικό γράφημα βοηθά στη γρήγορη αξιολόγηση της δομής ανάπτυξης.
Συχνές Ερωτήσεις
Αποθετήριο — είναι μια τεχνική αποθήκη κώδικα με ιστορικό αλλαγών. Έργο — είναι μια ευρύτερη έννοια που περιλαμβάνει το αποθετήριο, το σύστημα διαχείρισης εργασιών, την τεκμηρίωση και τις διαδικασίες ανάπτυξης. Ένα έργο μπορεί να περιέχει πολλαπλά αποθετήρια.
Δημιουργήστε ένα νέο αποθετήριο μέσω της web διεπαφής του GitHub πατώντας το κουμπί New. Καθορίστε όνομα, περιγραφή και επίπεδο πρόσβασης. Στη συνέχεια κλωνοποιήστε το αποθετήριο στον τοπικό υπολογιστή ή συνδέστε ένα υπάρχον τοπικό αποθετήριο μέσω git remote add origin.
Εάν το απομακρυσμένο αποθετήριο έχει διαγραφεί από τον διακομιστή, αλλά τουλάχιστον ένας προγραμματιστής έχει τοπικό αντίγραφο, το αποθετήριο μπορεί να αποκατασταθεί. Αρκεί να δημιουργήσετε ένα νέο απομακρυσμένο αποθετήριο και να εκτελέσετε git push --force από το τοπικό αντίγραφο με ολόκληρο το ιστορικό.
Fork — είναι ένα αντίγραφο του αποθετηρίου κάποιου άλλου στον λογαριασμό σας. Λαμβάνετε ένα πλήρες αντίγραφο του ιστορικού και μπορείτε να κάνετε οποιεσδήποτε αλλαγές χωρίς να επηρεάζετε το πρωτότυπο. Τα forks χρησιμοποιούνται για συμμετοχή σε έργα ανοιχτού κώδικα μέσω Pull Request.
Χρησιμοποιήστε το git gc για συμπίεση αντικειμένων και αφαίρεση μη προσβάσιμων δεδομένων. Αφαιρέστε μεγάλα αρχεία από το ιστορικό μέσω git filter-branch ή git filter-repo. Για έργα με δυαδικά αρχεία, εξετάστε το Git LFS (Large File Storage).
Σύνοψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης