-
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.6 Το Git στον διακομιστή - Έξυπνο HTTP
Έξυπνο HTTP
Έχουμε πλέον ταυτοποιημένη πρόσβαση μέσω SSH και μη-ταυτοποιημένη πρόσβαση μέσω του git://
, αλλά υπάρχει και ένα πρωτόκολλο που μπορεί να τα κάνει και τα δύο ταυτόχρονα.
Η εγκατάσταση του έξυπνου HTTP βασικά απλά ενεργοποιεί ένα script CGI, που παρέχεται με τον Git και ονομάζεται git-http-backend
, στον διακομιστή. (((εντολές git, http-backend)
Αυτό το CGI θα διαβάσει τη διαδρομή και τις κεφαλίδες που θα σταλούν με git fetch
'ή git push
σε μια διεύθυνση URL HTTP και θα καθορίσει εάν ο πελάτης μπορεί να επικοινωνήσει μέσω HTTP (κάτι που ισχύει για κάθε πελάτη από την έκδοση 1.6.6 και μετά).
Αν το CGI διαπιστώσει ότι ο πελάτης είναι “έξυπνος”, θα επικοινωνήσει “έξυπνα” μαζί του, αλλιώς θα επανέλθει στη χαζή συμπεριφορά (συνεπώς έχει προς-τα-πίσω συμβατότητα για ανάγνωσεις με τους παλαιότερους πελάτες).
Ας δούμε μία πολύ βασική ρύθμιση. Θα υποθέσουμε ότι ο διακομιστής CGI είναι Apache. Αν δεν έχουμε Apache, μπορούμε να το κάνουμε σε ένα κουτί Linux με κάτι σαν αυτό:
$ sudo apt-get install apache2 apache2-utils
$ a2enmod cgi alias env
Αυτό επιτρέπει επίσης τις λειτουργικές μονάδες (modules) mod_cgi
, mod_alias
και mod_env
, που είναι απαραίτητες για να λειτουργήσει σωστά το παρακάτω.
Στη συνέχεια πρέπει να προσθέσουμε κάποια πράγματα στις ρυθμίσεις του Apache για να εκτελέσουμε το git-http-backend
ως τον χειριστή για ο,τιδήποτε μπαίνει στη διαδρομή /git
του διακομιστή web μας.
SetEnv GIT_PROJECT_ROOT /opt/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/
Εάν παραλείψουμε τη μεταβλητή περιβάλλοντος (environment variable) GIT_HTTP_EXPORT_ALL
, τότε το Git θα προσφέρει μόνο σε μη-ταυτοποιημένους πελάτες τα αποθετήρια που περιέχουν το αρχείο` git-daemon-export-ok
, ακριβώς όπως ο δαίμονας Git.
Στη συνέχεια θα πρέπει να πούμε στο Apache να επιτρέψει αιτήματα σε αυτήν τη διαδρομή με κάτι σαν αυτό:
<Directory "/usr/lib/git-core*">
Options ExecCGI Indexes
Order allow,deny
Allow from all
Require all granted
</Directory>
Τέλος, θα θελήσουμε να κάνουμε τις εγγραφές να πιστοποιούνται με κάποιον τρόπο, πιθανώς με ένα μπλοκ Auth όπως αυτό:
<LocationMatch "^/git/.*/git-receive-pack$">
AuthType Basic
AuthName "Git Access"
AuthUserFile /opt/git/.htpasswd
Require valid-user
</LocationMatch>
Αυτό θα απαιτήσει τη δημιουργία ενός αρχείου .htaccess
που θα περιέχει τους κωδικούς πρόσβασης όλων των έγκυρων χρηστών.
Ακολουθεί ένα παράδειγμα προσθήκης ενός χρήστη schacon
στο αρχείο:
$ htdigest -c /opt/git/.htpasswd "Git Access" schacon
Υπάρχουν πάρα πολλοί τρόποι με τους οποίους μπορούμε να ζητήσουμε από τον Apache να ταυτοποιεί χρήστες, θα πρέπει να επιλέξουμε έναν και να τον υλοποιήσουμε. Αυτό είναι απλά το απλούστερο παράδειγμα που μπορέσαμε να βρούμε. Είναι σχεδόν βέβαιο ότι θα θέλήσουμε να το εγκαταστήσουμε πάνω από SSL, ώστε όλα αυτά τα δεδομένα να είναι κρυπτογραφημένα.
Δεν θέλουμε να μπούμε σε μεγάλο βάθος στις ειδικότερες ρυθμίσεις του Apache, καθώς ενδεχομένως θα μπορούσαμε να χρησιμοποιούμε διαφορετικό διακομιστή ή να έχουμε διαφορετικές ανάγκες ταυτοποίησης.
Η βασική ιδέα είναι ότι το Git έρχεται με ένα CGI που ονομάζεται git-http-backend
που όταν καλείται θα κάνει όλες τις διαπραγματεύσεις για αποστολή και λήψη δεδομένων μέσω HTTP.
Δεν υλοποιεί το ίδιο τον έλεγχο ταυτότητα, αλλά αυτό μπορεί εύκολα να ελεγχθεί στο επίπεδο του διακομιστή web που τον καλεί.
Μπορούμε να κάνουμε τα παραπάνω με σχεδόν οποιοδήποτε διακομιστή web με δυνατότητα CGI, οπότε μπορούμε να χρησιμοποιήσουμε αυτόν που γνωρίζουμε καλύτερα.
Note
|
Περισσότερες πληροφορίες σχετικά με τη ρύθμιση της ταυτοποίησης στον Apache, υπάρχουν στην τεκμηρίωση του Apache στην http://httpd.apache.org/docs/current/howto/auth.html |