Αποδέσμευση του συστήματος ελέγχου κατανεμημένης πηγής Git 2.22

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

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

  • Διαθέσιμο από την έκδοση 1.18, η νέα λειτουργία επαναφοράς δέσμευσης "git rebase --rebase-merges" αντικαθιστά την παλιά επιλογή "--preserve-merges", η οποία έχει πλέον καταργηθεί. Η λειτουργία "git rebase" χρησιμοποιείται για την αντικατάσταση μιας σειράς δεσμεύσεων με μια νέα δέσμευση βάσης, για παράδειγμα, για τη μετακίνηση ενός ξεχωριστού κλάδου που αναπτύσσει κάποια νέα δυνατότητα στην τρέχουσα κατάσταση του κύριου κλάδου, η οποία περιλαμβάνει διορθώσεις που προστέθηκαν μετά τη διακλάδωση :

    o - o - o (το χαρακτηριστικό μου)

    /

    o - o - o - o - o (κύριος)

    o - o - o (το χαρακτηριστικό μου)

    /

    o - o - o - o - o (κύριος)

    Για να διατηρηθεί η δομή του κλάδου σε έναν κλάδο που έχει μετεγκατασταθεί, θα μπορούσε προηγουμένως να χρησιμοποιηθεί η επιλογή "-preserve-merges", η οποία, όταν εκτελείται σε διαδραστική λειτουργία (git rebase -i -preserve-merges), επέτρεπε την επεξεργασία του ιστορικού δέσμευσης, αλλά δεν το έκανε εγγυώνται την πλήρη διατήρηση της δομής του αποθετηρίου. Η νέα λειτουργία "--rebase-merges" σάς επιτρέπει να διατηρήσετε τη δομή των αλλαγών στον κλάδο που μετεγκαθίσταται, παρέχοντας ταυτόχρονα ένα πλήρες φάσμα διαδραστικών λειτουργιών, συμπεριλαμβανομένων των δεσμεύσεων διαγραφής, επαναομαδοποίησης και μετονομασίας.

    Για παράδειγμα, "--rebase-merges" позволяет εκ νέου μεταφόρτωση δεσμεύσεων από έναν ξεχωριστό κλάδο σε έναν νεότερο κύριο κλάδο, διατηρώντας παράλληλα τη δομή του κλάδου στον κλάδο που μετεγκαταστάθηκε και κάντε ορισμένες αλλαγές στις σημειώσεις δέσμευσης εν κινήσει.

  • Προστέθηκε υποστήριξη για τη δημιουργία ενός νέου κλάδου με βάση το αποτέλεσμα του προσδιορισμού της βάσης συγχώνευσης δύο άλλων κλάδων (βάση συγχώνευσης, σύνδεση με έναν κοινό πρόγονο) χρησιμοποιώντας τις κατασκευές "git branch new A...B" και "git checkout -b new A...B", στο οποίο το "A ...B" περιλαμβάνει τον καθορισμό μιας βάσης συγχώνευσης μεταξύ δύο καθορισμένων δεσμεύσεων, παρόμοια με το πώς το "git checkout A...B" μετατοπίζει το HEAD στη βασική δέσμευση και "διαφορά Α. Το ..B δείχνει τις αλλαγές μεταξύ της δέσμευσης "B" και το ίδιο με το commit "A" "Acestor.

    Για παράδειγμα, όταν εργάζεστε σε έναν ξεχωριστό κλάδο my-feature, αυτή η δυνατότητα μπορεί να χρησιμοποιηθεί όταν θέλετε να ξεκινήσετε από έναν διαφορετικό κλάδο, για παράδειγμα, από την ίδια θέση στον κύριο κλάδο από τον οποίο έγινε έλεγχος του κλάδου my-feature. Προηγουμένως, αυτό απαιτούσε τη μη αυτόματη εξέταση του αρχείου καταγραφής αλλαγών, το οποίο δεν ήταν βολικό εάν είχατε μεγάλο ιστορικό αλλαγών, και στη συνέχεια να εκτελέσετε το "git merge-base master my-feature" για να υπολογίσετε τον κατακερματισμό της βάσης συγχώνευσης μεταξύ των κλάδων master και my-feature και δημιουργία ενός νέου κλάδου σε σχέση με τον κοινό πρόγονο " git branch my-other-feature hash." Στο Git 2.22, μπορείτε να χρησιμοποιήσετε τη σύνταξη "git branch my-other-feature A...B" για να δημιουργήσετε έναν κλάδο σε σχέση με τη βάση συγχώνευσης δύο άλλων κλάδων.

  • Προστέθηκε η επιλογή "git branch --show-current" για την εμφάνιση του ονόματος του υποκαταστήματος που λήφθηκε κατά τη λειτουργία ολοκλήρωσης αγοράς.
  • Προστέθηκε η επιλογή "git checkout —no-overlay — dir", η οποία επιτρέπει, κατά την εκτέλεση μιας λειτουργίας ολοκλήρωσης αγοράς, να φέρετε τα περιεχόμενα του καταλόγου dir σε μια φόρμα που αντιστοιχεί πλήρως στην κατάσταση του κύριου κλάδου. Για παράδειγμα, εάν υπάρχει ένα αρχείο στο τοπικό αντίγραφο του καταλόγου dir που δεν βρίσκεται στον κύριο κλάδο, τότε από προεπιλογή κατά την εκτέλεση του "git checkout master - dir" θα παραμείνει και εάν το "--no-overlay ” ορίζεται η επιλογή, θα διαγραφεί.
  • Η εντολή "git diff" χρησιμοποιεί ένα καθολικό API για την ανάλυση επιλογών, το οποίο καθιστά δυνατή την ενοποίηση του χειρισμού επιλογών με άλλα βοηθητικά προγράμματα git. Για παράδειγμα, στο "git diff", όλες οι επιλογές έχουν πλέον τους ανταγωνιστές τους ("--function-context" και "--no-function-context").
  • Προστέθηκε η δυνατότητα φιλτραρίσματος εκτεταμένων ετικετών που συνδέονται με δεσμεύσεις στην έξοδο "καταγραφής git" ("τρέιλερ" - επισημάνσεις πρόσθετων πληροφοριών, όπως Signed-off-by και Co-authored-by). Είναι δυνατό να φιλτράρετε ετικέτες τόσο κατά κλειδί όσο και κατά τιμή, για παράδειγμα:
    "git log --pretty="%(trailers:key=Reviewed-by,valueonly)";

  • Προστέθηκε μια νέα μηχανή ανίχνευσης, η Trace2, που προσφέρει μια πιο ευέλικτη και δομημένη μορφή εξόδου. Το Trace2 σάς επιτρέπει να συλλέγετε τηλεμετρία σχετικά με εκτελεσμένες λειτουργίες και δεδομένα απόδοσης για πιο λεπτομερή ανάλυση και εντοπισμό σφαλμάτων (ο χειριστής εκχωρείται από τον χρήστη, δεν αποστέλλονται δεδομένα εξωτερικά).
  • Η αναφορά "git bisect" έχει γίνει πιο ευανάγνωστη, στην οποία οι προβληματικές δεσμεύσεις επισημαίνονται πλέον με μεγαλύτερη σαφήνεια και εμφανίζονται συνοπτικά στατιστικά στοιχεία για τις αλλαγές για κάθε αρχείο (στο επίπεδο του αριθμού των γραμμών που έχουν αλλάξει).
  • Τα ευρετικά για τον προσδιορισμό των μετονομασιών καταλόγων έχουν επεξεργαστεί εκ νέου για να εξαλειφθεί η λανθασμένη εγκατάσταση ετικετών μετονομασίας. Σε περίπτωση αμφιβολίας, αυτοί οι κατάλογοι επισημαίνονται πλέον ως αντικρουόμενοι.
  • Εμφανίζεται μια προειδοποίηση όταν προσπαθείτε να εγκαταστήσετε μια ετικέτα σε μια άλλη ετικέτα, η οποία συνήθως γίνεται κατά λάθος και μπορεί να οδηγήσει στον ορισμό της ετικέτας σε λάθος δέσμευση (για παράδειγμα, μια κατασκευή όπως "git tag -f -m "ενημερωμένο μήνυμα" my-tag1 my-tag2″ θα έχει ως αποτέλεσμα τη δημιουργία μιας ετικέτας στην παλιά ετικέτα, ενώ ο προγραμματιστής περίμενε ότι η νέα ετικέτα θα εγκατασταθεί στη δέσμευση που υποδεικνύεται από την παλιά ετικέτα).
  • Η δημιουργία είναι ενεργοποιημένη για αποθετήρια bitmap (δομή "bitmaps δυνατότητας πρόσβασης" που βασίζεται σε δίσκο), τα οποία αποθηκεύουν δεδομένα σχετικά με σύνολα αντικειμένων που είναι διαθέσιμα για κάθε δέσμευση και σας επιτρέπουν να προσδιορίσετε γρήγορα την παρουσία ενός αντικειμένου βάσης. Αυτή η δομή μειώνει σημαντικά τον χρόνο εκτέλεσης των λειτουργιών ανάκτησης δεδομένων (git fetch).

Πηγή: opennet.ru

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