Προγραμματισμός

Tutorial Git: Ξεκινήστε με τον έλεγχο έκδοσης Git

Αυτό το άρθρο σάς εισάγει στο Git, συμπεριλαμβανομένου του τρόπου εγκατάστασης του απαραίτητου λογισμικού για πρόσβαση σε διακομιστές Git όπου θα αποθηκευτεί το έργο λογισμικού σας.

Έννοιες ελέγχου έκδοσης

Για να κατανοήσετε το Git και την έννοια του ελέγχου έκδοσης, είναι χρήσιμο να κοιτάξετε τον έλεγχο έκδοσης από ιστορική άποψη. Υπήρξαν τρεις γενιές λογισμικού ελέγχου εκδόσεων.

Η πρώτη γενιά

Η πρώτη γενιά ήταν πολύ απλή. Οι προγραμματιστές δούλευαν στο ίδιο φυσικό σύστημα και «έλεγαν» ένα αρχείο κάθε φορά.

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

Παραδείγματα λογισμικού ελέγχου έκδοσης πρώτης γενιάς περιλαμβάνουν το Σύστημα Ελέγχου Αναθεώρησης (RCS) και το Σύστημα Ελέγχου Πηγαίου Κώδικα (SCCS).

Η δεύτερη γενιά

Τα προβλήματα με την πρώτη γενιά περιελάμβαναν τα εξής:

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

  • Οι προγραμματιστές έπρεπε να συνδεθούν απευθείας στο σύστημα που περιείχε το λογισμικό ελέγχου έκδοσης.

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

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

Τι είναι η συγχώνευση; Ας υποθέσουμε ότι δύο προγραμματιστές, ο Bob και ο Sue, ρίξτε μια ματιά στην έκδοση 5 ενός αρχείου με το όνομα abc.txt. Αφού ο Μπομπ ολοκληρώσει τη δουλειά του, ελέγχει ξανά το αρχείο. Συνήθως, αυτό οδηγεί σε μια νέα έκδοση του αρχείου, έκδοση 6.

Λίγο αργότερα, η Sue ελέγχει στο αρχείο της. Αυτό το νέο αρχείο πρέπει να περιλαμβάνει τις αλλαγές και τις αλλαγές του Μπομπ. Αυτό επιτυγχάνεται μέσω της διαδικασίας συγχώνευσης.

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

Μετά την ολοκλήρωση της διαδικασίας συγχώνευσης, πραγματοποιείται η διαδικασία δέσμευσης του αρχείου στο αποθετήριο. Η δέσμευση ενός αρχείου σημαίνει ουσιαστικά τη δημιουργία μιας νέας έκδοσης στο αποθετήριο. σε αυτήν την περίπτωση, η έκδοση 7 του αρχείου.

Παραδείγματα λογισμικού ελέγχου έκδοσης δεύτερης γενιάς περιλαμβάνουν το Σύστημα ταυτόχρονης έκδοσης (CVS) και το Subversion.

Η τρίτη γενιά

Η τρίτη γενιά αναφέρεται ως κατανεμημένα συστήματα ελέγχου έκδοσης (DVCS). Όπως και με τη δεύτερη γενιά, ένας κεντρικός διακομιστής αποθετηρίου περιέχει όλα τα αρχεία για το έργο. Ωστόσο, οι προγραμματιστές δεν ελέγχουν μεμονωμένα αρχεία από το αποθετήριο. Αντ 'αυτού, ελέγχεται ολόκληρο το έργο, επιτρέποντας στον προγραμματιστή να εργαστεί στο πλήρες σύνολο αρχείων και όχι μόνο μεμονωμένα αρχεία.

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

Με λογισμικό ελέγχου έκδοσης τρίτης γενιάς, τα αρχεία ελέγχονται και στη συνέχεια συγχωνεύονται.

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

Εάν εστιάζετε σε αυτό που υπάρχει στο αποθετήριο (το κεντρικό τμήμα κάθε φάσης), βλέπετε ότι υπάρχει μια πολύ ευθεία γραμμή ανάπτυξης (ver1, ver2, ver3, ver4, ver5 και ούτω καθεξής). Αυτή η απλή προσέγγιση στην ανάπτυξη λογισμικού θέτει ορισμένα πιθανά προβλήματα:

  • Η απαίτηση ενός προγραμματιστή για συγχώνευση πριν από τη δέσμευση συχνά έχει ως αποτέλεσμα να μην θέλουν οι προγραμματιστές να κάνουν τις αλλαγές τους σε τακτική βάση. Η διαδικασία συγχώνευσης μπορεί να είναι ένας πόνος και οι προγραμματιστές ενδέχεται να αποφασίσουν να περιμένουν μόνο αργότερα και να κάνουν μια συγχώνευση παρά μια δέσμη τακτικών συγχωνεύσεων. Αυτό έχει αρνητικό αντίκτυπο στην ανάπτυξη λογισμικού καθώς ξαφνικά τεράστια κομμάτια κώδικα προστίθενται σε ένα αρχείο. Επιπλέον, θέλετε να ενθαρρύνετε τους προγραμματιστές να κάνουν αλλαγές στο αποθετήριο, όπως και να ενθαρρύνετε κάποιον που γράφει ένα έγγραφο να αποθηκεύει σε τακτική βάση.
  • Πολύ σημαντικό: Η έκδοση 5 σε αυτό το παράδειγμα δεν είναι απαραίτητα το έργο που ο προγραμματιστής ολοκλήρωσε αρχικά. Κατά τη διάρκεια της διαδικασίας συγχώνευσης, ο προγραμματιστής ενδέχεται να απορρίψει μέρος της εργασίας του για να ολοκληρώσει τη διαδικασία συγχώνευσης. Αυτό δεν είναι ιδανικό, διότι έχει ως αποτέλεσμα την απώλεια δυνητικά καλού κώδικα.

Μια καλύτερη, αν και αναμφισβήτητα πιο περίπλοκη, τεχνική μπορεί να χρησιμοποιηθεί. Ονομάζεται κατευθυνόμενο ακυκλικό γράφημα (DAG).

Φανταστείτε το ίδιο σενάριο όπως παραπάνω, όπου δύο προγραμματιστές ελέγχουν την έκδοση 3 ενός αρχείου. Εδώ, εάν ένας προγραμματιστής ελέγξει αυτό το αρχείο, εξακολουθεί να οδηγεί σε μια έκδοση 4 του αρχείου. Ωστόσο, η δεύτερη διαδικασία check-in οδηγεί σε ένα αρχείο έκδοσης 5 που δεν βασίζεται στην έκδοση 4, αλλά μάλλον ανεξάρτητο από την έκδοση 4. Στο επόμενο στάδιο της διαδικασίας, οι εκδόσεις 4 και 5 του αρχείου συγχωνεύονται για να δημιουργήσουν μια έκδοση 6.

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

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

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

Εγκατάσταση του Git

Ίσως να έχετε ήδη Git στο σύστημά σας επειδή μερικές φορές εγκαθίσταται από προεπιλογή (ή άλλος διαχειριστής μπορεί να το είχε εγκαταστήσει). Εάν έχετε πρόσβαση στο σύστημα ως κανονικός χρήστης, μπορείτε να εκτελέσετε την ακόλουθη εντολή για να προσδιορίσετε εάν έχετε εγκαταστήσει το Git:

ocs @ ubuntu: ~ $ which git / usr / bin / git

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

[ocs @ centos ~] # which git / usr / bin / which: χωρίς git in (/usr/lib64/qt-3.3/bin:/usr/local/bin:/usr/local/sbin:/usr/ bin: / usr / sbin: / bin: / sbin: / root / bin)

Ως διαχειριστής σε ένα σύστημα που βασίζεται στο Debian, μπορείτε να χρησιμοποιήσετε το dpkg εντολή για να προσδιορίσετε εάν το πακέτο Git έχει εγκατασταθεί:

root @ ubuntu: ~ # dpkg -l git Επιθυμητό = Άγνωστο / Εγκατάσταση / Κατάργηση / Εκκαθάριση / Κράτηση | Κατάσταση = Not / Inst / Conf-files / Unpacked / halF-conf / Half-inst / trig-aWait / ➥Trig-pend | / Err? = (None) / Reinst-required (Κατάσταση, Σφάλμα: κεφαλαία = κακά) | | / Όνομα Έκδοση Αρχιτεκτονική Περιγραφή +++ - ======== - ============= - ============= - === ===================================== ii git 1: 1.9.1-1ubun amd64 γρήγορο, επεκτάσιμο , διανεμημένη visionrevision con

Ως διαχειριστής σε ένα σύστημα που βασίζεται στο Red Hat, θα μπορούσατε να χρησιμοποιήσετε το σ.α.λ. εντολή για να προσδιορίσετε εάν το πακέτο git έχει εγκατασταθεί:

[root @ centos ~] # rpm -q git git-1.8.3.1-6.el7_2.1.x86_64

Εάν το Git δεν είναι εγκατεστημένο στο σύστημά σας, πρέπει είτε να συνδεθείτε ως root χρήστης είτε να το χρησιμοποιήσετε sudo ή σου για να εγκαταστήσετε το λογισμικό. Εάν είστε συνδεδεμένοι ως ριζικός χρήστης σε ένα σύστημα που βασίζεται στο Debian, μπορείτε να χρησιμοποιήσετε την ακόλουθη εντολή για να εγκαταστήσετε το Git:

apt-get install git

Εάν είστε συνδεδεμένοι ως χρήστης root σε ένα σύστημα που βασίζεται στο Red Hat, μπορείτε να χρησιμοποιήσετε την ακόλουθη εντολή για να εγκαταστήσετε το Git:

yum εγκαταστήστε git

Αποκτήστε περισσότερα από το Git

Εξετάστε το ενδεχόμενο εγκατάστασης του πακέτου λογισμικού git-όλα. Αυτό το πακέτο περιλαμβάνει μερικά επιπλέον πακέτα εξάρτησης που προσθέτουν περισσότερη ισχύ στο Git. Παρόλο που ενδέχεται να μην χρησιμοποιείτε αυτές τις δυνατότητες στην αρχή, η διαθεσιμότητα αυτών όταν είστε έτοιμοι να εκτελέσετε πιο προηγμένες λειτουργίες Git θα είναι καλή.

Git έννοιες και χαρακτηριστικά

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

Στάδια Git

Είναι πολύ σημαντικό να θυμάστε ότι ελέγχετε ένα ολόκληρο έργο και ότι το μεγαλύτερο μέρος της εργασίας που κάνετε θα είναι τοπικό στο σύστημα στο οποίο εργάζεστε. Τα αρχεία που θα ελέγξετε θα τοποθετηθούν σε έναν κατάλογο κάτω από τον αρχικό σας κατάλογο.

Για να λάβετε ένα αντίγραφο ενός έργου από ένα αποθετήριο Git, χρησιμοποιείτε μια διαδικασία που ονομάζεται κλωνοποίηση. Η κλωνοποίηση δεν δημιουργεί απλώς αντίγραφο όλων των αρχείων από το αποθετήριο. εκτελεί πραγματικά τρεις κύριες λειτουργίες:

  • Δημιουργεί ένα τοπικό αποθετήριο του έργου κάτω από το όνομα_προγράμματοςΚατάλογος /.git στον αρχικό σας κατάλογο. Τα αρχεία του έργου σε αυτήν την τοποθεσία θεωρείται ότι έχουν ελεγχθεί από το κεντρικό αποθετήριο.
  • Δημιουργεί έναν κατάλογο όπου μπορείτε να δείτε απευθείας τα αρχεία. Αυτό ονομάζεται το περιοχή εργασίας. Οι αλλαγές που γίνονται στην περιοχή εργασίας δεν ελέγχονται άμεσα από την έκδοση.
  • Δημιουργεί μια περιοχή σταδιοποίησης. Η περιοχή σταδιοποίησης έχει σχεδιαστεί για να αποθηκεύει αλλαγές σε αρχεία προτού τις δεσμεύσετε στο τοπικό αποθετήριο.

Αυτό σημαίνει ότι εάν επρόκειτο να κλωνοποιήσετε ένα έργο που ονομάζεται Jacumba, ολόκληρο το έργο θα αποθηκευτεί στο Jacumba / .git κατάλογο στον αρχικό σας κατάλογο. Δεν πρέπει να προσπαθήσετε να τα τροποποιήσετε απευθείας. Αντ 'αυτού, κοιτάξτε απευθείας στο ~ / Jacumba Κατάλογος για να δείτε τα αρχεία από το έργο. Αυτά είναι τα αρχεία που πρέπει να αλλάξετε.

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

Αφού πραγματοποιήσετε όλες τις αλλαγές και τοποθετήσετε όλα τα αρχεία, τότε τα δεσμεύετε στο τοπικό αποθετήριο.

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

Επιλέγοντας τον κεντρικό υπολογιστή του αποθετηρίου Git

Πρώτον, τα καλά νέα: Πολλοί οργανισμοί παρέχουν Git hosting - κατά τη στιγμή αυτής της γραφής, υπάρχουν περισσότερες από δύο δωδεκάδες επιλογές. Αυτό σημαίνει ότι έχετε πολλές επιλογές για να διαλέξετε. Αυτά είναι τα καλά νέα… και τα άσχημα νέα.

Είναι μόνο άσχημα νέα γιατί σημαίνει ότι πρέπει πραγματικά να αφιερώσετε λίγο χρόνο για να ερευνήσετε τα πλεονεκτήματα και τα μειονεκτήματα των φιλοξενούμενων οργανισμών. Για παράδειγμα, οι περισσότεροι δεν χρεώνουν για τη βασική φιλοξενία, αλλά χρεώνουν για έργα μεγάλης κλίμακας. Ορισμένα παρέχουν μόνο δημόσια αποθετήρια (όλοι μπορούν να δουν το αποθετήριό σας), ενώ άλλοι σάς επιτρέπουν να δημιουργήσετε ιδιωτικά αποθετήρια. Υπάρχουν πολλά άλλα χαρακτηριστικά που πρέπει να λάβετε υπόψη.

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

Τουλάχιστον, προτείνω να λάβετε υπόψη τα εξής:

  • //bitbucket.org
  • //www.cloudforge.com
  • //www.codebasehq.com
  • //github.com
  • //gitlab.com

Σημειώστε ότι επέλεξα το Gitlab.com για τα παρακάτω παραδείγματα. Οποιοσδήποτε από τους κεντρικούς υπολογιστές στην προηγούμενη λίστα θα λειτουργούσε επίσης καλά. Επέλεξα το Gitlab.com απλώς και μόνο επειδή έχω χρησιμοποιήσει στο τελευταίο μου έργο Git.

Διαμόρφωση Git

Τώρα που έχετε ξεπεράσει όλη τη θεωρία, είναι καιρός να κάνετε κάτι με τον Git. Αυτή η επόμενη ενότητα προϋποθέτει τα εξής:

  • Έχετε εγκαταστήσει το σκατά ή git-όλα πακέτο λογισμικού στο σύστημά σας.
  • Έχετε δημιουργήσει έναν λογαριασμό σε μια υπηρεσία φιλοξενίας Git.

Το πρώτο πράγμα που θέλετε να κάνετε είναι να εκτελέσετε κάποια βασική ρύθμιση. Κάθε φορά που εκτελείτε μια ενέργεια δέσμευσης, το όνομα και η διεύθυνση ηλεκτρονικού ταχυδρομείου σας θα συμπεριλαμβάνονται στα μεταδεδομένα. Για να ορίσετε αυτές τις πληροφορίες, εκτελέστε τις ακόλουθες εντολές:

ocs @ ubuntu: ~ $ git config --global user.name "Bo Rothwell" ocs @ ubuntu: ~ $ git config --global user.email "[email protected]"

Προφανώς θα αντικαταστήσετε "Μπο Ρότγουελ" με το όνομά σας και "[email protected]" με τη διεύθυνση email σας. Το επόμενο βήμα είναι να κλωνοποιήσετε το έργο σας από την υπηρεσία φιλοξενίας Git. Λάβετε υπόψη ότι πριν από την κλωνοποίηση, μόνο ένα αρχείο βρίσκεται στον αρχικό κατάλογο του χρήστη:

ocs @ ubuntu: ~ $ ls first.sh

Τα ακόλουθα κλωνοποίησαν ένα έργο με το όνομα ocs:

$config[zx-auto] not found$config[zx-overlay] not found