Llançament del sistema de control de font distribuït Git 2.22

Presentat llançament d'un sistema de control de font distribuït Git 2.22.0. Git és un dels sistemes de control de versions més populars, fiables i d'alt rendiment, que ofereix eines de desenvolupament flexibles no lineals basades en ramificacions i fusions. Per garantir la integritat de l'historial i la resistència als canvis retroactius, s'utilitza hashing implícit de tot l'historial anterior a cada commit, i també és possible certificar etiquetes i commits individuals amb signatures digitals dels desenvolupadors.

En comparació amb la versió anterior, la nova versió va incloure 745 canvis, preparats amb la participació de 74 desenvolupadors, dels quals 18 van participar en el desenvolupament per primera vegada. El principal innovacions:

  • Disponible des del llançament 1.18, el nou mode commit rebase "git rebase --rebase-merges" substitueix l'antiga opció "--preserve-merges", que ara està obsoleta. L'operació "git rebase" s'utilitza per substituir una sèrie de commits per una nova commit base, per exemple, per moure una branca separada que està desenvolupant alguna característica nova a l'estat actual de la branca mestra, que inclou correccions afegides després de la branca. :

    o - o - o (la meva característica)

    /

    o - o - o - o - o (mestre)

    o - o - o (la meva característica)

    /

    o - o - o - o - o (mestre)

    Per preservar l'estructura de la branca en una branca migrada, prèviament es podia utilitzar l'opció "--preserve-merges", que, quan s'executava en mode interactiu (git rebase -i --preserve-merges), permetia editar l'historial de commits, però no garanteix la preservació completa de l'estructura del dipòsit. El nou mode "--rebase-merges" us permet preservar l'estructura dels canvis a la branca que s'està migrant, alhora que ofereix una gamma completa d'operacions interactives, com ara la supressió, el reagrupament i el canvi de nom de commits.

    Per exemple, "--rebase-merges" permet Torneu a pujar les confirmacions d'una branca separada a una branca mestra més nova, mantenint l'estructura de la branca a la branca migrada, i feu alguns canvis a les notes de confirmació sobre la marxa.

  • S'ha afegit suport per crear una nova branca basada en el resultat de determinar la base de fusió d'altres dues branques (base de combinació, vinculació a un avantpassat comú) mitjançant les construccions "git branch new A...B" i "git checkout -b new A...B", en què "A ...B" implica definir una base de fusió entre dues confirmacions especificades, de manera similar a com "git checkout A...B" desplaça el HEAD a la confirmació base i "diff A. ..B" mostra els canvis entre la confirmació "B" i el mateix que la confirmació "A" "Ancestor.

    Per exemple, quan es treballa en una branca de la meva característica separada, aquesta característica es pot utilitzar quan es vol començar des d'una branca diferent, per exemple, des del mateix lloc de la branca mestra des del qual es va extreure la branca de la meva característica. Anteriorment, això requeria examinar manualment el registre de canvis, cosa que era inconvenient si teníeu un gran historial de canvis, i després executar "git merge-base master my-feature" per calcular el hash de la base de combinació entre les branques mestre i my-feature. i creant una nova branca relativa a l'avantpassat comú " git branch my-other-feature hash ". A Git 2.22, podeu utilitzar la sintaxi "git branch my-other-feature A...B" per crear una branca relativa a la base de combinació d'altres dues branques;

  • S'ha afegit l'opció "git branch --show-current" per mostrar el nom de la branca obtinguda durant l'operació de pagament;
  • S'ha afegit l'opció “git checkout —no-overlay — dir”, que permet, quan es realitza una operació de pagament, portar el contingut del directori dir a un formulari que es correspon completament amb l'estat de la branca mestra. Per exemple, si hi ha un fitxer a la còpia local del directori directori que no es troba a la branca mestra, per defecte quan s'executa "git checkout master - dir" es deixarà, i si el "--no-overlay ” s'especifica l'opció, s'eliminarà;
  • L'ordre "git diff" utilitza una API universal per analitzar opcions, que permet unificar el maneig d'opcions amb altres utilitats git. Per exemple, a “git diff”, totes les opcions ara tenen els seus antagonistes (“--function-context” i “--no-function-context”);
  • S'ha afegit la possibilitat de filtrar les etiquetes esteses adjuntes a les confirmacions a la sortida del "git log" ("tràiler" - indicadors d'informació addicionals, com ara Signed-off-by i Co-autored-by). És possible filtrar les etiquetes tant per clau com per valor, per exemple:
    "git log --pretty="%(trailers:key=Revisat-per,valueonly)";

  • S'ha afegit un nou motor de traça, Trace2, que ofereix un format de sortida més flexible i estructurat. Trace2 us permet recopilar telemetria sobre les operacions executades i les dades de rendiment per a una anàlisi i depuració més detallada (el controlador és assignat per l'usuari, no s'envia cap dada externament);
  • S'ha fet més llegible l'informe "git bisect", en el qual ara es ressalten més clarament les confirmacions problemàtiques i es mostren estadístiques resum dels canvis per a cada fitxer (a nivell del nombre de línies canviades);
  • Les heurístiques per determinar els canvis de nom de directoris s'han reelaborat per eliminar la instal·lació falsa d'etiquetes de canvi de nom. En cas de dubte, aquests directoris ara es marquen com a conflictius;
  • Es mostra un avís quan intenteu instal·lar una etiqueta en una altra etiqueta, cosa que normalment es fa per error i pot portar a establir l'etiqueta en una confirmació incorrecta (per exemple, una construcció com "git tag -f -m "missatge actualitzat" my-tag1 my- tag2″ donarà lloc a una etiqueta que es creés a l'etiqueta antiga, mentre que el desenvolupador esperava que la nova etiqueta s'instal·lés a la confirmació apuntada per l'etiqueta antiga);
  • La generació està habilitada per als dipòsits de mapes de bits (estructura de "maps de bits d'accessibilitat" basada en disc), que emmagatzemen dades sobre conjunts d'objectes disponibles per a cada confirmació i us permeten determinar ràpidament la presència d'un objecte base. Aquesta estructura redueix significativament el temps d'execució de les operacions de recuperació de dades (git fetch).

Font: opennet.ru

Afegeix comentari