Ανακοινώθηκε η έκδοση Git 2.55 του κατανεμημένου συστήματος ελέγχου πηγαίου κώδικα. Οι βασικές αλλαγές περιλαμβάνουν: την συμπερίληψη των builds του Rust από προεπιλογή, την υλοποίηση για Linux διεργασία fsmonitor, μια νέα στρατηγική για την ανασυσκευασία του αυξητικού δείκτη MIDX, την εντολή "git history fixup" για τη διόρθωση μιας υποβολής, τη βελτιστοποίηση της δημιουργίας bitmap διαθεσιμότητας αντικειμένων, την υποστήριξη για παράλληλη εκτέλεση hook και την εντολή "git format-rev". Το Git διατίθεται με άδεια χρήσης GPLv2+.
Σε σύγκριση με την προηγούμενη έκδοση, η νέα έκδοση περιλαμβάνει 505 αλλαγές που προετοιμάστηκαν με τη βοήθεια 100 προγραμματιστών, 33 εκ των οποίων ήταν καινούργιοι στην ανάπτυξη Git. Βασικά νέα χαρακτηριστικά (1, 2, 3):
- Η υποστήριξη στοιχείων γλώσσας Rust είναι ενεργοποιημένη από προεπιλογή. Ο μεταγλωττιστής rustc
Το Rust έχει προστεθεί στις εξαρτήσεις κατασκευής. Για να δημιουργήσετε χωρίς Rust, μπορείτε να χρησιμοποιήσετε τη σημαία "NO_RUST=1" κατά την εκτέλεση του βοηθητικού προγράμματος make ή "-Drust=disabled" κατά την εκτέλεση του "meson configure". Η δυνατότητα απενεργοποίησης της δημιουργίας με Rust θα υποστηρίζεται μέχρι την έκδοση 3.0 του Git, η οποία θα περιλαμβάνει το Rust ως απαιτούμενη εξάρτηση. Το Rust υλοποιεί ένα επίπεδο για φορητότητα μεταξύ των διαμορφώσεων κατακερματισμού SHA-1 και SHA-256, καθώς και ορισμένες εσωτερικές συναρτήσεις, όπως η κωδικοποίηση και η αποκωδικοποίηση ακεραίων μεταβλητού μήκους. Αναμένεται ότι πιο σημαντικά εσωτερικά στοιχεία του Git θα ξαναγραφτούν στο Rust στο μέλλον. - Η πειραματική εντολή "git history", η οποία παρέχει τη δυνατότητα επανεγγραφής του ιστορικού των αλλαγών, έχει ενημερωθεί με τη λειτουργία "git history fixup" για τη διόρθωση μιας υποβολής. Η λειτουργία "fixup" σάς επιτρέπει να μετακινείτε αλλαγές που προστέθηκαν μέσω του "git add" σε μια προηγούμενη υποβολή και να επανεγγράφετε αυτόματα όλες τις επόμενες υποβολές, παρόμοια με την εκτέλεση της εντολής "git commit --fixup=" . " και εκτελώντας το "git rebase --autosquash ~».
- Για πλατφόρμα Linux Έχει υλοποιηθεί η διεργασία παρασκηνίου fsmonitor, η οποία παρακολουθεί τις αλλαγές στο σύστημα αρχείων χρησιμοποιώντας τον μηχανισμό inotify και σας επιτρέπει να αποφύγετε τη διέλευση ολόκληρου του καταλόγου εργασίας κατά την εκτέλεση εντολών όπως η "git status". Μπορεί να ενεργοποιηθεί μέσω της ρύθμισης "core.fsmonitor".
- Η εντολή "git repack" έχει ενημερωθεί με την επιλογή "--write-midx=incremental". Αυτή η επιλογή εφαρμόζει μια νέα στρατηγική για την ενημέρωση των μεταδεδομένων στο αυξητικό ευρετήριο MIDX (ευρετήριο πολλαπλών πακέτων), εξαλείφοντας την ανάγκη επανασυσκευασίας ολόκληρου του ευρετηρίου. Το αυξητικό ευρετήριο πολλαπλών πακέτων χρησιμοποιεί επίπεδα αντί για ένα μόνο μεγάλο ευρετήριο που περιέχει πληροφορίες σχετικά με την κατανομή των αντικειμένων σε όλα τα αρχεία πακέτων. Κάθε επίπεδο καλύπτει έναν συγκεκριμένο αριθμό αρχείων πακέτων και αποθηκεύεται σε ξεχωριστό αρχείο bitmap. Αυτή η δομή επιτρέπει την προσθήκη δεδομένων σχετικά με αντικείμενα σε νέα αρχεία πακέτων στο ευρετήριο, συνδέοντας νέα επίπεδα στο ευρετήριο χωρίς να ανακατασκευάζονται τα υπάρχοντα επίπεδα.
Η εντολή "git repack --write-midx=incremental" προσθέτει μια νέα στρώση στο αυξητικό ευρετήριο MIDX, συμπεριλαμβάνοντας τα πρόσφατα δημιουργημένα αρχεία συσκευασίας. Όταν συνδυάζεται με τη λειτουργία συσκευασίας αποθετηρίου "--geometric", η εντολή new επιτρέπει τον συνδυασμό νέων αντικειμένων από πολλά αρχεία συσκευασίας σε ένα μόνο μεγαλύτερο αρχείο συσκευασίας και, εάν είναι απαραίτητο, τη συσκευασία και συγχώνευση πολλαπλών γειτονικών στρώσεων του αυξητικού ευρετηρίου MIDX. Αυτή η στρατηγική επιτρέπει στο "git repack" να ξαναγράψει μόνο τα ανώτερα επίπεδα, αφήνοντας άθικτα τα παλαιότερα, μεγαλύτερα επίπεδα. Αποτρέπει επίσης την ανεξέλεγκτη ανάπτυξη της αλυσίδας επιπέδων διατηρώντας τον συνολικό αριθμό στρώσεων ανάλογο με τον λογάριθμο του συνολικού αριθμού αντικειμένων.
- Η δημιουργία bitmap διαθεσιμότητας αντικειμένων έχει βελτιστοποιηθεί σημαντικά μέσω ενός νέου αλγορίθμου διέλευσης δέντρων αντικειμένων που εξαλείφει την περιττή αναδρομή, την προσωρινή αποθήκευση των θέσεων αντικειμένων, την ταξινόμηση των bitmap πριν από τον συνδυασμό τους με τη λειτουργία XOR και την αναδιαμόρφωση του κώδικα για τη δημιουργία bitmap ψευδο-συγχώνευσης. Στο αποθετήριο δοκιμών, αυτές οι βελτιστοποιήσεις μείωσαν τον χρόνο δημιουργίας bitmap από 612 σε 294 δευτερόλεπτα.
- Η παράλληλη εκτέλεση ανεξάρτητων hooks είναι πλέον δυνατή σε αρχεία διαμόρφωσης. Τα hooks που επηρεάζουν ή λαμβάνουν υπόψη την κοινόχρηστη κατάσταση, όπως αυτά που αλλάζουν σημειώσεις commit ή επιθεωρούν ευρετήρια και το δέντρο εργασίας, δεν μπορούν να εκτελεστούν παράλληλα. Ωστόσο, τα hooks για έλεγχο linter και δοκιμή μονάδας μπορούν να εκτελεστούν παράλληλα. Τα hooks που επιτρέπουν την παράλληλη εκτέλεση διαμορφώνονται χρησιμοποιώντας την παράμετρο "hook.hook_name.parallel = true". Ο αριθμός των εργασιών που μπορούν να εκτελεστούν ταυτόχρονα καθορίζεται από τη ρύθμιση hook.jobs, hook. .jobs ή την επιλογή γραμμής εντολών "-j".
- Η εντολή "git pack-objects --path-walk" σας επιτρέπει πλέον να καθορίσετε φίλτρα όπως "blob:none", "blob:limit=" ", "δέντρο:0", "αντικείμενο:τύπος=" », «αραιό: " και "combine:". Στη δοκιμή, η απόρριψη blob κατά την εκτέλεση της εντολής "--path-walk" μείωσε το μέγεθος του δημιουργημένου αρχείου pack κατά 16%.
- Προστέθηκε η εντολή "git format-rev" για τη μορφοποίηση αναθεωρήσεων και ονομάτων αντικειμένων που αναφέρονται σε λίστες υποβολών ή βρίσκονται σε αυθαίρετο κείμενο (για παράδειγμα, αυτό μπορεί να χρησιμοποιηθεί σε hooks για την επεξεργασία σημειώσεων υποβολής).
git τελευταία τροποποίηση | git format-rev --stdin-mode=text --format=%an
Junio C Hamano ενσωματωμένο/commit.c
- Η διαφυγή των περισσότερων ακολουθιών ελέγχου τερματικού σε μηνύματα πληροφοριών και κείμενο σφάλματος που μεταδίδεται είναι ενεργοποιημένη από προεπιλογή. υπηρέτηςΚατά την πρόσβαση σε κακόβουλο περιεχόμενο υπηρέτης Τέτοιες ακολουθίες διαφυγής θα μπορούσαν να χρησιμοποιηθούν για την απόκρυψη ή την τροποποίηση της εξόδου, για παράδειγμα, μέσω ακολουθιών διαφυγής για την κίνηση του δρομέα και την εκκαθάριση κειμένου. Η υποστήριξη για ακολουθίες διαφυγής για την επισήμανση στοιχείων έχει διατηρηθεί.
- Η εντολή git checkout -m αποθηκεύει πλέον αυτόματα τις τοπικές αλλαγές που βρίσκονται σε διένεξη στην περιοχή αποθήκευσης χωρίς να απαιτείται να επιλύσετε αμέσως τη διένεξη.
- Η εντολή "git push" σάς επιτρέπει πλέον να προωθήσετε έναν κλάδο σε πολλούς εξωτερικούς διακομιστές Git με μία μόνο εντολή. Για παράδειγμα, για να προωθήσετε τον κύριο κλάδο όχι μόνο στον κύριο διακομιστή αλλά και σε mirrors, μπορείτε να δημιουργήσετε μια ομάδα "publish" από διακομιστές "github", "gitlab" και "mirror":
git config remotes.publish "καθρέφτης github gitlab"
git push δημοσίευση main - Η εντολή "git log --graph" έχει πλέον την επιλογή "--graph-lane-limit=" . » για να περιορίσετε τον αριθμό των κάθετων γραμμών κατά την οπτικοποίηση κλαδιών, κάτι που σας επιτρέπει να αφήσετε χώρο στην οθόνη για δεδομένα commit σε αποθετήρια με μεγάλο αριθμό κλαδιών.
...
* | | | | 619931f561 Συγχώνευση κλάδου 'dl/posix-unused-warning-clang'
|\ \ \ \ \
| * | | | ~ cf48887610 compat/posix.h: απλοποίηση της σύγκρισης GIT_GNUC_PREREQ()
| * | | | ~ ffd45926dc compat/posix.h: εκκαθάριση των GIT_GNUC_PREREQ() και UNUSED
|\ \ \ \ \~
| * | | | ~3f5203eeb4 ls-files: φιλτράρισμα pathspec πριν από το lstat - Οι εντολές "git log" και "git rev-list" έχουν πλέον την επιλογή "--max-count-oldest=" . , το οποίο σας επιτρέπει να επιλέξετε τις N παλαιότερες υποβολές σε ένα εύρος.
Πηγή: opennet.ru
