Après trois mois de développement, la version 2.43 du système de gestion de version distribuée Git a été publiée. Git est l'un des systèmes de gestion de version les plus populaires, fiables et performants, offrant des moyens flexibles de développement non linéaire basés sur la branche et la fusion de 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 utilisé dans chaque commit, et il est également possible de certifier les tags et commits individuels par des signatures numériques des développeurs.
Comparé à la version précédente, 464 modifications ont été apportées à la nouvelle version, préparées avec la participation de 80 développeurs, dont 17 ont participé au développement pour la première fois. Les principales nouveautés :
- Les options « —filter » et « —filter-to » ont été ajoutées à la commande « git repack », permettant de réemballer le dépôt en tenant compte d'un filtre d'objets spécifié, et si nécessaire, de déplacer les objets ne satisfaisant pas au filtre dans un emplacement séparé. Ces options peuvent être utilisées pour diviser le dépôt selon certains critères (par exemple, pour exclure des objets inutiles ou trop volumineux), tout en conservant la possibilité d'accéder à toutes les parties par clonage partiel. Par exemple, pour conserver dans le dépôt les blobs de moins de 1 Mo et déplacer le reste des grands objets dans un dépôt séparé, on peut exécuter : $ git init —bare ..\/backup.git $ git repack -ad —filter='blob:limit=1m' \ —filter-to=..\/backup.git\/objects\/pack\/pack
L'initialisation d'un dépôt par clonage partiel permet de travailler avec une copie incomplète du dépôt, en gérant correctement les requêtes pour les objets manquants (lors de l'accès à des objets manquants, ceux-ci seront chargés à la volée au fur et à mesure des besoins).
- Ajout de la possibilité de travailler avec plusieurs fichiers pack contenant des informations sur les objets inaccessibles (« cruft packs ») pour lesquels il n'existe pas de liens dans le dépôt (aucune référence de branches ou de tags). Grâce à la nouvelle option « git repack —max-cruft-size », il est possible de définir la taille maximale d'un fichier pack individuel, afin de diviser la base des objets inaccessibles en une série de fichiers pack de petite taille. L'utilisation de plusieurs petits fichiers pack au lieu d'un gros permet de réduire considérablement les opérations d'entrée/sortie lors de la réemballage des dépôts avec un grand nombre d'objets inaccessibles, car il ne sera pas nécessaire de réécrire toutes les données pour chaque opération de réemballage.
- Ajout de la reconnaissance des tentatives d'annulation double de commit via « git revert » et prise en compte de ce fait lors de la génération du message d'annulation (lors d'un second « git revert », au lieu de « Revert: Revert: fix bug », il sera inscrit « Reapply fix bug », et si la modification est annulée une troisième fois — « Revert Reapply fix bug »). $ git revert —no-edit HEAD >/dev/null $ git revert —no-edit HEAD >/dev/null $ git log —oneline a300922 (HEAD -> main) Reapply « fix bug » 0050730 Revert « fix bug » b290810 fix bug
- Il est désormais permis d'utiliser les options « —rfc » et « —subject-prefix » ensemble. Par exemple, pour générer un e-mail avec le préfixe « [RFC PATCH bpf-next] » dans le sujet, on peut utiliser : $ git format-patch —subject-prefix="PATCH bpf-next" —rfc
- Dans la commande « git log », il est maintenant possible d'utiliser le format « %(decorate) » pour afficher les noms des branches associées lorsqu’on détermine le format à l'aide de l'option « —format », par exemple : $ git log —format='%cr%(decorate) (%h) %s' 3 jours auparavant (HEAD -> master, origin/master, origin/HEAD) (e0939bec27) RelNotes : corrections mineures dans les notes de version 2.43.0 7 jours auparavant (tag : v2.43.0-rc1) (dadef801b3) Git 2.43-rc1 7 jours auparavant (8ed4eb7538) Fusionner la branche 'tb/rev-list-unpacked-fix'
- Dans « git for-each-ref » et les commandes similaires, ajout de la possibilité d'appliquer les règles .mailmap aux spécificateurs de format fournis via l'option « —format », tels que « %(authorname) » et « %(committeremail) ».
Source : opennet.ru
