Git 2.55

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

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