La version du systÚme de gestion de code source distribué Git 2.56 est maintenant disponible. Le code de Git est distribué sous la licence GPLv2+. Par rapport à la version précédente, cette nouvelle version intÚgre 748 modifications, impliquant la collaboration de 104 développeurs, dont 39 ont participé au développement de Git pour la premiÚre fois. Les principales nouveautés (1, 2, 3) :
- AjoutĂ© le mode « git add âresolved » pour rĂ©soudre les conflits lors de la fusion de branches, qui vĂ©rifie les fichiers Ă la recherche de marqueurs de conflit et, en cas de dĂ©tection d'un marqueur dans un fichier, renvoie une erreur, n'indexe aucun des fichiers et affiche une liste des fichiers nĂ©cessitant correction. Contrairement Ă la commande « git add âupdate », le nouveau mode traite uniquement les fichiers en conflit, tandis que les fichiers modifiĂ©s non liĂ©s au conflit sont ignorĂ©s, permettant de terminer la fusion des branches en toute sĂ©curitĂ©, mĂȘme si d'autres modifications non terminĂ©es sont prĂ©sentes dans le rĂ©pertoire de travail (la commande « git add âupdate » ajoutait Ă l'index tous les fichiers modifiĂ©s prĂ©cĂ©demment suivis dans le rĂ©pertoire de travail).
- Le traitement des grands dĂ©pĂŽts a Ă©tĂ© considĂ©rablement accĂ©lĂ©rĂ© grĂące Ă l'optimisation de l'algorithme de recherche des derniers commits communs lors de la fusion de branches et de la comparaison des commits. Le processus prend dĂ©sormais en compte les commits appartenant exclusivement Ă une des branches, ce qui permet d'arrĂȘter le scan immĂ©diatement aprĂšs la dĂ©couverte de tous les ancĂȘtres communs possibles, sans perdre de temps Ă parcourir davantage l'historique des modifications. Dans l'un des dĂ©pĂŽts testĂ©s, la vitesse de recherche a augmentĂ© en moyenne de 20 fois, tandis que dans un autre, l'accĂ©lĂ©ration a atteint 70 fois. Lors de l'exĂ©cution de la commande « git merge-base âall v4.8 v4.9 » dans un dĂ©pĂŽt avec le noyau Linux, le nombre d'Ă©tapes de traversal a diminuĂ© de 167 000 Ă 3 800.
- Le mode de reconditionnement « âpath-walk » a Ă©tĂ© adaptĂ© pour une utilisation serveur, permettant de crĂ©er des fichiers pack plus compacts en regroupant les objets par leur chemin dans l'arbre des rĂ©pertoires (par exemple, pour le dĂ©pĂŽt Fluent UI, l'utilisation de « âpath-walk » a permis de rĂ©duire la taille du fichier pack de 558 Mo Ă 164 Mo). Dans la nouvelle version, il est dĂ©sormais possible d'utiliser le mode « âpath-walk » en conjonction avec des cartes de visibilitĂ© (reachability bitmap) et des Ăźlots de delta (delta islands), utilisĂ©s par les hĂ©bergeurs Git pour accĂ©lĂ©rer les opĂ©rations et isoler les forks du dĂ©pĂŽt principal.
- Les goulets d'Ă©tranglement ayant conduit Ă des calculs excessifs dans de grands dĂ©pĂŽts ont Ă©tĂ© Ă©liminĂ©s : les vĂ©rifications d'Ă©tat des fichiers lors de l'Ă©criture dans reftable ont Ă©tĂ© supprimĂ©es ; la rescane des listes a Ă©tĂ© exclue Ă chaque insertion de nouveau pack-file ; les opĂ©rations avec reftable, oĂč un grand nombre d'enregistrements de suppression s'accumulaient, ont Ă©tĂ© accĂ©lĂ©rĂ©es ; et le fonctionnement de 'git diff' a Ă©tĂ© optimisĂ© lors de la spĂ©cification de contraintes par chemins de fichiers. AprĂšs les optimisations, le travail avec reftable lors d'un grand nombre d'effacements a Ă©tĂ© accĂ©lĂ©rĂ© de 65 fois (de 13 secondes Ă 0,2 seconde), tandis que l'exĂ©cution de la commande problĂ©matique 'git diff' dans le dĂ©pĂŽt Chromium contenant 500000 Ă©lĂ©ments dans l'index prend dĂ©sormais 0,07 seconde au lieu de 8 minutes.
- La commande expérimentale 'git history', qui fournit des fonctionnalités pour réécrire l'historique des modifications, a été enrichie d'une opération 'git history drop' permettant de supprimer un commit sélectionné tout en rattachant automatiquement ses descendants au commit parent.
- La commande 'git branch âdelete-merged âorigin/*â âtopic-*'â a Ă©tĂ© ajoutĂ©e pour enlever en toute sĂ©curitĂ© des groupes de branches locales dont les modifications ont dĂ©jĂ Ă©tĂ© transfĂ©rĂ©es vers le dĂ©pĂŽt externe. Des masques peuvent ĂȘtre utilisĂ©s pour filtrer les branches et les dĂ©pĂŽts. Pour analyser les candidats Ă la suppression, sans exĂ©cuter la commande, le flag 'âdry-run' peut ĂȘtre utilisĂ©.
- La commande 'git refs create|update|delete|rename' a été ajoutée, qui regroupe les opérations de bas niveau pour créer, supprimer, renommer et mettre à jour des références.
- La commande 'git bisect run' a reçu une option 'âreset-when-found=[]' qui ramĂšne automatiquement le dĂ©pĂŽt Ă l'Ă©tat antĂ©rieur au dĂ©but de la recherche ou laisse le commit problĂ©matique actif, sans nĂ©cessiter l'exĂ©cution sĂ©parĂ©e de la commande 'git bisect reset'.
- Un flag 'âlinearize' a Ă©tĂ© ajoutĂ© Ă la commande 'git replay' pour utiliser une topologie de fusion plate, semblable Ă 'git rebase âno-rebase-merges', mais sans faire appel Ă l'arbre de travail.
- La commande 'git log âfollow' a mis en Ćuvre le suivi des renommages de fichiers dans une histoire des modifications non linĂ©aire, par exemple lors de la fusion de sous-brins. Le chemin vers le fichier est dĂ©sormais enregistrĂ© sĂ©parĂ©ment pour chaque commit parent, ce qui rend le rĂ©sultat indĂ©pendant de l'ordre de parcours de l'historique des commits.
- Ajout de la possibilité d'appliquer la commande «git repack -a --filter=blob:limit=1m --drop-filtered» pour supprimer les gros objets blob chargés à la demande depuis un dépÎt externe et non utilisés dans l'index actuel. Lors de la référence ultérieure à ces objets, ils seront automatiquement rechargés.
- Dans la commande «git log --graph», pour les graphes avec plusieurs racines indĂ©pendantes, l'ajout de retraits a Ă©tĂ© mis en Ćuvre pour sĂ©parer visuellement les commits non liĂ©s.
- Détection des fautes typiques, telles que l'indication «git push origin/main» au lieu de «git push origin main» ou «git branch --set-upstream-to origin main» au lieu de «git branch --set-upstream-to=origin/main», avec un rappel pour utiliser la version correcte.
Source : opennet.ru
