Git
Chapters ▾ 2nd Edition

A1.1 Appendix A: Το Git σε άλλα περιβάλλοντα - Γραφικές διεπαφές

Σε αυτό το βιβλίο, έχουμε μάθει πολλά για τον τρόπο χρήσης του Git στη γραμμή εντολών. Μπορούμε να εργαστούμε με τοπικά αρχεία, να συνδέσουμε το αποθετήριό μας με άλλους μέσω ενός δικτύου και να εργαστούμε αποτελεσματικά με άλλους. Αλλά η ιστορία δεν τελειώνει εκεί. Το Git χρησιμοποιείται συνήθως ως μέρος ενός μεγαλύτερου οικοσυστήματος και το τερματικό δεν είναι πάντα ο καλύτερος τρόπος για να εργαστούμε μαζί του. Τώρα θα ρίξουμε μια ματιά σε μερικά από τα άλλα είδη περιβάλλοντος όπου το Git μπορεί να είναι χρήσιμο και πώς άλλες εφαρμογές (συμπεριλαμβανομένων και των δικών μας) λειτουργούν μαζί με το Git.

Γραφικές διεπαφές

Το εγγενές περιβάλλον του Git είναι το τερματικό. Νέες λειτουργίες εμφανίζονται πρώτα εκεί και μόνο στη γραμμή εντολών υπάρχει η πλήρης δύναμη του Git εντελώς στη διάθεσή μας. Αλλά το απλό κείμενο δεν είναι η καλύτερη επιλογή για όλες τις εργασίες· μερικές φορές μια οπτική αναπαράσταση είναι αυτό που χρειαζόμαστε και ορισμένοι χρήστες είναι πολύ πιο άνετοι με μια διεπαφή point-and-click.

Είναι σημαντικό να σημειωθεί ότι διαφορετικές διεπαφές είναι κομμένες και ραμμένες με διαφορετικές ροές εργασάις. Μερικοί πελάτες εκθέτουν μόνο ένα προσεκτικά επιλεγμένο υποσύνολο λειτουργικότητας Git, προκειμένου να υποστηρίξουν έναν συγκεκριμένο τρόπο εργασίας που ο συγγραφέας θεωρεί αποτελεσματικό. Από αυτήν τη σκοπιά, κανένα από αυτά τα εργαλεία δεν μπορεί να καλείται “καλύτερο” από οποιοδήποτε άλλο, είναι απλά πιο κατάλληλο για τον σκοπό του. Επίσης, ας σημειωθεί ότι δεν υπάρχει τίποτα που οι γραφικές διεπαφές μπορούν να κάνουν αλλά δεν μπορεί να κάνει το περιβάλλον της γραμμής εντολών· η γραμμή εντολών εξακολουθεί να είναι το περιβάλλον στο οποίο έχουμε τη μεγαλύτερη δύναμη και έλεγχο όταν εργαζόμαστε με τα αποθετήριά μας.

gitk και git-gui

Όταν εγκαθιστάμε το Git, παίρνουμε επίσης τα γραφικά του εργαλεία, gitk και git-gui.

Το gitk είναι ένα γραφικό πρόγραμμα προβολής ιστορικού. Μπορούμε να το σκεφτούμε σαν ένα ισχυρό κέλυφος GUI πάνω από τα git log και git grep. Αυτό είναι το εργαλείο που χρησιμοποιούμε όταν προσπαθούμε να βρούμε κάτι που συνέβη στο παρελθόν ή να οπτικοποιήσουμε το ιστορικό του έργου μας.

Ο πιο εύκολος τρόπος να καλέσουμε το Gitk είναι από τη γραμμή εντολών. Απλά κάνουμε cd σε ένα αποθετήριο Git και πληκτρολογούμε:

$ gitk [git log options]

Το Gitk δέχεται πολλές επιλογές στη γραμμή εντολών, οι περισσότερες από τις οποίες περνούν στη git log που τρέχει στο παρασκήνιο. Ίσως μία από τα πιο χρήσιμες είναι η σημαία --all, η οποία λέει στην gitk να δείξει υποβολές που μπορούν να φτάσουν από οποιαδήποτε ref, όχι μόνο από τον HEAD. Η διεπαφή της Gitk μοιάζει με αυτό:

Προβολή του ιστορικού της `gitk`.
Figure 153. Προβολή του ιστορικού της gitk.

Στην κορυφή είναι κάτι που μοιάζει λίγο με την έξοδο της git log --graph· κάθε τελεία αντιπροσωπεύει μία υποβολή, οι γραμμές αντιπροσωπεύουν σχέσεις γονέων-παιδιών και οι αναφορές φαίνονται ως έγχρωμα πλαίσια. Η κίτρινη κουκίδα αντιπροσωπεύει τον HEAD και η κόκκινη κουκίδα αντιπροσωπεύει τις αλλαγές που πρόκειται να υποβληθούν. Στο κάτω μέρος εμφανίζεται μία προβολή της επιλεγμένης υποβολής· τα σχόλια και την ενημερωμένη έκδοση κώδικα στα αριστερά και μια συνοπτική εικόνα στα δεξιά. Ενδιάμεσα υπάρχει μια συλλογή στοιχείων ελέγχου που χρησιμοποιούνται για αναζήτηση στο ιστορικό.

Η git-gui, από την άλλη πλευρά, είναι κατά κύριο λόγο εργαλείο για τη σύνταξη υποβολών. Και αυτην είναι ευκολότερο να την ξεκινήσουμε από τη γραμμή εντολών:

$ git gui

Και μοιάζει με κάτι τέτοιο:

Το εργαλείο υποβολής της `git-gui`.
Figure 154. Το εργαλείο υποβολής της git-gui.

Αριστερά είναι το ευρετήριο· οι αλλαγές που δεν έχουν προστεθεί στο στάδιο καταχώρισης είναι στην κορυφή κι αυτές που έχουν προστεθεί στο κάτω μέρος. Μπορούμε να μετακινήσουμε ολόκληρα αρχεία μεταξύ των δύο καταστάσεων κάνοντας κλικ στα εικονίδια τους ή μπορούμε να επιλέξουμε ένα αρχείο για προβολή κάνοντας κλικ στο όνομά του.

Στην επάνω δεξιά πλευρά βρίσκεται η προβολή της diff, η οποία δείχνει τις αλλαγές για το τρέχον επιλεγμένο αρχείο. Μπορούμε να υποβάλλουμε στο στάδιο καταχώρισης μεμονωμένα κομμάτια (ή γραμμές) κώδικα κάνοντας δεξί κλικ στην αντίστοιχη περιοχή.

Στην κάτω δεξιά πλευρά βρίσκονται οι περιοχές μηνύματος και δράσης. Αν πληκτρολογήσουμε το μήνυμά μας στο πλαίσιο κειμένου και κάνουμε κλικ στο κουμπί “Commit”, κάνουμε κάτι παρόμοιο με την git commit. Μπορούμε επίσης να τροποποιήσουμε την τελευταία υποβολή επιλέγοντας το κουμπί “Amend”, το οποίο θα ενημερώσει την περιοχή “Staged Changes” με τα περιεχόμενα της τελευταίας υποβολής. Στη συνέχεια, μπορούμε απλά να προσθέσουμε ή να αφαιρέσουμε αλλαγές από το στάδιο καταχώρισης, να αλλάξουμε το μήνυμα υποβολής και να ξαναπατήσουμε το κουμπί “Commit” για να αντικαταστήσουμε την παλιά υποβολή με μια νέα.

Οι gitk και git-gui είναι παραδείγματα εργαλείων που προσανατολίζονται στην εργασία. Καθένα από αυτά είναι σχεδιασμένο για συγκεκριμένο σκοπό (προβολή του ιστορικού και δημιουργία υποβολών, αντίστοιχα) και παραλείπουν λειτουργίες που δεν είναι απαραίτητες για την εργασία αυτή.

GitHub για Mac και Windows

Το GitHub δημιούργησε δύο πελάτες Git με γνώμονα τη ροή εργασίας: έναν για Windows και έναν για Mac. Αυτοί οι πελάτες είναι ένα καλό παράδειγμα εργαλείων που προσανατολίζονται στη ροή εργασίας —αντί να εκθέτουν όλη τη λειτουργικότητα του Git, εστιάζουν, αντιθέτως, σε ένα επιμελημένο σύνολο κοινών λειτουργιών που συνεργάζονται καλά μεταξύ τους. Μοιάζουν με αυτό:

GitHub για Mac.
Figure 155. GitHub για Mac.
GitHub για Windows.
Figure 156. GitHub για Windows.

Έχουν σχεδιαστεί ώστε να μοιάζουν και να λειτουργούν παρόμοια, συνεπώς θα τα αντιμετωπίσουμε σαν ένα μόνο προϊόν σε αυτό το κεφάλαιο. Δεν θα κάνουμε μια λεπτομερή περιγραφή των εργαλείων (άλλωστε έχουν τη δική τους τεκμηρίωση), αλλά μια γρήγορη περιήγηση στην προβολή “Changes” (που είναι αυτή στην οποία θα περάσουμε το μεγαλύτερο μέρος του χρόνου μας) είναι εντάξει.

  • Αριστερά είναι η λίστα αποθετηρίων που παρακολουθεί η εφαρμογή· μπορούμε να προσθέσουμε ένα αποθετήριο (είτε με κλωνοποίηση είτε προσαρτώντας το τοπικά) κάνοντας κλικ στο εικονίδιο “+” στο επάνω μέρος αυτής της περιοχής.

  • Στο κέντρο υπάρχει μια περιοχή εισαγωγής υποβολής, η οποία μας επιτρέπει να εισάγουμε ένα μήνυμα υποβολής και να επιλέξουμε ποια αρχεία θα πρέπει να συμπεριληφθούν.   (Σε Windows το ιστορικό υποβολών εμφανίζεται ακριβώς κάτω από αυτό· σε Mac, βρίσκεται σε ξεχωριστή καρτέλα.)

  • Στα δεξιά υπάρχει μια προβολή diff, η οποία δείχνει τι έχει αλλάξει στον κατάλογο εργασίας μας ή ποιες αλλαγές συμπεριλήφθησαν στην επιλεγμένη υποβολή.

  • Το τελευταίο πράγμα που πρέπει να παρατηρήσουμε είναι το κουμπί “Sync” στο πάνω δεξί μέρος, το οποίο είναι ο πρωταρχικός τρόπος αλληλεπίδρασης με το δίκτυο.

Note

Δεν χρειαζόμαστε λογαριασμό GitHub για να χρησιμοποιήσουμε αυτά τα εργαλεία. Ενώ έχουν σχεδιαστεί για να επισημάνουν την υπηρεσία GitHub και τη συνιστώμενη ροή εργασίας, δουλεύουν ευχαρίστως με οποιονδήποτε αποθετήριο και επιτελούν λειτουργίες δικτύου με οποιονδήποτε διακομιστή Git.

Εγκατάσταση

Το GitHub για Windows μπορεί να μεταφορτωθεί από την https://windows.github.com και το GitHub για Mac από την https://mac.github.com. Όταν οι εφαρμογές εκτελούνται για πρώτη φορά, μας καθοδηγούν σε όλη την πρωταρχική εγκατάσταση του Git, όπως στη διαμόρφωση του ονόματος και της διεύθυνσής e-mail μας· επίσης και οι δύο θέτουνε λογικές προεπιλεγμένες ρυθμίσεις για πολλές συνήθεις παραμέτρους, όπως η προσωρινή μνήμη διαπιστευτηρίων και η συμπεριφορά όσον αφορά στο CRLF.

Και οι δύο είναι “αειθαλείς” —οι ενημερώσεις μεταφορτώνονται και εγκαθίστανται στο παρασκήνιο όσο οι εφαρμογές είναι τρέχουν. Αυτό περιλαμβάνει και μία συσκευασμένη έκδοση Git, κάτι που σημαίνει ότι πιθανότατα δεν θα χρειαστεί να ξαναανησυχήσουμεγια τη μη αυτόματη ενημέρωσή του Git ξανά. Σε Windows, η εφαρμογή περιλαμβάνει μια συντόμευση για να εκκινήσει το Powershell με το Posh-git, για το οποίο θα μιλήσουμε περισσότερο για αργότερα σε αυτό το κεφάλαιο.

Το επόμενο βήμα είναι να δώσουμε στο εργαλείο μερικά αποθετήρια για να εργαστεί. Η εφαρμογή μάς εμφανίζει μια λίστα με τα αποθετήρια στα οποία έχουμε πρόσβαση στο GitHub και μπορεί να τα κλωνοποιήσει σε ένα βήμα. Εάν διαθέτουμε ήδη ένα τοπικό αποθετήριο, απλώς σύρουμε τον κατάλογο του από το Finder ή την Windows explorer στο παράθυρο της εφαρμογής του GitHub και θα συμπεριληφθεί στη λίστα αποθετηρίων στα αριστερά.

Συνιστώμενη ροή εργασίας

Μόλις εγκατασταθεί και ρυθμιστεί η εφαρμογή GitHub, μπορούμε να τη χρησιμοποιήσουμε για πολλές κοινές εργασίες του Git. Η προβλεπόμενη ροή εργασίας για αυτό το εργαλείο ονομάζεται μερικές φορές “Ροή GitHub” (GitHub flow). Θα το καλύψουμε λεπτομερέστερα στην ενότητα Η ροή εργασίας του GitHub, αλλά η γενική ιδέα είναι ότι (α) θα υποβάλλουμε σε έναν κλάδο και (β) θα συγχρονιζόμαστε με ένα απομακρυσμένο αποθετήριο αρκετά τακτικά.

Η διαχείριση των κλάδων είναι ένας από τους τομείς στους οποίους τα δύο εργαλεία αποκλίνουν. Στο Mac υπάρχει ένα κουμπί στην κορυφή του παραθύρου για τη δημιουργία ενός νέου κλάδου:

Κουμπί ``Δημιουργία κλάδου'' σε Mac.
Figure 157. Κουμπί “Δημιουργία κλάδου” σε Mac.

Στο Windows αυτό γίνεται με την πληκτρολόγηση του ονόματος του νέου κλάδου στο widget αλλαγής κλάδου:

Κουμπί ``Δημιουργία κλάδου'' σε Windows.
Figure 158. Κουμπί “Δημιουργία κλάδου” σε Windows.

Μόλις δημιουργηθεί ο κλάδος μας, η πραγματοποίηση νέων υποβολών είναι αρκετά απλή. Κάνουμε κάποιες αλλαγές στον κατάλογο εργασίας μας και όταν μεταβούμε στο παράθυρο της εφαρμογής του GitHub, θα μας δείξει ποια αρχεία έχουν αλλάξει. Εισάγουμε ένα μήνυμα αποστολής, επιλέγουμε τα αρχεία που θέλουμε να συμπεριλάβουμε και κάνουμε κλικ στο κουμπί “Commit” (Ctrl-Enter ή ⌘-Enter).

Ο κύριος τρόπος αλληλεπίδρασης με άλλα αποθετήρια μέσω του δικτύου είναι με τη λειτουργία “Sync”. Το Git εσωτερικά έχει ξεχωριστές λειτουργίες για την ώθηση, την ανάκτηση, τη συγχώνευση και την αλλαγή βάσης, αλλά οι εφαρμογές του GitHub συμπυκνώνουν όλα αυτά σε μία λειτουργία που περιλαμβάνει πολλά βήματα. Εδώ είναι τι συμβαίνει όταν κάνουμε κλικ στο κουμπί “Sync”:

  1. git pull --rebase. Αν αυτό αποτύχει εξαιτίας μιας σύγκρουσης συγχώνευσης, επιστρέφουμε στο git pull --no-rebase.

  2. git push.

Αυτή είναι η πιο συνηθισμένη ακολουθία εντολών δικτύου όταν εργαζόμαστε σε αυτό το στυλ, οπότε η συμπύκνωσή τους σε μια εντολή μας εξοικονομεί πολύ χρόνο.

Ανακεφαλαίωση

Αυτά τα εργαλεία είναι πολύ κατάλληλα για τη ροή εργασίας για την οποία έχουν σχεδιαστεί. Οι προγραμματιστές και οι μη-προγραμματιστές μπορούν να συνεργαστούν σε ένα έργο μέσα σε λίγα λεπτά και πολλές από τις βέλτιστες πρακτικές για αυτό το είδος ροής εργασίας είναι ενσωματωμένες στα εργαλεία. Ωστόσο, αν η ροή εργασίας μας είναι διαφορετική ή θέλουμε μεγαλύτερο έλεγχο του τρόπου και του χρόνου λειτουργίας των δικτύων, μπορούμε να χρησιμοποιήσουμε μία άλλη εφαρμογή ή τη γραμμή εντολών.

Άλλα GUI

Υπάρχουν πολλές άλλες εφαρμογές Git με γραφικό περιβάλλον και καλύπτουν όλο το φάσμα εργαλείων, από εξειδικευμένα εργαλεία μίας χρήσης σε εφαρμογές που προσπαθούν να εκθέσουν όλες τις δυνατότητες του Git. Ο επίσημος ιστότοπος του Git διαθέτει μια επιλεγμένη λίστα με τις πιο δημοφιλείς εφαρμογές στη διεύθυνση http://git-scm.com/downloads/guis. Μια πιο ολοκληρωμένη λίστα είναι διαθέσιμη στον ιστότοπο Git wiki, στη διεύθυνση https://git.wiki.kernel.org/index.php/Interfaces,_frontends,_and_tools#Graphical_Interfaces.