
PrĂ©sentĂ© publication d'un systĂšme de gestion distribuĂ© de textes originaux Git 2.55. Parmi les principales modifications : intĂ©gration par dĂ©faut d'une compilation avec Rust, mise en Ćuvre pour Linux d'un processus fsmonitor, nouvelle stratĂ©gie de rĂ©emballage de l'index MIDX incrĂ©mental, commande git history fixup pour corriger l'engagement, optimisation de la gĂ©nĂ©ration de cartes de disponibilitĂ© des objets, prise en charge de l'exĂ©cution simultanĂ©e de hooks, commande git format-rev. Le code Git est distribuĂ© sous licence GPLv2+.
Par rapport à la version précédente, 505 changements ont été adoptés dans la nouvelle version, préparés par 100 développeurs, dont 33 ont participé pour la premiÚre fois au développement de Git.
Les principales innovations (github.blog, gitlab.com/blog, gitlab.com/git-scm):
- Par dĂ©faut sont incluses. prise en charge des composants en Rust. Le compilateur rustc ajoutĂ© dans les dĂ©pendances de construction. Pour construire sans Rust, vous pouvez utiliser le drapeau NO_RUST=1 lors du lancement de l'outil make ou -Drust=disabled lors de l'exĂ©cution de meson configure. La possibilitĂ© de dĂ©sactiver la construction avec Rust sera maintenue jusqu'Ă la branche Git 3.0, oĂč Rust sera est inclus dans les dĂ©pendances obligatoires. Une couche en Rust a Ă©tĂ© mise en Ćuvre pour la portabilitĂ© entre les configurations avec des hachages SHA-1 et SHA-256, ainsi que certaines fonctions internes, telles que l'encodage et le dĂ©codage de valeurs entiĂšres Ă longueur variable. Ă l'avenir, une refonte en Rust de composants internes plus significatifs de Git est attendue.
- Dans l'Ă©quipe expĂ©rimentale «git history, qui offre des possibilitĂ©s de réécriture de l'historique des modifications, une opĂ©ration « git history fixup » a Ă©tĂ© ajoutĂ©e pour corriger l'engagement. L'opĂ©ration fixup permet de dĂ©placer les modifications ajoutĂ©es via git add vers un engagement plus ancien et de réécrire automatiquement tous les engagements ultĂ©rieurs, de maniĂšre analogue Ă l'exĂ©cution de la commande git commit âfixup= et du lancement de git rebase âautosquash ~.
- Pour la plateforme Linux, un processus en arriÚre-plan fsmonitor, surveillant les changements dans le systÚme de fichiers à l'aide du mécanisme inotify et permettant d'éviter de parcourir tout le répertoire de travail lors de l'exécution de commandes telles que git status. L'activation se fait via le paramÚtre «core.fsmonitor».
- La commande git repack a introduit le mode âwrite-midx=incremental, qui met en Ćuvre une nouvelle stratĂ©gie de mise Ă jour des mĂ©tadonnĂ©es dans l'index MIDX incrĂ©mental (multi-pack index), permettant d'Ă©viter de devoir rĂ©emballer l'ensemble de l'index. Dans l'index multi-pack incrĂ©mental, au lieu d'un grand index unique contenant des informations sur la rĂ©partition des objets dans les fichiers pack, une stratification est appliquĂ©e : chaque couche couvre un certain nombre de fichiers pack et est stockĂ©e dans un fichier bitmap sĂ©parĂ©. Cette structure permet d'ajouter des informations sur les objets dans de nouveaux fichiers pack Ă l'index, en attachant de nouvelles couches Ă l'index sans reconstruire les couches existantes. La commande git repack âwrite-midx=incremental permet d'ajouter une nouvelle couche Ă l'index MIDX incrĂ©mental, couvrant les fichiers pack rĂ©cemment créés. AssociĂ©e au mode d'emballage des dĂ©pĂŽts âgeometric, cette nouvelle commande permet de combiner de nouveaux objets de plusieurs fichiers pack en un seul fichier pack plus grand et, si nĂ©cessaire, d'effectuer l'emballage et la fusion de plusieurs couches adjacentes de l'index MIDX incrĂ©mental. Cette stratĂ©gie permet, lors de l'exĂ©cution de git repack, de réécrire uniquement les couches supĂ©rieures, laissant les anciennes grandes couches intactes, tout en Ă©vitant la croissance incontrĂŽlĂ©e de la chaĂźne de couches, maintenant le nombre total de couches Ă un niveau proportionnel au logarithme du nombre total d'objets.
- La génération des bitmaps de disponibilité des objets a été considérablement optimisée grùce à un nouvel algorithme de parcours de l'arbre des objets, évitant la récursivité superflue, le caching des positions des objets, le tri des bitmaps avant leur fusion par opération XOR et la refonte du code pour créer des bitmaps de pseudo-fusion (pseudo-merge). Dans un dépÎt de test, ces optimisations ont permis de réduire le temps de génération des bitmaps de 612 à 294 secondes.
- La possibilitĂ© d'exĂ©cution parallĂšle de tĂąches indĂ©pendantes a Ă©tĂ© mise en Ćuvre. hooks dans les fichiers de configuration. Les hooks qui affectent l'Ă©tat partagĂ© ou en tiennent compte, comme ceux qui modifient les notes de commit ou inspectent les index et l'arbre de travail, ne peuvent pas ĂȘtre exĂ©cutĂ©s en parallĂšle. Toutefois, il est possible de lancer simultanĂ©ment des hooks pour la vĂ©rification par un linter et l'exĂ©cution de tests unitaires. Les hooks qui permettent une exĂ©cution parallĂšle sont configurĂ©s via le paramĂštre hook.nom_du_hook.parallel = true. Le nombre de tĂąches exĂ©cutĂ©es simultanĂ©ment est dĂ©fini par la configuration hook.jobs, hook.<event>.jobs ou l'option de ligne de commande -j.
- Dans l'Ă©quipe git pack-objects, la fonctionnalitĂ© âpath-walk permet de spĂ©cifier des filtres tels que blob:none, blob:limit=<n>, tree:0, object:type=<type>, sparse:<oid> et combine:. Dans un test effectuĂ©, l'Ă©limination des blobs lors de l'exĂ©cution de âpath-walk a permis de rĂ©duire la taille du pack-fichier de 16%.
- AjoutĂ©e la commande git format-rev pour formater les rĂ©visions et les noms d'objets mentionnĂ©s dans les listes de commits ou prĂ©sents dans un texte arbitraire (par exemple, elle peut ĂȘtre utilisĂ©e dans les hooks pour traiter les notes de commit).
git last-modified | git format-rev âstdin-mode=text âformat=%an
Junio C Hamano builtin/commit.c
- L'Ă©chappement de la plupart des sĂ©quences de contrĂŽle de terminal dans les messages d'information et le texte d'erreur transmis par le serveur est activĂ© par dĂ©faut. Lorsqu'il est confrontĂ© Ă un serveur malveillant, de telles sĂ©quences d'Ă©chappement pouvaient ĂȘtre utilisĂ©es pour cacher ou modifier la sortie, par exemple, via des sĂ©quences d'Ă©chappement pour dĂ©placer le curseur et effacer du texte. Le support des sĂ©quences d'Ă©chappement pour la mise en surbrillance des Ă©lĂ©ments en couleur a Ă©tĂ© conservĂ©.
- La commande git checkout -m sauvegarde désormais automatiquement les modifications conflictuelles locales dans la zone stash sans nécessiter une résolution immédiate du conflit.
- La commande git push a été dotée de la capacité de pousser une branche vers plusieurs serveurs Git externes en une seule commande. Par exemple, pour transférer la branche main non seulement vers le serveur principal, mais aussi vers des miroirs, vous pouvez créer un groupe publish composé des serveurs github, gitlab et mirror :
git config remotes.publish "github gitlab mirror"
git push publish main
- La commande git log âgraph a reçu l'option âgraph-lane-limit=<N> pour limiter le nombre de bandes verticales lors de la visualisation des branches, permettant ainsi de laisser de la place Ă l'Ă©cran pour les donnĂ©es sur les commits dans les dĂ©pĂŽts avec un grand nombre de branches.
âŠ
* | | | | 619931f561 Fusionner la branche âdl/posix-unused-warning-clangâ
|\ \ \ \ \
| * | | | ~ cf48887610 compat/posix.h : simplifier la comparaison GIT_GNUC_PREREQ()
| * | | | ~ ffd45926dc compat/posix.h : nettoyer GIT_GNUC_PREREQ() et UNUSED
|\ \ \ \ \~
| * | | | ~ 3f5203eeb4 ls-files : filtrer le pathspec avant lstat
- Aux commandes git log et git rev-list, l'option âmax-count-oldest=<N> a Ă©tĂ© ajoutĂ©e, permettant de sĂ©lectionner les N plus anciens commits dans la plage.
Source : linux.org.ru
