Sortie du système de gestion de versions Git 2.37

La version 2.37 du système distribué de gestion de versions 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 des branches. Pour garantir l'intégrité de l'historique et la résistance aux modifications rétroactives, un hachage implicite de l'ensemble de l'historique précédent est effectué dans chaque commit, et des signatures numériques par les développeurs sont également possibles pour les tags et commits individuels.

Comparé à la version précédente, 395 modifications ont été acceptées dans cette nouvelle version, préparées avec la participation de 75 développeurs, dont 20 ont participé au développement pour la première fois. Les principales nouveautés :

  • Le mécanisme des index partiels (sparse index) a été préparé pour une utilisation généralisée, ne couvrant qu'une partie du référentiel. Les index partiels permettent d'améliorer les performances et d'économiser de l'espace dans les référentiels où des opérations de clonage partiel (sparse-checkout) sont effectuées ou où l'on travaille avec une copie incomplète du référentiel. Dans cette nouvelle version, le travail d'intégration des index partiels dans les commandes 'git show', 'git sparse-checkout' et 'git stash' a été achevé. Le gain de performance le plus notable obtenu grâce à l'utilisation des index partiels se manifeste dans la commande 'git stash', dont la vitesse d'exécution a augmenté jusqu'à 80 % dans certaines situations.
  • Un nouveau mécanisme «cruft packs» a été mis en place pour regrouper les objets inaccessibles (unreachable) qui ne sont pas référencés dans le dépôt (aucune branche ni balise ne les mentionne). Les objets inaccessibles sont supprimés par le ramasse-miettes, mais restent un certain temps dans le dépôt avant leur suppression afin d'éviter les conditions de course. Pour suivre la durée de stockage des objets inaccessibles, il est nécessaire d'associer des étiquettes avec l'heure de modification de ces objets, ce qui interdit de les conserver dans un seul fichier pack où tous les objets ont une heure de modification commune. Auparavant, la sauvegarde de chaque objet dans un fichier séparé entraînait des problèmes lorsque de nombreux objets inaccessibles récents ne pouvaient pas encore être supprimés. Le mécanisme proposé «cruft packs» permet de stocker tous les objets inaccessibles dans un seul fichier pack, et les données concernant l'heure de modification de chaque objet sont enregistrées dans une table distincte, stockée dans un fichier avec l'extension «.mtimes ».
  • Pour Windows et macOS, un mécanisme intégré de suivi des modifications dans le système de fichiers a été mis en place, permettant d'éviter de parcourir l'ensemble du répertoire de travail lors de l'exécution d'opérations telles que «git status». Auparavant, des utilitaires externes de suivi des modifications dans le système de fichiers, comme Watchman, pouvaient être utilisés via des hooks, mais cela nécessitait l'installation de programmes supplémentaires et leur configuration. Désormais, cette fonctionnalité est intégrée et peut être activée avec la commande «git config core.fsmonitor true».
  • Dans la commande «git sparse-checkout», le support du mode alternatif «—cone» pour la définition des motifs de clonage partiel est déclaré obsolète, ce qui permettait, lors de la définition de la partie du dépôt à cloner, de lister des fichiers individuels en utilisant la syntaxe «.gitignore», ce qui empêche l'utilisation d'indices partiels pour l'optimisation.
  • La flexibilité de la configuration de l'appel de fsync() pour enregistrer les modifications sur le disque a été accrue. Le paramètre «core.fsyncMethod» prend désormais en charge la stratégie de synchronisation «batch», qui permet d'accélérer l'écriture d'un grand nombre de fichiers individuels en accumulant les modifications dans le cache d'écriture, qui est vidé par un appel unique à fsync(). Un test dans lequel 500 fichiers ont été ajoutés avec la commande «git add» a été réalisé en 0.15 secondes, alors qu'un appel à fsync() pour chaque fichier prenait 1.88 secondes, et sans utiliser fsync, cela a pris 0.06 secondes.
  • Des commandes de navigation dans les branches, telles que «git log» et «git rev-list», ont ajouté l'option «--since-as-filter=X», permettant d'éliminer les informations sur les commits dont la date de création est antérieure à «X». Contrairement à l'option «--since», nouvelle commande agit comme un filtre, ne s'arrêtant pas après le premier commit plus ancien que le temps spécifié.
  • La commande «git remote» affiche désormais des informations sur les clones partiels du dépôt lorsque le drapeau «-v» est spécifié.
  • Un paramètre «transfer.credentialsInUrl» a été ajouté, pouvant prendre les valeurs «warn», «die» et «allow». Si des informations d'identification en texte clair sont fournies dans le paramètre «remote..url», une tentative d'exécution des opérations «fetch» ou «push» sera soit interrompue par une erreur si le paramètre «transfer.credentialsInUrl» est défini sur «die», soit par un avertissement si sa valeur est «warn».
  • Une nouvelle implémentation du mode interactif de la commande «git add -i», réécrite de Perl en C, est maintenant active par défaut.

Source : opennet.ru

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster