Το Git είναι ένα σύστημα ελέγχου διανεμόμενης έκδοσης και διαχείρισης πηγαίου κώδικα (SCM) From Wikipedia, the free encyclopedia
Το Git (/ɡɪt/) είναι ένα σύστημα ελέγχου εκδόσεων (λέγεται και σύστημα ελέγχου αναθεωρήσεων ή σύστημα ελέγχου πηγαίου κώδικα) με έμφαση στην ταχύτητα,[5] στην ακεραιότητα των δεδομένων [6] και στην υποστήριξη για κατανεμημένες μη γραμμικές ροές εργασίας.[7] Το Git σχεδιάστηκε και αναπτύχθηκε αρχικά από τον Λίνους Τόρβαλντς για τη ανάπτυξη του πυρήνα Linux το 2005 και έχει γίνει από τότε το πιο διαδεδομένο σύστημα ελέγχου εκδόσεων για ανάπτυξη λογισμικού.[8]
Γενικά | |
---|---|
Δημιουργοί | Λίνους Τόρβαλντς[1][2] |
Ημερ. Δημιουργίας | 7 Απριλίου 2005 |
Είδος | κατανεμημένο σύστημα ελέγχου εκδόσεων, Εργαλείο προγραμματισμού |
Διανομή | |
Έκδοση | 2.46.0 (29 Ιουλίου 2024)[3] |
Λειτουργικά | Ανεξάρτητο πλατφόρμας |
Διαθέσιμο σε | Αγγλικά |
Ανάπτυξη | |
Υπευθ. ανάπτυξης | Λίνους Τόρβαλντς,[4] Junio C Hamano |
Γραμμένο σε | C, Perl, Tcl, Python, C++ |
Άδεια χρήσης | GPLv2 |
Σύνδεσμοι | |
Επίσημος ιστότοπος | |
https://git-scm.com | |
Αποθετήριο κώδικα | |
https://git.kernel.org/pub/scm/git/git.git |
Όπως τα περισσότερα άλλα κατανεμημένα συστήματα ελέγχου εκδόσεων/αναθεωρήσεων και αντίθετα με τα περισσότερα συστήματα πελάτη-διακομιστή, κάθε κατάλογος εργασίας του Git είναι ένα ολοκληρωμένο αποθετήριο λογισμικού με πλήρες ιστορικό και δυνατότητες πλήρους παρακολούθησης της έκδοσης, ανεξάρτητα από την πρόσβαση δικτύου ή ενός κεντρικού διακομιστή.
Η ανάπτυξη του Git ξεκίνησε αφού πολλοί προγραμματιστές του πυρήνα Linux σταμάτησαν την πρόσβαση στο BitKeeper, ένα ιδιοταγές (δηλαδή μη ανοικτού κώδικα) σύστημα ελέγχου εκδόσεων που χρησιμοποιόταν προηγουμένως για τη διατήρηση του έργου.[9] Ο κάτοχος των πνευματικών δικαιωμάτων του BitKeeper, Larry McVoy, είχε αποσύρει την ελεύθερη χρήση του προϊόντος αφού ισχυρίστηκε ότι ο Andrew Tridgell είχε εφαρμόσει αντίστροφη μηχανική στα πρωτόκολλα του BitKeeper.
Ο Τόρβαλντς ήθελε ένα κατανεμημένο σύστημα που θα μπορούσε να χρησιμοποιηθεί σαν το BitKeeper, αλλά κανένα από τα διαθέσιμα ελεύθερα συστήματα δεν κάλυπτε τις ανάγκες του, ιδιαίτερα στην απόδοση. Ο Τόρβαλντς πήρε ένα παράδειγμα ενός συστήματος SCM που χρειαζότανε 30 δευτερόλεπτα για να εφαρμόσει μια διόρθωση και να ενημερώσει όλα τα συνδεδεμένα μεταδεδομένα και σημείωσε ότι αυτό δεν μπορούσε να ανταποκριθεί στις ανάγκες της ανάπτυξης του πυρήνα Linux, όπου ο συγχρονισμός με τους συνεργάτες του μπορούσε να απαιτήσει 250 τέτοιες ενέργειες τη φορά. Ήθελε η διόρθωση να κρατήσει 3 δευτερόλεπτα,[5] και είχε αρκετά άλλα κριτήρια σχεδίασης κατά νου:
Αυτά τα τρία κριτήρια απάλειψαν κάθε σύστημα ελέγχου εκδόσεων που υπήρχε τότε, εκτός από το Monotone. Εξετάζοντας την απόδοσή του, το απέρριψε και αυτό.[7] Έτσι αμέσως μετά την έκδοση του πυρήνα Linux 2.6.12-rc2,[7] ο Τόρβαλντς άρχισε να γράφει ένα δικό του.[7]
Ο Τόρβαλντς δικαιολόγησε το όνομα git, που στην βρετανική αργκό σημαίνει κάτι σαν «ανεπιθύμητος», λέγοντας: «Είμαι ένα φαντασμένο άτομο και ονομάζω όλα τα έργα μου σύμφωνα με τον εαυτό μου. Πρώτα ήταν το Λίνουξ, τώρα το git».[10][11] Άλλωστε και η σελίδα του εγχειριδίου (man page) περιγράφει το git ως «τον ηλίθιο εντοπιστή περιεχομένου».[12]
Η ανάπτυξη του Git ξεκίνησε στις 3 Απριλίου 2005,[13] ανακοινώθηκε στις 6 [14] και έγινε αυτοφιλοξενούμενο (self-hosting) από τις 7 Απριλίου[13]. Η πρώτη συγχώνευση των πολλαπλών κλάδων έγινε στις 18 Απριλίου.[15] Ο Τόρβαλντς πέτυχε τους στόχους απόδοσης. Στις 29 Απριλίου, το νεότευκτο Git επιδόθηκε στην εφαρμογή διορθώσεων στο δέντρο του πυρήνα του Linux kernel με ένα ρυθμό 6.7 ανά δευτερόλεπτο.[16] Στις 16 Ιουνίου το Git διαχειρίστηκε την έκδοση 2.6.12 του πυρήνα.[17] Ο Τόρβαλντς παρέδωσε τη συντήρηση στις 26 Ιουλίου 2005 στον Junio Hamano, έναν βασικό συνεργάτη του έργου.[18] Ο Hamano ήταν υπεύθυνος για την έκδοση 1.0 στις 21 Δεκεμβρίου 2005 και από τότε παραμένει ο κύριος υπεύθυνος για την συντήρησή του.[19]
Η σχεδίαση του Git εμπνεύστηκε από τα BitKeeper και Monotone.[20][21] Το Git σχεδιάστηκε αρχικά ως μια μηχανή συστήματος ελέγχου σε έκδοση χαμηλού επιπέδου πάνω στην οποία άλλοι μπορούν να γράψουν προγράμματα προσκηνίου, όπως Cogito ή StGIT.[21] Το έργο του πυρήνα του Git έχει γίνει από τότε μια πλήρης έκδοση συστήματος ελέγχου άμεσα χρησιμοποιήσιμη.[22] Αν και επηρεάστηκε έντονα από το BitKeeper, ο Τόρβαλντς προσπάθησε εκούσια να αποφύγει συμβατικές προσεγγίσεις, που οδηγούν σε έναν μοναδικό σχεδιασμό.[23]
Η σχεδίαση του Git είναι μια σύνθεση της εμπειρίας του Τόρβαλντς με το Linux στη συντήρηση ενός μεγάλου κατανεμημένου έργου ανάπτυξης, μαζί με την βαθιά του γνώση της απόδοσης του συστήματος των αρχείων που αποκτήθηκε από το ίδιο έργο και την επείγουσα ανάγκη παραγωγής ενός λειτουργικού συστήματος. Αυτές οι επιρροές οδήγησαν στις παρακάτω επιλογές υλοποίησης:
git gc --prune
.[29]Μια άλλη ιδιότητα του Git είναι ότι παίρνει στιγμιότυπα των δένδρων καταλόγου των αρχείων. Τα πρώιμα συστήματα εντοπισμού εκδόσεων του πηγαίου κώδικα, σύστημα ελέγχου πηγαίου κώδικα-SCCS (Source Code Control System) και σύστημα ελέγχου αναθεώρησης-RCS (Revision Control System), δούλευαν σε ατομικά αρχεία και τόνιζαν την απόκτηση εξοικονόμησης χώρου από τα παρεμβαλόμενα δέλτα (interleaved deltas) (SCCS) ή την κωδικοποίηση δέλτα (delta encoding) (RCS) των (κυρίως παρόμοιων) εκδόσεων. Τα μεταγενέστερα συστήματα ελέγχου έκδοσης διατήρησαν αυτήν την ιδέα ενός αρχείου που έχει μια ταυτότητα μέσα από πολλές αναθεωρήσεις ενός έργου. Όμως, ο Τόρβαλντς απέρριψε αυτήν την ιδέα.[30] Συνεπώς, το Git δεν καταγράφει ρητά τις σχέσεις αναθεώρησης του αρχείου σε οποιοδήποτε επίπεδο κάτω από δένδρο του πηγαίου κώδικα.
Οι έμμεσες σχέσεις αναθεώρησης έχουν κάποιες σημαντικές συνέπειες:
Το Git υλοποιεί πολλές στρατηγικές συγχώνευσης· μια μη προεπιλεγμένη μπορεί να επιλεγεί κατά τον χρόνο της συγχώνευσης:[36]
Όταν υπάρχουν περισσότεροι από έναν κοινό πρόγονο που μπορεί να χρησιμοποιηθεί για συγχώνευση τριών δρόμων, δημιουργεί ένα συγχωνευμένο δένδρο των κοινών προγόνων και το χρησιμοποιεί ως δένδρο αναφοράς για τη συγχώνευση τριών δρόμων. Αυτό έχει αναφερθεί να καταλήγει σε λιγότερες συγκρούσεις συγχωνεύσεων χωρίς να προκαλεί εσφαλμένες συγχωνεύσεις με δοκιμές που γίνονται σε ενεργές υποβολές συγχώνευσης που ελήφθησαν από το ιστορικό ανάπτυξης του πυρήνα Linux 2.6. Επιπρόσθετα αυτό μπορεί να εντοπίσει και να χειριστεί συγχωνεύσεις που περιέχουν μετονομασίες.
— Linus Torvalds[37]
Τα βασικά του Git δεν είναι εγγενώς ένα σύστημα διαχείρισης πηγαίου κώδικα (SCM). Ο Τόρβαλντς εξηγεί,[38]
Κατά πολλούς τρόπους μπορείτε να δείτε το git ως ένα σύστημα αρχείων — είναι προσπελάσιμο με το περιεχόμενο (content-addressable) και έχει μια ιδέα αναθεώρησης , αλλά στην πραγματικότητα ο σχεδιασμός του έρχεται στο πρόβλημα από την άποψη ενός προσώπου συστήματος αρχείων (αυτό που κάνω είναι πυρήνες) και στην πραγματικότητα έχω απολύτως μηδενικό ενδιαφέρον να δημιουργήσω ένα παραδοσιακό σύστημα SCM.
Από αυτήν την αρχική σχεδιαστική προσέγγιση, το Git έχει αναπτυχθεί σε ένα πλήρες σύνολο γνωρισμάτων που θα περίμενε κανείς από ένα παραδοσιακό SCM,[22] με γνωρίσματα τα οποία κυρίως δημιουργήθηκαν όταν χρειαζόντουσαν, έπειτα εξευγενίστηκαν και επεκτάθηκαν με την πάροδο του χρόνου.
Το Git έχει δύο δομές δεδομένων (Structure data): έναν μεταβλητό δείκτη (index) (που λέγεται επίσης καταχώριση ή κρύπτη (stage ή cache) ) που αποθηκεύει πληροφορίες για τον κατάλογο εργασίας και την επόμενη έκδοση που θα υποβληθεί· και μία αμετάβλητη, μόνο για προσάρτηση βάση δεδομένων αντικειμένων.
Η βάση δεδομένων αντικειμένων περιέχει τέσσερις τύπους αντικειμένων:
Ο δείκτης εξυπηρετεί ως σημείο σύνδεσης μεταξύ της βάσης δεδομένων του αντικειμένου και του δένδρου εργασίας.
Κάθε αντικείμενο ταυτοποιείται από έναν κατακερματισμό (Cryptographic hash function) SHA-1 των περιεχομένων του. Το Git υπολογίζει τον κατακερματισμό και χρησιμοποιεί αυτήν την τιμή για το όνομα του αντικειμένου. Το αντικείμενο μπαίνει σε έναν κατάλογο που ταιριάζει με τους δύο πρώτους χαρακτήρες του κατακερματισμού του. Το υπόλοιπο του κατακερματισμού χρησιμοποιείται ως το όνομα του αρχείου για αυτό το αντικείμενο.
Το Git αποθηκεύει κάθε αναθεώρηση ενός αρχείου ως ένα μοναδικό blob. Η σχέση μεταξύ των blobs μπορεί να βρεθεί μέσα από την εξέταση του δένδρου και των αντικειμένων υποβολής. Νεοπροστιθέμενα αντικείμενα αποθηκεύονται στην ολότητά τους χρησιμοποιώντας μια συμπίεση zlib. Αυτό μπορεί να καταναλώσει ένα μεγάλο ποσό του χώρου του δίσκου γρήγορα, έτσι τα αντικείμενα μπορούν να ενωθούν σε πακέτα, που χρησιμοποιούν δέλτα συμπίεση για να αποθηκεύσουν χώρο, αποθηκεύοντας τα blobs ως αλλαγές τους σχετικά με άλλα blobs.
Οι διακομιστές του Git τυπικά ακροάζονται στη θύρα TCP 9418.[39]
Κάθε αντικείμενο στη βάση δεδομένων git στην οποία δεν αναφέρεται μπορεί να καθαριστεί χρησιμοποιώντας μια εντολή συλλογής απορριμμάτων, ή αυτόματα. Ένα αντικείμενο μπορεί να παραπεμφθεί από ένα άλλο αντικείμενο, ή με ρητή παραπομπή. Το Git γνωρίζει διαφορετικούς τύπους παραπομπών. Οι εντολές για δημιουργία, μετακίνηση και διαγραφή παραπομπών ποικίλλει. Το "git show-ref" εμφανίζει όλες τις παραπομπές. Μερικοί τύποι είναι:
Το αναπτύχθηκε κυρίως σε Linux, αν και υποστηρίζει τα περισσότερα κύρια λειτουργικά συστήματα συμπεριλαμβανομένων των BSD, Solaris, OS X και Microsoft Windows.[41]
Η υλοποίηση JGit του Git είναι μια καθαρή βιβλιοθήκη λογισμικού Java, που σχεδιάστηκε για να ενσωματωθεί σε οποιαδήποτε εφαρμογή Java. Το JGit χρησιμοποιείται στο εργαλείο επιθεώρησης κώδικα Gerrit και στο EGit, έναν πελάτη Git για το IDE Eclipse.[42]
Η υλοποίηση Dulwich του Git είναι ένα καθαρό συστατικό λογισμικού Python για Python 2.[43]
Η υλοποίηση libgit2 του Git είναι μια βιβλιοθήκη λογισμικού ANSI C χωρίς άλλες εξαρτήσεις, που μπορεί να δομηθεί σε πολλά λειτουργικά συμπεριλαμβανομένων των Microsoft Windows, Linux, Mac OS X και BSD.[44] Έχει συνδέσμους για πολλές προγραμματιστικές γλώσσες, συμπεριλαμβανόμενων των Ruby, Python και Haskell.[45][46][47]
το JS-Git είναι μια υλοποίηση JavaScript ενός υποσυνόλου του Git.[48]
Επειδή το git είναι ένα κατανεμημένο σύστημα ελέγχου έκδοσης, μπορεί να χρησιμοποιηθεί ως διακομιστής έτοιμος για χρήση. Το αποκλειστικό λογισμικό του διακομιστή git βοηθά, μεταξύ άλλων γνωρισμάτων, στην προσθήκη ελέγχου πρόσβασης, την εμφάνιση των περιεχομένων ενός αποθετηρίου git μέσω του ιστού και βοηθά στην διαχείριση πολλαπλών αποθετηρίων.
Ένα αποθετήριο git μπορεί να κλωνοποιηθεί σε ένα κοινόχρηστο σύστημα αρχείων και να προσπελαστεί από άλλα άτομα. Μπορεί επίσης να προσπελαστεί μέσα από απομακρυσμένο κέλυφος έχοντας απλώς το λογισμικό git εγκατεστημένο και επιτρέποντας σε έναν χρήστη να συνδεθεί.[49]
Ο δαίμονας Git επιτρέπει στους χρήστες να μοιράζονται το δικό τους αποθετήριο με τους συνεργάτες τους γρήγορα. Το Git instaweb επιτρέπει στους χρήστες να παρέχουν προβολή ιστού στο αποθετήριο. Από τον Απρίλιο του 2014 το instaweb (στιγμιαίος ιστός) δεν δουλεύει στα Windows. Μπορείτε να δείτε αμφότερα στη γραμμή "hg serve" του Mercurial.[50][51]
Το Gitolite είναι μια στρώση ελέγχου πρόσβασης πάνω στο git, που παρέχει εξαιρετικό έλεγχο πρόσβασης στα αποθετήρια του git. Βασίζεται σε άλλο λογισμικό για την απομακρυσμένη προβολή των αποθετηρίων στον διακομιστή.[52][53]
Το Gerrit παρέχει δύο από τρεις λειτουργίες: έλεγχο πρόσβασης και διαχείριση αποθετηρίων. Χρησιμοποιεί το jGit. Για να προβάλετε τα αποθετήρια συνδυάζεται π.χ. με τα Gitiles ή GitBlit.
Το Gitblit μπορεί να παράσχει και τις τρεις λειτουργίες, αλλά χρησιμοποιείται σε μεγαλύτερες εγκαταστάσεις ως περιηγητής αποθετηρίου εγκατεστημένος με το gerrit για έλεγχο πρόσβασης και διαχείριση αποθετηρίων.[54][55]
Το Gitiles είναι ένας απλός περιηγητής αποθετηρίου, που χρησιμοποιείται συνήθως μαζί με το gerrit.[56][57]
Ο εξυπηρετητής Bonobo Git είναι ένας απλός εξυπηρετητής git για Windows που υλοποιήθηκε ως μια πύλη ASP.NET.[58] Βασίζεται στους μηχανισμούς πιστοποίησης που παρέχονται από τις υπηρεσίες πληροφοριών διαδικτύου των Windows, συνεπώς δεν υποστηρίζει πρόσβαση SSH, αλλά μπορεί να ενσωματωθεί εύκολα με τον ενεργό κατάλογο.
Εμπορικές λύσεις είναι επίσης διαθέσιμες για εσωτερική εγκατάσταση, μεταξύ αυτών το λογισμικό GitHub (που χρησιμοποιεί εγγενές git, διαθέσιμο ως vm), Stash (χρησιμοποιώντας jGit), Team Foundation Server (χρησιμοποιώντας libgit2).[59]
Το Ίδρυμα Eclipse ανέφερε στην ετήσια έρευνα του ότι από τον Μάιο του 2014, το Git είναι πλέον το πιο διαδεδομένο εργαλείο διαχείρισης πηγαίου κώδικα, με το 42,9% των επαγγελματιών προγραμματιστών λογισμικού να αναφέρουν ότι χρησιμοποιούν το Git ή το GitHub ως το κύριο σύστημα ελέγχου[8] συγκρινόμενο με το 36% το 2013, 27,6% το 2012 και 12,8% το 2011.[60]
Η ιστοσελίδα εργασίας UK IT itjobswatch.co.uk αναφέρει ότι από τον Ιούνιο του 2014, το 18,54% των μόνιμων νέων εργασιών ανάπτυξης λογισμικού στο Ενωμένο Βασίλειο εμφανίζουν το Git ως προαπαιτούμενο,[61] μπροστά από το 16,54% για το Subversion,[62] 10,87% για το Microsoft Team Foundation Server,[63] 1,32% για Mercurial,[64] και 0,91% για το Visual SourceSafe.[65]
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.