Ανακοινώθηκε η κυκλοφορία του συστήματος ελέγχου κατανεμημένης πηγής Git 2.37. Το Git είναι ένα από τα πιο δημοφιλή, αξιόπιστα και υψηλών επιδόσεων συστήματα ελέγχου εκδόσεων, που παρέχει ευέλικτα μη γραμμικά εργαλεία ανάπτυξης που βασίζονται στη διακλάδωση και τη συγχώνευση. Για να διασφαλιστεί η ακεραιότητα του ιστορικού και η αντίσταση σε αναδρομικές αλλαγές, χρησιμοποιείται σιωπηρή κατακερματισμός ολόκληρου του προηγούμενου ιστορικού σε κάθε δέσμευση, είναι επίσης δυνατή η πιστοποίηση μεμονωμένων ετικετών και δεσμεύσεων με ψηφιακές υπογραφές των προγραμματιστών.
Σε σύγκριση με την προηγούμενη έκδοση, υιοθετήθηκαν 395 αλλαγές στη νέα έκδοση, που προετοιμάστηκε με τη συμμετοχή 75 προγραμματιστών, εκ των οποίων οι 20 συμμετείχαν στην ανάπτυξη για πρώτη φορά. Βασικές καινοτομίες:
- Ο μηχανισμός των μερικών ευρετηρίων (αραιός δείκτης), που καλύπτει μόνο μέρος του αποθετηρίου, έχει τεθεί έτοιμος για ευρεία χρήση. Τα μερικά ευρετήρια μπορούν να βελτιώσουν την απόδοση και να εξοικονομήσουν χώρο σε αποθετήρια που εκτελούν λειτουργίες μερικής κλωνοποίησης (αραιό checkout) ή λειτουργούν με ένα ημιτελές αντίγραφο του αποθετηρίου. Η νέα έκδοση ολοκληρώνει την ενσωμάτωση μερικών ευρετηρίων στις εντολές git show, git sparse-checkout και git stash. Το πιο αξιοσημείωτο όφελος απόδοσης από τη χρήση μερικών ευρετηρίων φαίνεται με την εντολή git stash, η οποία έχει σημειώσει αύξηση 80% στην ταχύτητα εκτέλεσης σε ορισμένες περιπτώσεις.
- Ένας νέος μηχανισμός "cruft pack" έχει εφαρμοστεί για τη συσκευασία μη προσβάσιμων αντικειμένων που δεν αναφέρονται στο αποθετήριο (δεν αναφέρονται από κλάδους ή ετικέτες). Τα μη προσβάσιμα αντικείμενα διαγράφονται από τον συλλέκτη σκουπιδιών, αλλά παραμένουν στο χώρο αποθήκευσης για ορισμένο χρονικό διάστημα προτού διαγραφούν για να αποφευχθούν οι συνθήκες αγώνα. Για να παρακολουθήσετε την περίοδο εμφάνισης μη προσβάσιμων αντικειμένων, είναι απαραίτητο να επισυνάψετε ετικέτες σε αυτά με τον χρόνο αλλαγής παρόμοιων αντικειμένων, κάτι που δεν επιτρέπει την αποθήκευση τους σε ένα αρχείο πακέτου στο οποίο όλα τα αντικείμενα έχουν κοινό χρόνο αλλαγής. Προηγουμένως, η αποθήκευση κάθε αντικειμένου σε ξεχωριστό αρχείο οδηγούσε σε προβλήματα όταν υπήρχε μεγάλος αριθμός φρέσκων, μη προσβάσιμων αντικειμένων που δεν ήταν ακόμη κατάλληλα για διαγραφή. Ο προτεινόμενος μηχανισμός "cruft pack" σάς επιτρέπει να αποθηκεύετε όλα τα μη προσβάσιμα αντικείμενα σε ένα αρχείο πακέτου και να αντικατοπτρίζετε δεδομένα σχετικά με το χρόνο τροποποίησης κάθε αντικειμένου σε έναν ξεχωριστό πίνακα που είναι αποθηκευμένος σε ένα αρχείο με την επέκταση ".mtimes".
- Για Windows και macOS, υπάρχει ένας ενσωματωμένος μηχανισμός παρακολούθησης αλλαγών στο σύστημα αρχείων, που σας επιτρέπει να αποφύγετε την επανάληψη σε ολόκληρο τον κατάλογο εργασίας κατά την εκτέλεση λειτουργιών όπως η "κατάσταση git". Προηγουμένως, για την παρακολούθηση αλλαγών, εξωτερικά βοηθητικά προγράμματα για την παρακολούθηση αλλαγών στο FS, όπως το Watchman, μπορούσαν να συνδεθούν μέσω αγκίστρων, αλλά αυτό απαιτούσε την εγκατάσταση πρόσθετων προγραμμάτων και διαμόρφωσης. Τώρα η καθορισμένη λειτουργικότητα είναι ενσωματωμένη και μπορεί να ενεργοποιηθεί με την εντολή "git config core.fsmonitor true".
- Στην εντολή "git sparse-checkout", η υποστήριξη για μια εναλλακτική στη λειτουργία "—cone", η μέθοδος ορισμού προτύπων για μερική κλωνοποίηση, έχει κηρυχθεί απαρχαιωμένη, η οποία επιτρέπει, κατά τον προσδιορισμό του τμήματος του αποθετηρίου που υπόκειται σε η λειτουργία κλωνοποίησης, για τη λίστα μεμονωμένων αρχείων χρησιμοποιώντας τη σύνταξη «.gitignore», η οποία δεν επιτρέπει τη χρήση για βελτιστοποίηση μερικών ευρετηρίων.
- Αυξημένη ευελιξία στη ρύθμιση των παραμέτρων της κλήσης fsync() για flush αλλαγών στο δίσκο. Η υποστήριξη για τη στρατηγική συγχρονισμού "batch" έχει προστεθεί στην παράμετρο "core.fsyncMethod", η οποία επιτρέπει την επιτάχυνση της εργασίας κατά την εγγραφή μεγάλου αριθμού μεμονωμένων αρχείων, συσσωρεύοντας αλλαγές στη μνήμη cache εγγραφής, η οποία επαναφέρεται από μία μόνο fsync() κλήση. Η δοκιμή, η οποία κατέληξε στην προσθήκη 500 αρχείων χρησιμοποιώντας την εντολή "git add", ολοκληρώθηκε σε 0.15 δευτερόλεπτα όταν ενεργοποιήθηκε η νέα λειτουργία, ενώ η κλήση της fsync() χρειάστηκε 1.88 δευτερόλεπτα για κάθε αρχείο και χωρίς τη χρήση fsync - 0.06 δευτερόλεπτα .
- Οι εντολές διέλευσης κλάδου όπως "git log" και "git rev-list" έχουν τώρα μια επιλογή "-since-as-filter=X" που σας επιτρέπει να φιλτράρετε πληροφορίες σχετικά με δεσμεύσεις που είναι παλαιότερες από το "X". Σε αντίθεση με την επιλογή «—αφού», η νέα εντολή υλοποιείται ως φίλτρο που δεν σταματά την αναζήτηση μετά την πρώτη δέσμευση παλαιότερη από τον καθορισμένο χρόνο.
- Στην εντολή "git remote", όταν καθορίζετε τη σημαία "-v", εμφανίζονται πληροφορίες σχετικά με μερικούς κλώνους του αποθετηρίου.
- Προστέθηκε η ρύθμιση "transfer.credentialsInUrl", η οποία μπορεί να λάβει τις τιμές "warn", "die" και "allow". Εάν καθορίζεται στην παράμετρο «απομακρυσμένο. Διαπιστευτήρια απλού κειμένου .url, η απόπειρα εκτέλεσης μιας λειτουργίας "fetch" ή "push" θα αποτύχει με σφάλμα εάν η ρύθμιση "transfer.credentialsInUrl" οριστεί σε "die" ή μια προειδοποίηση εάν οριστεί σε "warn".
- Από προεπιλογή, είναι ενεργοποιημένη η νέα υλοποίηση της διαδραστικής λειτουργίας της εντολής «git add -i», που ξαναγράφεται από την Perl σε C.
Πηγή: opennet.ru
