AprÚs deux mois de développement, la version 2.39 du systÚme de gestion de versions distribuée Git a été publiée. Git est l'un des systÚmes de gestion de versions les plus populaires, fiables et performants, offrant des outils flexibles pour le développement non linéaire basés sur le branching et le merging. Pour maintenir l'intégrité de l'historique et la résistance aux modifications rétroactives, l'hachage implicite de tout l'historique antérieur est utilisé dans chaque commit, et il est également possible de certifier numériquement les signatures des développeurs pour certains tags et commits.
Comparé à la version précédente, cette nouvelle version intÚgre 483 modifications, préparées par la participation de 86 développeurs, dont 31 ont participé au développement pour la premiÚre fois. Les principales nouveautés :
- La commande « git shortlog », conçue pour afficher des rĂ©sumĂ©s avec des statistiques de l'historique des modifications, a Ă©tĂ© dotĂ©e de l'option « âgroup » pour le groupement arbitraire des commits par des champs ne se limitant pas Ă l'auteur ou au committer. Par exemple, pour afficher la liste des dĂ©veloppeurs avec des informations sur le nombre de modifications, en tenant compte des co-auteurs mentionnĂ©s dans le champ « Co-authored-by », vous pouvez utiliser la commande : git shortlog -ns âgroup=author âgroup=trailer:co-authored-by
La sortie de shortlog peut ĂȘtre agrĂ©gĂ©e Ă l'aide de spĂ©cificateurs de formatage, et l'option « âgroup » permet de simplifier considĂ©rablement la crĂ©ation de rapports complexes et d'Ă©viter l'exĂ©cution de commandes supplĂ©mentaires de tri. Par exemple, pour crĂ©er un rapport indiquant combien de commits pour une version donnĂ©e ont Ă©tĂ© acceptĂ©s chaque mois, on peut spĂ©cifier : git shortlog v2.38.0.. âdate='format:%Y-%m' âgroup='' -s 2 2022-08 47 2022-09 405 2022-10 194 2022-11 5 2022-12 Auparavant, pour effectuer une opĂ©ration similaire, il aurait fallu utiliser les utilitaires sort et uniq : git log v2.38.0.. âdate='format:%Y-%m' âformat='' | sort | uniq -c
- Les capacités du mécanisme «cruft packs», destiné à empaqueter les objets inaccessibles, pour lesquels il n'existe pas de lien dans le dépÎt (ni de branches ni de tags), ont été étendues. Les objets inaccessibles sont supprimés par le ramasse-miettes, mais restent dans le dépÎt pendant un certain temps avant leur suppression afin d'éviter des conditions de course. Le mécanisme «cruft packs» permet de stocker tous les objets inaccessibles dans un seul fichier pack, avec les données sur la date de modification de chaque objet reflétées dans une table séparée, enregistrée dans un fichier distinct ayant l'extension «.mtimes», afin qu'elles ne se chevauchent pas avec le temps de modification global.
La durĂ©e de conservation des objets inaccessibles dans le dĂ©pĂŽt avant leur suppression effective est dĂ©finie par l'option «âprune=». Bien que le dĂ©lai avant la suppression soit un moyen assez efficace et pratique d'Ă©viter la corruption du dĂ©pĂŽt en raison des conditions de course, il n'est pas 100 % fiable. Pour simplifier la rĂ©cupĂ©ration d'un dĂ©pĂŽt corrompu, une fonction de sauvegarde des objets manquants a Ă©tĂ© ajoutĂ©e dans la nouvelle version, permettant de conserver une copie externe de tous les objets supprimĂ©s ; pour cela, une option «âexpire-to» a Ă©tĂ© ajoutĂ©e Ă la commande «git repack». Par exemple, pour sauvegarder dans le fichier backup.git les objets inaccessibles qui n'ont pas Ă©tĂ© modifiĂ©s au cours des 5 derniĂšres minutes, vous pouvez utiliser la commande : git repack âcruft âcruft-expiration=5.minutes.ago -d âexpire-to=../backup.git
- La vitesse d'exĂ©cution de l'opĂ©ration «git grep âcached» a Ă©tĂ© considĂ©rablement augmentĂ©e (jusqu'Ă 70 %) lors de la recherche dans les zones oĂč le clonage partiel (sparse-checkout) est utilisĂ© et pour lesquelles des index partiels (sparse index) existent. Auparavant, lorsque l'option «âcached» Ă©tait spĂ©cifiĂ©e, la recherche se faisait d'abord dans l'index normal, puis dans les index partiels, ce qui entraĂźnait des retards significatifs lors de la recherche dans de grands dĂ©pĂŽts.
- L'exécution a été accélérée sur le serveur la vérification de la cohérence des nouveaux objets avant leur insertion dans le dépÎt lors de l'opération «git push». Grùce au passage à la prise en compte uniquement des références déclarées lors de la vérification, dans un dépÎt de test contenant 7 millions de références, dont seulement 3 % sont concernées par l'opération push, les optimisations apportées ont permis de réduire le temps de vérification par 4,5 fois.
- Pour se protéger contre de potentielles vulnérabilités d'entier dans le code, la commande « git apply » limite la taille maximale des correctifs traités. Si la taille du correctif dépasse 1 Go, une erreur sera désormais affichée.
- Pour se prĂ©munir contre d'Ă©ventuelles vulnĂ©rabilitĂ©s, des modifications ont Ă©tĂ© apportĂ©es pour nettoyer les informations superflues dans les en-tĂȘtes lors de l'utilisation du module h2h3 avec les options GIT_TRACE_CURL=1 ou GIT_CURL_VERBOSE=1 en lien avec HTTP/2.
- Lors de l'exécution de l'opération checkout sur une branche qui est un lien symbolique vers une autre branche, la commande « git symbolic-ref HEAD » affichera désormais le nom de la branche cible au lieu du nom du lien symbolique.
- Ajout du support de l'argument @{-1} dans l'option « --edit-description » (« git branch --edit-description @{-1} ») pour modifier la description de la branche précédente.
- Ajout de la commande « git merge-tree --stdin », permettant de transmettre une liste de paramÚtres via le flux d'entrée standard.
- Sur les systÚmes de fichiers en réseau, le gestionnaire fsmonitor, qui suit les modifications du systÚme de fichiers, est désactivé par défaut.
Source : opennet.ru
