Après trois mois de développement, la version du système de gestion répartie des versions, Git 2.32, 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 assurer l'intégrité de l'historique et la résistance aux modifications « rétroactives », un hachage implicite de toute l'histoire précédente est utilisé dans chaque commit, et il est également possible de certifier numériquement les tags et commits individuels.
Comparé à la version précédente, 617 modifications ont été acceptées dans la nouvelle version, préparées avec l'aide de 100 développeurs, dont 35 ont participé au développement pour la première fois. Les principales nouveautés incluent :
- La commande « git commit » a ajouté l'option « --trailer [=] », qui permet de simplifier l'attachement d'informations structurées personnalisées (trailer) au commit au format clé/valeur, qui peut ensuite être traitée par la commande « interpret-trailers ».
- Au lieu du mécanisme GIT_CONFIG_NOSYSTEM, utilisé pour empêcher la lecture du fichier de configuration partagé, il est proposé d'utiliser le mécanisme GIT_CONFIG_SYSTEM, qui permet de spécifier explicitement à partir de quel fichier charger les paramètres système, ainsi que le paramètre GIT_CONFIG_GLOBAL pour remplacer les paramètres liés aux utilisateurs individuels dans $HOME/.gitconfig. L'attribution d'une valeur vide à la variable GIT_CONFIG_SYSTEM change le comportement pour être équivalent à GIT_CONFIG_NOSYSTEM.
- Lors de l'utilisation de la deuxième version du protocole de communication Git pendant l'exécution de « git push », la détermination de l'ancêtre commun a été réalisée côté récepteur, ce qui a permis d'améliorer l'efficacité de « git push » au niveau de « git fetch » et d'exclure le téléchargement d'objets non nécessaires.
- Une interface IPC simple a été ajoutée, permettant de créer des services tels que fsmonitor.
- Le traitement des fichiers « .gitattributes », « .gitignore » et « .mailmap » a été interrompu s'ils sont des liens symboliques.
- Pour le transport HTTP, la prise en charge de la mise en cache des mots de passe, utilisés avec succès pour déverrouiller le certificat, a été ajoutée.
- Dans la commande « git stash show », il est désormais possible d'afficher la partie non suivie du dépôt de fichiers temporairement supprimés.
- Une stratégie de réemballage avancée a été proposée par l'équipe « git repack », permettant de réduire la consommation de ressources lors du réemballage.
- La commande « git commit » a implémenté une variante étendue de l'option « —fixup » (création d'un commit pour « rebase —autosquash ») — « —fixup=(reword|amend): », offrant le choix : modifier uniquement le message dans le journal ou le message et le contenu.
- La commande « git send-email » prend en compte le paramètre core.hooksPath.
- Dans « git format-patch -v », l'utilisation de compteurs, qui ne sont pas des entiers, est désormais autorisée.
- Dans « git clone », une option « —reject-shallow » a été ajoutée, permettant d'interdire le clonage depuis des dépôts en mode shallow (sans l'historique complet des modifications).
- Le programme « gitweb » a ajouté un mode de masquage des emails, remplaçant les lignes ressemblant à des emails lors de l'affichage.
- La logique de traitement de la commande « git apply —3way » a été modifiée, qui essaie maintenant d'abord d'appliquer l'algorithme de fusion à trois volets et, en cas d'échec ou de conflit, revient à l'application normale du patch (c'était l'inverse auparavant).
- Dans la commande « git apply », il est maintenant possible de spécifier simultanément les options « —3way » et « —cached ».
- Des modèles pour le langage « Scheme » ont été ajoutés dans Userdiff.
- Une option « —diff-merges= » et un paramètre log.diffMerges ont été ajoutés à la commande « git log » pour choisir le mode par défaut.
- Les commandes « git add » et « git rm » ont reçu une protection supplémentaire contre les modifications de données dans les chemins situés en dehors de la zone d'opération de clonage partiel (sparse checkout).
- La commande « git rev-list » a ajouté une option « —filter=object:type= » pour exclure un type spécifique d'objets du fichier pack généré par la commande pack-objects.
- Dans « git pack-objects », il est interdit de spécifier des valeurs négatives dans les options acceptant des valeurs numériques, telles que « —window » et « —depth ».
Source : opennet.ru
