-
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 Αποθέματα και Καθαρισμός
- 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 στο Visual Studio Code
- A1.4 Git στο IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine
- A1.5 Git στο Sublime Text
- A1.6 Το Git στο Bash
- A1.7 Το Git στο Zsh
- A1.8 Το Git στο Powershell
- A1.9 Ανακεφαλαίωση
-
A2. Appendix B: Ενσωμάτωση του Git στις εφαρμογές μας
- A2.1 Γραμμή εντολών Git
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
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.
|
Note
|
Πολλά από όσα περιγράφονται εδώ, μπορείτε να τα αυτοματοποιήσετε με την εντολή |
Καταρχάς, δημιουργούμε ένα χρήστη 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 /srv/git
$ mkdir project.git
$ cd project.git
$ git init --bare
Initialized empty Git repository in /srv/git/project.git/
Στη συνέχεια, ο Τζον, η Τζόσι ή η Τζέσικα μπορούν να ωθήσουν την πρώτη έκδοση του έργου τους σε αυτό το αποθετήριο, προσθέτοντάς το ως απομακρυσμένο και ωθώντας έναν κλάδο.
Σημειώστε ότι κάποιος πρέπει να μπαίνει στο κέλυφος στο συγκεκριμένο μηχάνημα και να δημιουργεί ένα γυμνό αποθετήριο κάθε φορά που θέλουμε να προσθέσουμε ένα έργο.
Ας χρησιμοποιήσουμε το gitserver ως το hostname του διακομιστή στον οποίο έχουμε δημιουργήσει τον χρήστη git και το αποθετήριο.
Αν το τρέξουμε εσωτερικά και έχουμε ρυθμίσει το DNS για το gitserver να δείχνει σε εκείνον τον διακομιστή, τότε μπορούμε να χρησιμοποιήσουμε τις εντολές σχεδόν όπως είναι (με την προϋπόθεση ότι το myproject είναι ένα υπάρχων έργο με αρχεία):
# on John's computer
$ cd myproject
$ git init
$ git add .
$ git commit -m 'Initial commit'
$ git remote add origin git@gitserver:/srv/git/project.git
$ git push origin master
Σε αυτό το σημείο, όλοι οι άλλοι μπορούν να κλωνοποιήσουν το αποθετήριο και να ωθήσουν αλλαγές εξίσου εύκολα:
$ git clone git@gitserver:/srv/git/project.git
$ cd project
$ vim README
$ git commit -am 'Fix for README file'
$ git push origin master
Με αυτή τη μέθοδο, μπορούμε να ξεκινήσουμε γρήγορα έναν διακομιστή Git ανάγνωσης/εγγραφής για μερικούς προγραμματιστές.
Σημειώνουμε ότι αυτή τη στιγμή όλοι αυτοί οι χρήστες μπορούν επίσης να συνδεθούν στον διακομιστή και να ανοίξουν ένα κέλυφος ως χρήστης “git”.
Εάν δεν θέλουμε να συμβαίνει αυτό, θα πρέπει να αλλάξουμε το κέλυφος σε κάτι άλλο στο αρχείο /etc/passwd.
Μπορούμε να περιορίσουμε εύκολα τον χρήστη git ώστε να κάνει μόνο δραστηριότητες Git με ένα εργαλείο περιορισμένου κελύφους που ονομάζεται git-shell και διατίθεται στο Git.
Αν ορίσουμε αυτό ως το κέλυφος σύνδεσης του χρήστη git, τότε ο χρήστης git δεν μπορεί να έχει κανονική πρόσβαση μέσω του κελύφους στον διακομιστή σας.
Για να το χρησιμοποιήσουμε, καθορίζουμε git-shell αντί για bash ή csh για το κέλυφος σύνδεσης του χρήστη.
Για να συμβεί αυτό, πρέπει προηγουμένως να προσθέσουμε το git-shell στο /etc/shells αν δεν υπάρχει ήδη:
$ cat /etc/shells # see if git-shell is already in there. If not...
$ which git-shell # make sure git-shell is installed on your system.
$ sudo -e /etc/shells # and add the path to git-shell from last command
Τώρα μπορούμε να επεξεργαστούμε το κέλυφος για έναν χρήστη χρησιμοποιώντας chsh <username> -s <shell>:
$ sudo chsh git -s $(which 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.
Σε αυτό το σημείο, οι χρήστες ακόμα μπορούν να χρησιμοποιήσουν πρόωθηση θύρας SSH ώστε να αποκτήσουν πρόσβαση σε οποιονδήποτε host μπορεί να φτάσει ο διακομιστής Git.
Αν δεν θέλουμε να γίνεται αυτό, μπορούμε να επεξεργαστούμε το αρχείο authorized_keys και να γράψουμε πριν από κάθε κλειδί που θέλουμε να περιορίσουμε το εξής
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty
Το αποτέλεσμα πρέπει να μοιάζει με κάτι σαν αυτό:
$ cat ~/.ssh/authorized_keys
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQCB007n/ww+ouN4gSLKssMxXnBOvf9LGt4LojG6rs6h
PB09j9R/T17/x4lhJA0F3FR1rP6kYBRsWj2aThGw6HXLm9/5zytK6Ztg3RPKK+4kYjh6541N
YsnEAZuXz0jTTyAUfrtU3Z5E003C4oxOj6H0rfIF1kKI9MAQLMdpGW1GYEIgS9EzSdfd8AcC
IicTDWbqLAcU4UpkaX8KyGlLwsNuuGztobF8m72ALC/nLF6JLtPofwFBlgc+myivO7TCUSBd
LQlgMVOFq1I2uPWQOkOWQAHukEOmfjy2jctxSDBQ220ymjaNsHT4kgtZg2AYYgPqdAv8JggJ
ICUvax2T9va5 gsg-keypair
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQDEwENNMomTboYI+LJieaAY16qiXiH3wuvENhBG...
Τώρα οι εντολές δικτύου του Git θα λειτουργούν ακόμα μια χαρά, αλλά οι χρήστες δεν θα μπορούν να ανοίξουν κάποιο κέλυφος.
Όπως αναφέρει και η έξοδος της εντολής, μπορούμε επίσης να ρυθμίσουμε έναν κατάλογο στον αρχικό κατάλογο του χρήστη git που προσαρμόζει ελαφρώς την εντολή git-shell.
Για παράδειγμα, μπορούμε να περιορίσουμε τις εντολές Git που μπορεί να δέχεται ο διακομιστής ή να προσαρμόσουμε το μήνυμα που βλέπουν οι χρήστες αν προσπαθούν να κάνουν SSH με αυτόν τον τρόπο.
Εκτελούμε git shell help για περισσότερες πληροφορίες σχετικά με την προσαρμογή του κελύφους στις προτιμήσεις σας.