-
1. Ξεκινώντας με το Git
-
2. Τα θεμελιώδη στοιχεία του Git
-
3. Διακλαδώσεις στο Git
-
4. Το Git στον διακομιστή
- 4.1 Τα πρωτόκολλα
- 4.2 Εγκατάσταση του Git σε διακομιστή
- 4.3 Δημιουργία δημόσιου κλειδιού SSH
- 4.4 Στήσιμο του διακομιστή
- 4.5 Δαίμονες του Git
- 4.6 Έξυπνο HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Επιλογές φιλοξενίας από τρίτους
- 4.10 Ανακεφαλαίωση
-
5. Κατανεμημένο Git
-
6. GitHub
-
7. Εργαλεία του Git
- 7.1 Επιλογή αναθεώρησης
- 7.2 Διαδραστική εργασία με το στάδιο καταχώρισης
- 7.3 stash και clean
- 7.4 Υπογραφή της δουλειάς μας
- 7.5 Αναζήτηση
- 7.6 Η ιστορία ξαναγράφεται
- 7.7 Απομυθοποίηση της reset
- 7.8 Συγχωνεύσεις για προχωρημένους
- 7.9 Rerere
- 7.10 Αποσφαλμάτωση με το Git
- 7.11 Λειτουργικές υπομονάδες
- 7.12 Δεμάτιασμα δεδομένων
- 7.13 Replace
- 7.14 Αποθήκευση διαπιστευτηρίων
- 7.15 Ανακεφαλαίωση
-
8. Εξατομίκευση του Git
-
9. Το Git και άλλα συστήματα
- 9.1 Το Git ως πελάτης
- 9.2 Μετανάστευση στο Git
- 9.3 Ανακεφαλαίωση
-
10. Εσωτερική λειτουργία του Git
- 10.1 Διοχετεύσεις και πορσελάνες
- 10.2 Αντικείμενα του Git
- 10.3 Αναφορές του Git
- 10.4 Πακετάρισμα αρχείων
- 10.5 Τα refspec
- 10.6 Πρωτόκολλα μεταφοράς
- 10.7 Διατήρηση και ανάκτηση δεδομένων
- 10.8 Μεταβλητές περιβάλλοντος
- 10.9 Ανακεφαλαίωση
-
A1. Appendix A: Το Git σε άλλα περιβάλλοντα
- A1.1 Γραφικές διεπαφές
- A1.2 Το Git στο Visual Studio
- A1.3 Git στο Eclipse
- A1.4 Το Git στο Bash
- A1.5 Το Git στο Zsh
- A1.6 Το Git στο Powershell
- A1.7 Ανακεφαλαίωση
-
A2. Appendix B: Ενσωμάτωση του Git στις εφαρμογές μας
- A2.1 Γραμμή εντολών Git
- A2.2 Libgit2
- A2.3 JGit
-
A3. Appendix C: Εντολές Git
- A3.1 Ρύθμιση και διαμόρφωση
- A3.2 Λήψη και δημιουργία έργων
- A3.3 Βασική λήψη στιγμιοτύπων
- A3.4 Διακλάδωση και συγχώνευση
- A3.5 Κοινή χρήση και ενημέρωση έργων
- A3.6 Επιθεώρηση και σύγκριση
- A3.7 Αποσφαλμάτωση
- A3.8 Επιθέματα
- A3.9 Ηλεκτρονικό ταχυδρομείο
- A3.10 Εξωτερικά Συστήματα
- A3.11 Διοίκηση
- A3.12 Εντολές διοχέτευσης
4.2 Το Git στον διακομιστή - Εγκατάσταση του Git σε διακομιστή
Εγκατάσταση του Git σε διακομιστή
Τώρα θα δούμε τη δημιουργία μιας υπηρεσίας Git που θα εκτελεί αυτά τα πρωτόκολλα στον δικό μας διακομιστή.
Note
|
Εδώ θα επιδείξουμε τις εντολές και τα βήματα που απαιτούνται για να κάνουμε βασικές απλοποιημένες εγκαταστάσεις σε έναν διακομιστή σε Linux, αν και είναι επίσης δυνατή η εκτέλεση αυτών των υπηρεσιών σε διακομιστές Mac ή Windows. Η εγκατάσταση ενός διακομιστή παραγωγής στην υποδομή μας προϋποθέτει ασφαλώς διαφορές στα μέτρα ασφαλείας ή τα εργαλεία των λειτουργικών συστημάτων, αλλά αυτό θα μας δώσει τη γενική ιδέα για το τι εμπλέκεται. |
Για να ρυθμίσουμε αρχικά οποιοδήποτε διακομιστή Git, πρέπει να εξάγουμε ένα υπάρχον αποθετήριο σε ένα νέο γυμνό αποθετήριο —ένα αποθετήριο που δεν περιέχει κατάλογο εργασίας.
Αυτό είναι γενικά εύκολο να γίνει.
Για να κλωνοποιήσουμε το αποθετήριό μας και να δημιουργήσουμε ένα νέο γυμνό αποθετήριο, εκτελούμε την εντολή clone
με την επιλογή --bare
.
Συμβατικά, οι γυμνοί κατάλογοι αποθετηρίων τελειώνουν σε .git
, ως εξής:
$ git clone --bare my_project my_project.git
Cloning into bare repository 'my_project.git'...
done.
Θα πρέπει τώρα να έχουμε ένα αντίγραφο των δεδομένων του καταλόγου Git στον κατάλογο my_project.git
.
Αυτό είναι σχεδόν ισοδύναμο με κάτι σαν αυτό:
$ cp -Rf my_project/.git my_project.git
Υπάρχουν μερικές μικροδιαφορές στο αρχείο ρυθμίσεων· αλλά για τον σκοπό μας αυτό δεν είναι σημαντικό. Η παραπάνω εντολή παίρνει το αποθετήριο Git μόνο του, χωρίς κατάλογο εργασίας και δημιουργεί έναν κατάλογο αποκλειστικά για αυτό.
Τοποθέτηση του γυμνού αποθετηρίου σε έναν διακομιστή
Τώρα που έχουμε ένα γυμνό αντίγραφο του αποθετηρίου μας, το μόνο που χρειάζεται να κάνουμε είναι να το βάλουμε σε έναν διακομιστή και να ρυθμίσουμε τα πρωτόκολλά μας.
Ας υποθέσουμε ότι έχουμε δημιουργήσει έναν διακομιστή που ονομάζεται git.example.com
στον οποίο έχουμε πρόσβαση μέσω SSH και θέλουμε να αποθηκεύσουμε όλα τα αποθετήρια Git στον κατάλογο /opt/git
.
Υποθέτοντας ότι το /opt/git
υπάρχει σε αυτόν τον διακομιστή, μπορούμε να ρυθμίσουμε το νέο αποθετήριό μας αντιγράφοντας το γυμνό αποθετήριο:
$ scp -r my_project.git user@git.example.com:/srv/git
Σε αυτό το σημείο, άλλοι χρήστες που έχουν πρόσβαση SSH στον ίδιο διακομιστή ο οποίος έχει πρόσβαση ανάγνωσης στον κατάλογο /opt/git
μπορούν να κλωνοποιήσουν τον αποθετήριό μας τρέχοντας
$ git clone user@git.example.com:/srv/git/my_project.git
Αν ένας χρήστης συνδεθεί με SSH σε έναΝ διακομιστή και έχει δικαίωμα εγγραφής στον κατάλογο /opt/git/my_project.git
, θα έχει αυτόματα δικαίωμα ώθησης.
Το Git θα προσθέσει αυτόματα δικαιώματα εγγραφής σε ομάδες σε ένα αποθετήριο σωστά εάν εκτελέσουμε την εντολή git init
με την επιλογή --shared
.
$ ssh user@git.example.com
$ cd /opt/git/my_project.git
$ git init --bare --shared
Βλέπουμε πόσο εύκολο είναι να πάρουμε ένα αποθετήριο Git, να δημιουργήσουμε μια γυμνή έκδοσή του και να την τοποθετήσουμε σε έναν διακομιστή στον οποίο εμείς και οι συνεργάτες μας έχουμε πρόσβαση μέσω SSH. Τώρα είμαστε έτοιμοι να συνεργαστούμε στο ίδιο έργο.
Είναι σημαντικό να σημειωθεί ότι αυτό είναι κυριολεκτικά το μόνο που χρειάζεται να κάνουμε για να τρέξουμε έναν χρήσιμο διακομιστή Git στον οποίο έχουν πρόσβαση πολλοί χρήστες —απλά προσθέτουμε λογαριασμούς SSH σε έναν διακομιστή και ρίχνουμε ένα γυμνό αποθετήριο κάπου όπου όλοι αυτοί οι χρήστες έχουν πρόσβαση ανάγνωσης/εγγραφής. Είμαστε έτοιμοι —δεν χρειάζεται τίποτα άλλο.
Στις επόμενες ενότητες θα δούμε πώς μπορούμε να επεκταθούμε σε πιο εξεζητημένες ρυθμίσεις. Αυτή η συζήτηση θα περιλαμβάνει τη μη δημιουργία λογαριασμών χρηστών για κάθε χρήστη, την προσθήκη δημόσιας πρόσβασης ανάγνωσης σε αποθετήρια, την εγκατάσταση διαδικτυακών UI και πολλά άλλα. Ωστόσο, ας έχουμε υπόψη ότι για να συνεργαστούμε με άλλους σε ένα ιδιωτικό έργο, το μόνο που χρειαζόμαστε είναι ένας διακομιστής SSH και ένα γυμνό αποθετήριο.
Μικρές εγκαταστάσεις
Εάν είμαστε μια μικρή επιχείρηση ή απλώς δοκιμάζουμε το Git στον οργανισμό μας και έχουμε μόνο λίγους προγραμματιστές, τα πράγματα είναι απλά. Μια από τις πιο περίπλοκες πτυχές της εγκατάστασης ενός διακομιστή Git είναι η διαχείριση των χρηστών. Εάν θέλουμε μερικά αποθετήρια να είναι πρόσβασιμα από ορισμένους χρήστες μόνο-για-ανάγνωση και για ανάγνωση/εγγραφή από άλλους, η πρόσβαση και τα δικαιώματα μπορεί να είναι λίγο πιο δύσκολο να ρυθμιστούν.
Πρόσβαση μέσω SSH
Εάν έχουμε έναν διακομιστή στον οποίο όλοι οι προγραμματιστές μας έχουν ήδη πρόσβαση SSH, είναι γενικά ευκολότερο να δημιουργήσουμε το πρώτο αποθετήριό μας σε αυτόν, επειδή δεν χρειάζεται να κάνουμε σχεδόν καθόλου δουλειά (όπως συζητήθηκε στην προηγούμενη ενότητα). Αν θέλουμε πιο πολύπλοκα είδη δικαιωμάτων ελέγχου πρόσβασης στα αποθετήριά μας, μπορούμε να τα χειριστούμε με τα δικαιώματα συστήματος αρχείων του λειτουργικού συστήματος που τρέχει ο διακομιστής μας.
Εάν θέλουμε να τοποθετήσουμε τα αποθετήριά μας σε έναν διακομιστή που δεν διαθέτει λογαριασμούς για όλα τα μέλη της ομάδας μας για τα οποία θέλουμε να έχουν δικαίωμα εγγραφής, τότε πρέπει να τους δώσουμε πρόσβαση SSH. Αν έχουμε έναν διακομιστή με τον οποίο μπορούμε να τα κάνουμε αυτά, τότε έχουμε ήδη εγκατεστημένο έναν διακομιστή SSH και έτσι έχουμε πρόσβαση στον διακομιστή.
Υπάρχουν μερικοί τρόποι με τους οποίους μπορούμε να δώσουμε πρόσβαση σε όλους στην ομάδα μας.
Ο πρώτος είναι να δημιουργήσουμε λογαριασμούς για όλους, κάτι που είναι απλό, αλλά μπορεί να είναι κουραστικό.
Μπορεί να μην θέλουμε να τρέξουμε το adduser
και να ορίσουμε προσωρινούς κωδικούς πρόσβασης για κάθε χρήστη.
Μια δεύτερη μέθοδος είναι να δημιουργήσουμε έναν μοναδικό χρήστη git στο μηχάνημα, να ζητήσουμε από κάθε χρήστη που θα έχει πρόσβαση εγγραφής να μας στείλει ένα δημόσιο κλειδί SSH και να προσθέσουμε αυτό το κλειδί στο αρχείο ~/.ssh/authorized_keys
του νέου χρήστη git.
Σε αυτό το σημείο, όλοι θα μπορούν να έχουν πρόσβαση σε αυτό το μηχάνημα μέσω του χρήστη git.
Αυτό δεν επηρεάζει τα δεδομένα των υποβολών με κανέναν τρόπο —ο χρήστης SSH που συνδέεται δεν επηρεάζει τις υποβολές που έχουμε καταγράψει.
Ένας άλλος τρόπος είναι να στήσουμε τον διακομιστή SSH ώστρε να ταυτοποιεί μέσω ενός διακομιστή LDAP ή κάποια άλλη κεντρική πηγή ταυτοποίησης που ενδεχομένως έχουμε ήδη ρυθμίσει. Εφόσον ο κάθε χρήστης μπορεί να αποκτήσει πρόσβαση στο κέλυφος, οποιοσδήποτε μηχανισμός ταυτοποίησης SSH που μπορούμε να σκεφτούμε θα πρέπει να λειτουργεί.