Έκδοση ελέγχου πηγής Git 2.39

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

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

  • Η εντολή "git shortlog", που προορίζεται για την εμφάνιση περιλήψεων με στατιστικά στοιχεία από το ιστορικό αλλαγών, έχει προσθέσει μια επιλογή "-group" για αυθαίρετη ομαδοποίηση δεσμεύσεων ανά πεδία που δεν περιορίζονται στον συγγραφέα ή τον committer. Για παράδειγμα, για να εμφανίσετε μια λίστα προγραμματιστών με πληροφορίες σχετικά με τον αριθμό των αλλαγών, λαμβάνοντας υπόψη τους βοηθούς που αναφέρονται στο πεδίο "Συγγραφέας από κοινού", θα μπορούσατε να χρησιμοποιήσετε την εντολή: git shortlog -ns --group=author - -group=trailer:συν-συγγραφέας

    Η έξοδος Shortlog μπορεί να συγκεντρωθεί χρησιμοποιώντας προσδιοριστές μορφοποίησης και η επιλογή "--group" μπορεί να απλοποιήσει σημαντικά τη δημιουργία σύνθετων αναφορών και να εξαλείψει την ανάγκη για πρόσθετες εντολές ταξινόμησης. Για παράδειγμα, για να δημιουργήσετε μια αναφορά με πληροφορίες σχετικά με το πόσες δεσμεύσεις για μια δεδομένη έκδοση έγιναν αποδεκτές κάθε μήνα, μπορείτε να καθορίσετε: git shortlog v2.38.0.. —date='format:%Y-%m' —group=' %cd' -s 2 2022-08 47 2022-09 405 2022-10 194 2022-11 5 2022-12 Προηγουμένως, για να εκτελέσετε μια παρόμοια λειτουργία, θα ήταν απαραίτητο να χρησιμοποιήσετε τα βοηθητικά προγράμματα ταξινόμησης και uniq: git log2.38.0 vXNUMX. .. —date='format:%Y -%m' —format='%cd' | ταξινόμηση | uniq -γ

  • Οι δυνατότητες του μηχανισμού "cruft pack", που έχει σχεδιαστεί για τη συσκευασία μη προσβάσιμων αντικειμένων που δεν αναφέρονται στο αποθετήριο (δεν αναφέρονται από κλάδους ή ετικέτες), έχουν επεκταθεί. Τα μη προσβάσιμα αντικείμενα διαγράφονται από τον συλλέκτη σκουπιδιών, αλλά παραμένουν στο χώρο αποθήκευσης για ορισμένο χρονικό διάστημα προτού διαγραφούν για να αποφευχθούν οι συνθήκες αγώνα. Ο μηχανισμός "cruft pack" σάς επιτρέπει να αποθηκεύετε όλα τα μη προσβάσιμα αντικείμενα σε ένα αρχείο πακέτου και να εμφανίζετε δεδομένα για το χρόνο τροποποίησης κάθε αντικειμένου σε ξεχωριστό πίνακα, αποθηκευμένο σε ξεχωριστό αρχείο με την επέκταση ".mtimes", έτσι ώστε να δεν επικαλύπτεται με τον συνολικό χρόνο τροποποίησης.

    Το χρονικό διάστημα κατά το οποίο τα μη προσβάσιμα αντικείμενα παραμένουν στο αποθετήριο προτού διαγραφούν πραγματικά καθορίζεται από την επιλογή «—prune=» " Ωστόσο, ενώ η καθυστέρηση πριν από τη διαγραφή είναι ένας αρκετά αποτελεσματικός και πρακτικός τρόπος για να αποφευχθεί η καταστροφή του χώρου αποθήκευσης λόγω των συνθηκών αγώνα, δεν είναι 100% αξιόπιστη. Για να διευκολυνθεί η επαναφορά ενός κατεστραμμένου αποθετηρίου, η νέα έκδοση παρέχει τη δυνατότητα αποθήκευσης αντικειμένων που λείπουν προσθέτοντας την επιλογή "--expire-to" στην εντολή "git repack", η οποία σας επιτρέπει να καθορίσετε ένα αρχείο για να δημιουργήσετε ένα εξωτερικό αντίγραφο όλων των διαγραμμένων αντικειμένων. Για παράδειγμα, για να αποθηκεύσετε μη προσβάσιμα αντικείμενα που δεν έχουν αλλάξει τα τελευταία 5 λεπτά στο αρχείο backup.git, μπορείτε να χρησιμοποιήσετε την εντολή: git repack --cruft --cruft-expiration=5.minutes.ago -d --expire -to=../backup.git

  • Αυξήθηκε σημαντικά (έως και 70%) η ταχύτητα της λειτουργίας "git grep -cached" κατά την αναζήτηση σε περιοχές που χρησιμοποιούν μερική κλωνοποίηση (sparse-checkout) και για τις οποίες υπάρχουν μερικοί δείκτες (sparse index). Προηγουμένως, κατά τον καθορισμό της επιλογής "-cached", η αναζήτηση πραγματοποιούνταν πρώτα στο κανονικό ευρετήριο και στη συνέχεια στο μερικό, γεγονός που οδήγησε σε αισθητές καθυστερήσεις κατά την αναζήτηση σε μεγάλα αποθετήρια.
  • Η επαλήθευση της συνοχής των νέων αντικειμένων από τον διακομιστή προτού τοποθετηθούν στο χώρο αποθήκευσης κατά τη λειτουργία "git push" έχει επιταχυνθεί. Με τη μετάβαση στη λογιστική μόνο για δηλωμένους συνδέσμους κατά τον έλεγχο, σε ένα δοκιμαστικό αποθετήριο με 7 εκατομμύρια συνδέσμους, εκ των οποίων μόνο το 3% καλύπτεται από τη λειτουργία ώθησης, οι βελτιστοποιήσεις που εισήχθησαν κατέστησαν δυνατή τη μείωση του χρόνου ελέγχου κατά 4.5 φορές.
  • Για προστασία από πιθανές υπερχειλίσεις ακεραίων στον κώδικα, η εντολή "git apply" περιορίζει το μέγιστο μέγεθος των ενημερώσεων κώδικα που μπορούν να υποβληθούν σε επεξεργασία. Εάν το μέγεθος της ενημερωμένης έκδοσης κώδικα υπερβαίνει το 1 GB, θα εμφανιστεί τώρα ένα σφάλμα.
  • Για προστασία από πιθανές ευπάθειες, έχουν γίνει αλλαγές για τον καθαρισμό περιττών πληροφοριών από τις κεφαλίδες που έχουν οριστεί κατά τη χρήση της λειτουργικής μονάδας h2h3 με την επιλογή GIT_TRACE_CURL=1 ή GIT_CURL_VERBOSE=1 μαζί με το HTTP/2.
  • Όταν εκτελείτε check out σε έναν κλάδο που είναι συμβολικός σύνδεσμος προς έναν άλλο κλάδο, η εντολή "git symbolic-ref HEAD" εμφανίζει τώρα το όνομα του κλάδου προορισμού και όχι το όνομα του συμβολικού συνδέσμου.
  • Προστέθηκε υποστήριξη για το όρισμα @{-1} στην επιλογή "--edit-description" ("git branch —edit-description @{-1}") για την επεξεργασία της περιγραφής ενός προηγούμενου κλάδου.
  • Προστέθηκε η εντολή "git merge-tree --stdin" για να περάσει μια λίστα επιλογών μέσω τυπικής εισαγωγής.
  • Στα συστήματα αρχείων δικτύου, ο χειριστής fsmonitor, ο οποίος παρακολουθεί τις αλλαγές στο σύστημα αρχείων, είναι απενεργοποιημένος από προεπιλογή.

Πηγή: opennet.ru

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