Διατίθεται σύστημα ελέγχου πηγής Git 2.41

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

Σε σύγκριση με την προηγούμενη έκδοση, έγιναν δεκτές 542 αλλαγές στη νέα έκδοση, που προετοιμάστηκε με τη συμμετοχή 95 προγραμματιστών, εκ των οποίων οι 29 συμμετείχαν στην ανάπτυξη για πρώτη φορά. Βασικές καινοτομίες:

  • Βελτιωμένος χειρισμός μη προσβάσιμων αντικειμένων που δεν αναφέρονται στο αποθετήριο (δεν αναφέρονται οι κλάδοι ή οι ετικέτες). Τα απρόσιτα αντικείμενα αφαιρούνται από τον συλλέκτη σκουπιδιών, αλλά παραμένουν στο χώρο αποθήκευσης για ορισμένο χρονικό διάστημα πριν από την αφαίρεση για να αποφευχθούν οι συνθήκες αγώνα. Για να παρακολουθείτε την περίοδο των μη προσβάσιμων αντικειμένων, είναι απαραίτητο να δεσμεύσετε ετικέτες με τον χρόνο αλλαγής παρόμοιων αντικειμένων, κάτι που δεν επιτρέπει την αποθήκευση τους σε ένα πακέτο-αρχείο, στο οποίο όλα τα αντικείμενα έχουν κοινό χρόνο αλλαγής. Προηγουμένως, κάθε μη προσβάσιμο αντικείμενο αποθηκεύονταν σε ξεχωριστό αρχείο, το οποίο οδήγησε σε προβλήματα εάν υπήρχε μεγάλος αριθμός φρέσκων μη προσβάσιμων αντικειμένων που δεν υπόκεινταν ακόμη σε διαγραφή. Στη νέα έκδοση, από προεπιλογή, ο μηχανισμός «cruft packs» χρησιμοποιείται για τη συσκευασία μη προσβάσιμων αντικειμένων, ο οποίος επιτρέπει την αποθήκευση όλων των μη προσβάσιμων αντικειμένων σε ένα αρχείο πακέτου και την απεικόνιση των δεδομένων για το χρόνο τροποποίησης κάθε αντικειμένου σε έναν ξεχωριστό πίνακα που είναι αποθηκευμένος σε αρχείο με την επέκταση ".mtimes" και συνδεδεμένο χρησιμοποιώντας ένα αρχείο ευρετηρίου με την επέκταση ".idx".
    Διατίθεται σύστημα ελέγχου πηγής Git 2.41
  • Από προεπιλογή, είναι ενεργοποιημένη η διατήρηση ενός αντίστροφου ευρετηρίου (revindex) στο δίσκο για αρχεία πακέτων. Όταν δοκιμάστηκε στα αποθετήρια torvalds/linux, η χρήση ενός αντίστροφου ευρετηρίου μας επέτρεψε να επιταχύνουμε τις λειτουργίες "git push" με ένταση πόρων κατά 1.49 φορές και απλές λειτουργίες, όπως ο υπολογισμός του μεγέθους ενός αντικειμένου χρησιμοποιώντας το "git cat- file --batch='%(objectsize:disk)' » 77 φορές. Τα αρχεία (."rev") με αντίστροφο ευρετήριο θα αποθηκευτούν μέσα στο χώρο αποθήκευσης στον κατάλογο ".git/objects/pack".

    Θυμηθείτε ότι το Git αποθηκεύει όλα τα δεδομένα με τη μορφή αντικειμένων, τα οποία τοποθετούνται σε ξεχωριστά αρχεία. Για να αυξηθεί η αποτελεσματικότητα της εργασίας με το αποθετήριο, τα αντικείμενα τοποθετούνται επιπλέον σε αρχεία pack, στα οποία οι πληροφορίες παρουσιάζονται με τη μορφή μιας ροής αντικειμένων που ακολουθούν το ένα μετά το άλλο (μια παρόμοια μορφή χρησιμοποιείται κατά τη μεταφορά αντικειμένων με το git fetch και git εντολές push). Ένα αρχείο ευρετηρίου (.idx) δημιουργείται για κάθε αρχείο πακέτου, το οποίο σας επιτρέπει να προσδιορίσετε πολύ γρήγορα τη μετατόπιση στο αρχείο πακέτου με την οποία αποθηκεύεται το δεδομένο αντικείμενο από το αναγνωριστικό αντικειμένου.

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

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

    Διατίθεται σύστημα ελέγχου πηγής Git 2.41

  • Προστέθηκε υποστήριξη για τη διαβίβαση κεφαλίδων WWW-Authenticate μεταξύ του χειριστή διαπιστευτηρίων και της υπηρεσίας ελέγχου ταυτότητας στο πρωτόκολλο "βοηθός διαπιστευτηρίων" που χρησιμοποιείται για τη μεταβίβαση διαπιστευτηρίων κατά την πρόσβαση σε περιορισμένους χώρους αποθήκευσης. Η υποστήριξη για την κεφαλίδα WWW-Authenticate σάς επιτρέπει να μεταβιβάζετε παραμέτρους εύρους OAuth σε πιο λεπτομερή διαχωρισμό της πρόσβασης των χρηστών στα αποθετήρια και να οριοθετείτε τα πεδία που είναι διαθέσιμα για αιτήματα.
  • Προστέθηκε η επιλογή μορφής "%(εμπρός-πίσω: )", το οποίο σας επιτρέπει να λαμβάνετε αμέσως πληροφορίες σχετικά με τον αριθμό των δεσμεύσεων που υπάρχουν ή που απουσιάζουν σε ένα συγκεκριμένο κλάδο, σε σχέση με έναν άλλο κλάδο (πόσο ένας κλάδος υστερεί ή προηγείται ενός άλλου στο επίπεδο των δεσμεύσεων). Προηγουμένως, η λήψη αυτών των πληροφοριών απαιτούσε δύο ξεχωριστές εντολές: "git rev-list --count main..my-feature" για να ληφθεί ο μοναδικός αριθμός δεσμεύσεων σε έναν κλάδο και "git rev-list --count my-feature.. main" για να λάβετε τον αριθμό των δεσμεύσεων που λείπουν. Τώρα τέτοιοι υπολογισμοί μπορούν να μειωθούν σε μία μόνο εντολή, η οποία απλοποιεί τους χειριστές γραφής και μειώνει τον χρόνο εκτέλεσης. Για παράδειγμα, για να δείξετε μη συγχωνευμένους κλάδους και να αξιολογήσετε εάν βρίσκονται πίσω ή μπροστά από τον κύριο κλάδο τους, μπορείτε να χρησιμοποιήσετε ένα one-liner: $ git for-each-ref --no-merged=origin/HEAD \ --format=' %(refname:short) %(ahead-behind :origin/HEAD)' \ refs/heads/tb/ | στήλη -t tb/cruft-extra-tips 2 96 tb/for-each-ref—εξαιρούνται 16 96 tb/roaring-bitmaps 47 3 αντί για το σενάριο που χρησιμοποιήθηκε προηγουμένως, το οποίο είναι 17 φορές πιο αργό: $ git για κάθε αναφορά — format='%(refname:short)' --no-merged=origin/HEAD \ refs/heads/tb | while read ref do ahead="$(git rev-list --count origin/HEAD..$ref)"back="$(git rev-list --count $ref..origin/HEAD)" printf "%s %d %d\n" "$ref" "$ahead" "$behind" έγινε | στήλη -t tb/cruft-extra-tips 2 96 tb/for-each-ref—exclude 16 96 tb/roaring-bitmaps 47 3
  • Προστέθηκε η επιλογή "--porcelain" στην εντολή "git fetch", η οποία παράγει έξοδο στη μορφή " ”, λιγότερο ευανάγνωστο, αλλά πιο βολικό για ανάλυση σε σενάρια.
  • Προστέθηκε η ρύθμιση "fetch.hideRefs" για την επιτάχυνση των λειτουργιών "git fetch" αποκρύπτοντας μέρος των συνδέσμων στο τοπικό αποθετήριο στο στάδιο της επαλήθευσης ότι ο διακομιστής έστειλε το πλήρες σύνολο αντικειμένων, γεγονός που εξοικονομεί χρόνο περιορίζοντας τον έλεγχο μόνο στους διακομιστές από το οποίο ανακτώνται άμεσα δεδομένα. Για παράδειγμα, κατά τη δοκιμή σε ένα σύστημα με αποθετήρια που περιέχουν μεγάλο αριθμό παρακολουθούμενων εξωτερικών συνδέσμων, εξαιρουμένων όλων των συνδέσμων εκτός από αυτούς που απευθύνονται στον διακομιστή στόχο $remote μείωσε τη λειτουργία "git fetch" από 20 λεπτά σε 30 δευτερόλεπτα. $ git -c fetch.hideRefs=refs -c fetch.hideRefs=!refs/remotes/$remote \ fetch $remote
  • Η εντολή "git fsck" υλοποιεί τη δυνατότητα ελέγχου για καταστροφή, αντιστοίχιση αθροίσματος ελέγχου και ορθότητα τιμών σε bitmaps προσβασιμότητας και αντίστροφα ευρετήρια.
  • Η εντολή "git clone --local" εμφανίζει τώρα ένα σφάλμα κατά την προσπάθεια αντιγραφής από ένα χώρο αποθήκευσης που περιέχει συμβολικούς συνδέσμους μέσα στο $GIT_DIR.

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο