lancement d'un systÚme de gestion décentralisé des textes sources . Git est l'un des systÚmes de gestion de version 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ésistance aux modifications rétroactives, un hachage implicite de toute l'histoire précédente est utilisé dans chaque commit ; la vérification par des signatures numériques des développeurs est également possible pour certains tags et commits.
Par rapport à la version précédente, la nouvelle version comprend 745 modifications préparées par 74 développeurs, parmi lesquels 18 ont participé au développement pour la premiÚre fois. :
- Disponible depuis la version 1.18, le nouveau mode de transfert de la sĂ©rie de commits « git rebase --rebase-merges » remplace l'ancienne option « --preserve-merges », dĂ©sormais marquĂ©e comme obsolĂšte. L'opĂ©ration « git rebase » est utilisĂ©e pour remplacer une sĂ©rie de commits par un nouveau commit de base, par exemple, pour dĂ©placer une branche oĂč se dĂ©veloppe une nouvelle fonctionnalitĂ© vers l'Ă©tat actuel de la branche master, intĂ©grant des corrections ajoutĂ©es aprĂšs la divergence :
o â o â o (my-feature)
/
o â o â o â o â o (master)
o â o â o (my-feature)
/
o â o â o â o â o (master)
Pour conserver la structure de ramification dans la branche transfĂ©rable, l'option « --preserve-merges » pouvait ĂȘtre utilisĂ©e prĂ©cĂ©demment, permettant lors d'une exĂ©cution en mode interactif (git rebase -i --preserve-merges) de modifier l'historique des commits, mais sans garantir la conservation complĂšte de la structure du dĂ©pĂŽt. Le nouveau mode « --rebase-merges » permet de conserver la structure des changements dans la branche transfĂ©rable, tout en offrant un ensemble complet d'opĂ©rations interactives, y compris la suppression, le regroupement et le renommage des commits.
Par exemple, « --rebase-merges » retransférer des commits d'une branche séparée sur une branche master plus récente, tout en conservant la structure de ramification dans la branche transférable et en apportant en cours de route quelques modifications aux notes des commits.
- Ajout de la prise en charge de la crĂ©ation d'une nouvelle branche basĂ©e sur le rĂ©sultat de la dĂ©finition de la base de fusion de deux autres branches (merge base, rĂ©fĂ©rence Ă un ancĂȘtre commun) Ă l'aide des constructions « git branch new AâŠB » et « git checkout -b new AâŠB », oĂč « AâŠB » sous-entend la dĂ©finition de la base de fusion entre deux commits spĂ©cifiĂ©s, de la maniĂšre dont « git checkout AâŠB » dĂ©place HEAD vers le commit de base et « diff AâŠB » montre les changements entre le commit « B » et lâancĂȘtre commun avec le commit « A ».
Par exemple, lors du travail sur une branche distincte my-feature, la fonctionnalitĂ© proposĂ©e peut ĂȘtre utilisĂ©e lorsqu'il est nĂ©cessaire de commencer Ă partir d'une autre branche, par exemple, Ă partir du mĂȘme point dans la branche master d'oĂč la branche my-feature a Ă©tĂ© extraite. Auparavant, il Ă©tait nĂ©cessaire d'examiner manuellement le journal des modifications, ce qui posait des problĂšmes en cas de longue histoire de modifications, puis exĂ©cuter «git merge-base master my-feature» pour calculer le hachage de la base de fusion entre les branches master et my-feature, et crĂ©er une nouvelle branche par rapport Ă l'ancĂȘtre commun avec «git branch my-other-feature haché». Dans Git 2.22, pour crĂ©er une branche par rapport Ă la base de fusion de deux autres branches, on peut utiliser la syntaxe «git branch my-other-feature AâŠB»;
- Ajout de l'option «git branch âshow-current» pour afficher le nom de la branche obtenue aprĂšs l'exĂ©cution de l'opĂ©ration checkout;
- Ajout de l'option «git checkout âno-overlay â dir», permettant lors de l'opĂ©ration checkout de faire correspondre le contenu du rĂ©pertoire dir Ă l'Ă©tat de la branche master. Par exemple, si dans la copie locale du rĂ©pertoire dir il y a un fichier absent dans la branche master, par dĂ©faut lors de l'exĂ©cution de «git checkout master â dir» il sera laissĂ©, et avec l'option «âno-overlay» il sera supprimĂ©;
- Dans la commande «git diff», une API universelle a Ă©tĂ© mise en Ćuvre pour analyser les options, ce qui a permis de uniformiser le traitement des options avec d'autres utilitaires git. Par exemple, dans «git diff», tous les antagonistes pour toutes les options sont maintenant disponibles («âfunction-context» et «âno-function-context»);
- Ajout de la possibilité de filtrage lors de l'affichage de «git log» des étiquettes étendues attachées aux commits («trailer» - informations supplémentaires, telles que Signed-off-by et Co-authored-by). Un filtrage des étiquettes est possible tant par clé que par valeur, par exemple :
«git log âpretty=»%(trailers:key=Reviewed-by,valueonly)»; - Ajout d'un nouveau mĂ©canisme de traçage Trace2, offrant un format de sortie plus flexible et structurĂ©. Trace2 permet de collecter des tĂ©lĂ©metries sur les opĂ©rations exĂ©cutĂ©es et des donnĂ©es de performance pour une analyse et un dĂ©bogage plus dĂ©taillĂ©s (le gestionnaire est attribuĂ© par l'utilisateur, aucune donnĂ©e n'est envoyĂ©e Ă l'extĂ©rieur);
- Le rapport «git bisect» est devenu plus lisible, mettant maintenant plus clairement en évidence les commits problématiques et affichant des statistiques résumées sur les modifications pour chaque fichier (au niveau du nombre de lignes modifiées);
- L'heuristique pour déterminer les renommages de répertoires a été retravaillée afin d'exclure les faux marquages de renommage. En cas de doute, ces répertoires sont désormais marqués comme conflictuels;
- Un avertissement est généré lors de la tentative d'ajouter une étiquette à une autre étiquette, ce qui se produit généralement par erreur et peut entraßner l'ajout d'un marqueur au mauvais commit (par exemple, la commande « git tag -f -m « updated message » my-tag1 my-tag2 » entraßnera la création d'une étiquette sur une ancienne étiquette, alors que le développeur s'attendait à ce que la nouvelle étiquette soit appliquée au commit pointé par l'ancienne étiquette);
- La génération de bitmap pour les référentiels (structure de données « reachability bitmaps »), qui conserve des informations sur les ensembles d'objets accessibles pour chaque commit, a été activée, permettant de déterminer rapidement la présence d'un objet de base. Cette structure réduit considérablement le temps d'exécution des opérations de récupération de données (git fetch).
Source : opennet.ru
