-
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.4 Το Git στον διακομιστή - Στήσιμο του διακομιστή
Στήσιμο του διακομιστή
Θα δούμε τώρα τη διαμόρφωση της πρόσβασης SSH από την πλευρά του διακομιστή.
Σε αυτό το παράδειγμα θα χρησιμοποιήσουμε τη μέθοδο authorized_keys
για την ταυτοποίηση των χρηστών.
Υποθέτουμε επίσης ότι τρέχουμε μια τυπική διανομή Linux όπως το Ubuntu.
Καταρχήν, δημιουργούμε έναν χρήστη git
και έναν κατάλογο .ssh
για αυτόν τον χρήστη.
$ sudo adduser git
$ su git
$ cd
$ mkdir .ssh && chmod 700 .ssh
$ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys
Στη συνέχεια, πρέπει να προσθέσουμε δημόσια κλειδιά SSH για προγραμματιστές στο αρχείο authorized_keys
του χρήστη git
.
Ας υποθέσουμε ότι έχουμε ορισμένα αξιόπιστα δημόσια κλειδιά και τα έχουμε αποθηκεύσει σε προσωρινά αρχεία.
Υπενθυμίζουμε ότι τα δημόσια κλειδιά μοιάζουν με αυτό:
$ cat /tmp/id_rsa.john.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCB007n/ww+ouN4gSLKssMxXnBOvf9LGt4L
ojG6rs6hPB09j9R/T17/x4lhJA0F3FR1rP6kYBRsWj2aThGw6HXLm9/5zytK6Ztg3RPKK+4k
Yjh6541NYsnEAZuXz0jTTyAUfrtU3Z5E003C4oxOj6H0rfIF1kKI9MAQLMdpGW1GYEIgS9Ez
Sdfd8AcCIicTDWbqLAcU4UpkaX8KyGlLwsNuuGztobF8m72ALC/nLF6JLtPofwFBlgc+myiv
O7TCUSBdLQlgMVOFq1I2uPWQOkOWQAHukEOmfjy2jctxSDBQ220ymjaNsHT4kgtZg2AYYgPq
dAv8JggJICUvax2T9va5 gsg-keypair
Απλά τα συνάπτουμε στο τέλος του αρχείου authorized_keys
του χρήστη git
στον κατάλογο .ssh
του χρήστη:
$ cat /tmp/id_rsa.john.pub >> ~/.ssh/authorized_keys
$ cat /tmp/id_rsa.josie.pub >> ~/.ssh/authorized_keys
$ cat /tmp/id_rsa.jessica.pub >> ~/.ssh/authorized_keys
Τώρα, μπορούμε να δημιουργήσουμε ένα κενό αποθετήριο για αυτούς τους προγραμματιστές, τρέχοντας git init
με την επιλογή --bare
, η οποία αρχικοποιεί το αποθετήριο χωρίς κατάλογο εργασίας:
$ cd /opt/git
$ mkdir project.git
$ cd project.git
$ git init --bare
Initialized empty Git repository in /opt/git/project.git/
Στη συνέχεια, ο John, ο Josie ή η Jessica μπορούν να ωθήσουν την πρώτη έκδοση του έργου τους σε αυτό το αποθετήριο, προσθέτοντάς το ως απομακρυσμένο και ωθώντας έναν κλάδο.
Να σημειωθεί ότι κάποιος πρέπει να μπαίνει στο κέλυφος στο συγκεκριμένο μηχάνημα και να δημιουργεί ένα γυμνό αποθετήριο κάθε φορά που θέλουμε να προσθέσουμε ένα έργο.
Ας χρησιμοποιήσουμε το gitserver
ως το hostname του διακομιστή στον οποίο έχουμε δημιουργήσει τον χρήστη git
και το αποθετήριο.
Αν το τρέξουμε εσωτερικά και έχουμε ρυθμίσει το DNS για το gitserver
να δείχνει σε εκείνον τον διακομιστή, τότε μπορούμε να χρησιμοποιήσουμε τις εντολές σχεδόν όπως είναι (με την προϋπόθεση ότι το myproject
είναι ένα υπάρχον έργο με αρχεία):
# on Johns computer
$ cd myproject
$ git init
$ git add .
$ git commit -m 'initial commit'
$ git remote add origin git@gitserver:/opt/git/project.git
$ git push origin master
Σε αυτό το σημείο, οι άλλοι μπορούν να κλωνοποιήσουν το αποθετήριο και και να ωθήσουν αλλαγές εξίσου εύκολα:
$ git clone git@gitserver:/opt/git/project.git
$ cd project
$ vim README
$ git commit -am 'fix for the README file'
$ git push origin master
Με αυτήν τη μέθοδο, μπορούμε να ξεκινήσουμε γρήγορα έναν διακομιστή Git ανάγνωσης/εγγραφής για μερικούς προγραμματιστές.
Θα πρέπει να σημειώσουμε ότι αυτήν τη στιγμή όλοι αυτοί οι χρήστες μπορούν επίσης να συνδεθούν στον διακομιστή και να ανοίξουν ένα κέλυφος ως χρήστης git
.
Εάν θέλουμε να θέσουμε περιορισμό σε αυτό, θα πρέπει να αλλάξουμε το κέλυφος σε κάτι άλλο στο αρχείο passwd
.
Μπορούμε εύκολα να περιορίσουμε τον χρήστη git
να κάνει μόνο δραστηριότητες Git με ένα περιορισμένο εργαλείο κελύφους που ονομάζεται git-shell
και διατίθεται στο Git.
Αν ορίσουμε αυτό ως το κέλυφος σύνδεσης του χρήστη git
, τότε ο χρήστης git
δεν μπορεί να έχει κανονική πρόσβαση μέσω του κελύφους στον διακομιστή μας.
Για να χρησιμοποιήσουμε το git-shell
πρέπει να αντικαταστήσουμε το κέλυφος εισόδου του χρήστη από bash
ή csh
σε git-shell
.
Για να το κάνουμε αυτό, πρέπει πρώτα να προσθέσουμε το git-shell
στο /etc/shells
αν δεν υπάρχει ήδη:
$ cat /etc/shells # δες αν το `git-shell` βρίσκεται ήδη εκεί. Αν όχι...
$ which git-shell # επιβεβαίωσε ότι το git-shell είναι εγκατεστημένο στο σύστημα
$ sudo vim /etc/shells # και πρόσθεσε τη διαδρομή για το git-shell από την προηγούμενη εντολή
Τώρα μπορούμε να επεξεργαστούμε το κέλυφος για έναν χρήστη χρησιμοποιώντας chsh <όνομα_χρήστη>
:
$ sudo chsh git # και εισήγαγε τη διαδρομή για το git-shell, συνήθως: /usr/bin/git-shell
Τώρα, ο χρήστης git
μπορεί να χρησιμοποιήσει μόνο τη σύνδεση SSH για να ωθήσει και να έλξει αποθετήρια Git και δεν μπορεί να ανοίξει ένα κέλυφος στο μηχάνημα.
Αν προσπαθήσουμε, θα δούμε μια αποτυχία σύνδεσης όπως η παρακάτω:
$ ssh git@gitserver
fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.
Connection to gitserver closed.
Τώρα οι εντολές δικτύου του Git θα λειτουργούν ακόμα μια χαρά, αλλά οι χρήστες δεν θα μπορούν να ανοίξουν ένα κέλυφος.
Όπως αναφέρει και η έξοδος της εντολής, μπορούμε επίσης να ρυθμίσουμε έναν κατάλογο στον αρχικό κατάλογο του χρήστη git
που προσαρμόζει ελαφρώς την εντολή git-shell
.
Για παράδειγμα, μπορούμε να περιορίσουμε τις εντολές Git που δέχεται ο διακομιστής ή να προσαρμόσουμε το μήνυμα που βλέπουν οι χρήστες αν προσπαθούν να κάνουν SSH σε αυτό.
Τρέχουμε git shell help
για περισσότερες πληροφορίες σχετικά με την προσαρμογή του κελύφους στις προτιμήσεις μας.