La version 2.38 du système de gestion de versions distribué Git a été présenté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 branchement et la fusion de branches. Pour garantir l'intégrité de l'historique et la résilience face aux modifications rétroactives, un hachage implicite de l'ensemble de l'historique précédent est utilisé dans chaque commit, et la possibilité de validation par des signatures numériques des développeurs est également disponible pour certains tags et commits.
Par rapport à la version précédente, la nouvelle version intègre 699 modifications, préparées par la participation de 92 développeurs, dont 24 ont participé pour la première fois au développement. Les principales nouveautés :
- L'utilitaire « scalar », développé par Microsoft pour la gestion de grands dépôts, a été inclus dans le core. À l'origine écrit en C#, une version retravaillée en C a été incluse dans git. Le nouvel utilitaire se distingue par des fonctionnalités et paramètres supplémentaires par défaut, impactant les performances lors du travail avec des dépôts très volumineux. Par exemple, lors de l'utilisation de scalar, on applique :
- Le clonage partiel pour travailler avec une copie incomplète du dépôt.
- Un mécanisme intégré de suivi des modifications dans le système de fichiers (FSMonitor), permettant d'éviter de parcourir tout le répertoire de travail.
- Des index couvrant des objets dans différents fichiers pack (multi-pack).
- Des fichiers commit-graph avec un index graphique des commits, utilisé pour optimiser l'accès aux informations sur les commits.
- Des travaux périodiques en arrière-plan pour maintenir la structure optimale du dépôt sans bloquer la session interactive (le travail de préchargement des nouveaux objets depuis le dépôt distant et de mise à jour du fichier de commit-graph est effectué une fois par heure, tandis qu'un processus de compression du dépôt est lancé chaque nuit).
- Le mode « sparseCheckoutCone », qui limite les modèles autorisés lors du clonage partiel.
- Une option «—update-refs» a été ajoutée à la commande «git rebase» pour actualiser les branches dépendantes se chevauchant avec les branches déplacées, afin d'éviter de devoir exécuter manuellement des opérations de checkout pour chaque branche dépendante afin de basculer sur le commit requis.
- La compatibilité de la commande «git rm» avec les index partiels a été assurée.
- Le comportement de la commande «git mv A B» a été amélioré lors du déplacement d'un fichier de l'espace de travail avec des index partiels vers une zone externe où ce mode ne s'applique pas.
- L'optimisation du format des fichiers bitmap a été réalisée pour travailler avec de grands dépôts — une table d'index optionnelle a été ajoutée avec la liste des commits sélectionnés et leurs offsets.
- Un nouveau mode a été implémenté dans la commande «git merge-tree» où, à partir de deux commits spécifiés, un arbre avec le résultat de la fusion est calculé, comme si les historiques de ces commits avaient été combinés.
- Une configuration «safe.barerepository» a été ajoutée pour gérer la possibilité d'héberger des dépôts bare (dépôts sans espace de travail) dans d'autres dépôts git. Lorsqu'elle est définie à «explicit», le travail avec les dépôts bare situés uniquement dans le répertoire supérieur sera autorisé. Pour pouvoir héberger des dépôts bare dans des sous-répertoires, la valeur «all» doit être utilisée.
- L'option «-m» («—max-count») a été ajoutée à la commande «git grep», similaire à l'option homologue dans GNU grep, permettant de limiter le nombre de correspondances renvoyées.
- L'option «—format» a été implémentée dans la commande «ls-files» pour configurer les champs affichés (par exemple, il est possible d'inclure l'affichage du nom de l'objet, des modes, etc.).
- Dans «git cat-file», lors de l'affichage du contenu des objets, il est désormais possible de tenir compte des liens des auteurs à leurs e-mails, définis dans le fichier mailmap.
Source : opennet.ru
