Le systĂšme de gestion des textes sources Git 2.41 est disponible.

AprÚs trois mois de développement, la version 2.41 du systÚme de gestion décentralisé des fichiers source Git 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 ramification 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 effectué dans chaque commit. Il est également possible de valider numériquement certains tags et commits par des signatures de développeurs.

Comparée à la version précédente, cette nouvelle version intÚgre 542 modifications, préparées par 95 développeurs, dont 29 ont participé au développement pour la premiÚre fois. Les principales nouveautés :

  • Le traitement des objets inaccessibles (unreachable), qui ne sont pas rĂ©fĂ©rencĂ©s dans le dĂ©pĂŽt (pas de rĂ©fĂ©rence par des branches ou des tags), a Ă©tĂ© amĂ©liorĂ©. Les objets inaccessibles sont supprimĂ©s par le collecteur de dĂ©chets, mais restent dans le dĂ©pĂŽt un certain temps avant la suppression pour Ă©viter les Ă©tats de concurrence. Pour suivre la pĂ©riode de prĂ©sence des objets inaccessibles, il est nĂ©cessaire de leur attribuer des Ă©tiquettes avec le temps de modification de ces objets, ce qui empĂȘche leur stockage dans un mĂȘme fichier pack oĂč tous les objets partagent le mĂȘme temps de modification. Auparavant, chaque objet inaccessible Ă©tait sauvegardĂ© dans un fichier sĂ©parĂ©, ce qui posed des problĂšmes lorsqu'il y avait un grand nombre d'objets inaccessibles rĂ©cents, qui n’étaient pas encore sujets Ă  la suppression. Dans cette nouvelle version, un mĂ©canisme de « cruft packs » est par dĂ©faut utilisĂ© pour empaqueter les objets inaccessibles, permettant de stocker tous les objets inaccessibles dans un seul fichier pack, tandis que les donnĂ©es sur le temps de modification de chaque objet sont reflĂ©tĂ©es dans une table sĂ©parĂ©e, stockĂ©e dans un fichier avec l'extension « .mtimes » et reliĂ©e Ă  l'aide d'un fichier d'index avec l'extension « .idx ».
    Le systĂšme de gestion des textes sources Git 2.41 est disponible.
  • La tenue d'un indice inverse sur disque (revindex) pour les fichiers pack est activĂ©e par dĂ©faut. Lors de tests sur le dĂ©pĂŽt torvalds/linux, l'utilisation de l'indice inverse a permis d'accĂ©lĂ©rer les opĂ©rations gourmandes en ressources « git push » de 1,49 fois, et les opĂ©rations simples, comme le calcul de la taille d'un objet Ă  l'aide de « git cat-file —batch='%(objectsize:disk)' », de 77 fois. Les fichiers (« .rev ») avec l'indice inverse seront enregistrĂ©s Ă  l'intĂ©rieur du dĂ©pĂŽt dans le rĂ©pertoire « .git/objects/pack ».

    Rappelons que Git stocke toutes les donnĂ©es sous forme d'objets, qui sont placĂ©s dans des fichiers sĂ©parĂ©s. Pour amĂ©liorer l'efficacitĂ© du travail avec le dĂ©pĂŽt, les objets sont Ă©galement regroupĂ©s dans des fichiers pack, oĂč les informations sont prĂ©sentĂ©es sous la forme d'un flux d'objets se suivant (un format similaire est utilisĂ© lors de la transmission d'objets avec les commandes git fetch et git push). Pour chaque fichier pack, un fichier d'index (.idx) est créé, permettant de dĂ©terminer trĂšs rapidement, par l'identifiant de l'objet, le dĂ©calage dans le fichier pack oĂč cet objet est stockĂ©.

    L'index inversĂ© inclus dans la nouvelle version vise Ă  optimiser le processus de dĂ©termination de l'identifiant de l'objet Ă  partir des informations sur le placement de l'objet dans le fichier pack. Auparavant, cette conversion Ă©tait effectuĂ©e Ă  la volĂ©e lors de l'analyse du fichier pack et n'Ă©tait stockĂ©e qu'en mĂ©moire, ce qui empĂȘchait la rĂ©utilisation de ces index et obligeait Ă  gĂ©nĂ©rer l'index Ă  chaque fois. L'opĂ©ration de construction de l'index consiste Ă  crĂ©er un tableau de paires « objet-position » et Ă  le trier par position, ce qui peut prendre beaucoup de temps pour de gros fichiers pack.

    Par exemple, l'opération d'affichage du contenu des objets, utilisant un index direct, s'exécutait 62 fois plus vite que l'opération affichant la taille des objets, pour laquelle les données de liaison de position à objet n'étaient pas indexées. AprÚs utilisation de l'index inversé, les opérations mentionnées ont pris un temps à peu prÚs égal. Les index inversés permettent également d'accélérer les opérations d'envoi d'objets lors des commandes fetch et push grùce à la transmission directe des données déjà préparées depuis le disque.

    Le systĂšme de gestion des textes sources Git 2.41 est disponible.
  • Le protocole « credential helper », utilisĂ© pour transmettre des informations d'identification lors de l'accĂšs Ă  des dĂ©pĂŽts Ă  accĂšs limitĂ©, a Ă©tĂ© enrichi d'une prise en charge du passage des en-tĂȘtes WWW-Authenticate entre le gestionnaire d'informations d'identification et le service oĂč l'authentification a lieu. La prise en charge de l'en-tĂȘte WWW-Authenticate permet de transmettre des paramĂštres de portĂ©e OAuth pour un partage d'accĂšs utilisateur plus granulaire aux dĂ©pĂŽts et pour dĂ©limiter les domaines accessibles aux requĂȘtes.
  • La commande for-each-ref a Ă©tĂ© ajoutĂ©e avec l'option de formatage «%(ahead-behind:<base>)», permettant d'obtenir en une fois des informations sur le nombre de commits prĂ©sents ou absents dans une branche donnĂ©e par rapport Ă  une autre branche (Ă  quel point une branche est en retard ou en avance sur l'autre au niveau des commits). Auparavant, pour obtenir de telles informations, il fallait exĂ©cuter deux commandes distinctes : «git rev-list —count main..my-feature» pour le nombre de commits uniques Ă  la branche et «git rev-list —count my-feature..main» pour le nombre de commits absents. Maintenant, ces calculs peuvent ĂȘtre rĂ©duits Ă  une seule commande, ce qui simplifie l'Ă©criture des gestionnaires et rĂ©duit le temps d'exĂ©cution. Par exemple, pour afficher les branches qui n'ont pas Ă©tĂ© fusionnĂ©es et Ă©valuer leur retard ou avance par rapport Ă  leur branche principale, on peut utiliser une commande en ligne : $ git for-each-ref —no-merged=origin/HEAD \ —format='%(refname:short) %(ahead-behind:origin/HEAD)' \ refs/heads/tb/ | column -t tb/cruft-extra-tips 2 96 tb/for-each-ref—exclude 16 96 tb/roaring-bitmaps 47 3 au lieu du script prĂ©cĂ©demment utilisĂ©, qui s'exĂ©cutait 17 fois plus lentement : $ git for-each-ref —format='%(refname:short)' —no-merged=origin/HEAD \ refs/heads/tb | while read ref do ahead="$(git rev-list —count origin/HEAD..$ref)" behind="$(git rev-list —count $ref..origin/HEAD)" printf "%s %d %d\n" "%$ref" "%$ahead" "%$behind" done | column -t tb/cruft-extra-tips 2 96 tb/for-each-ref—exclude 16 96 tb/roaring-bitmaps 47 3
  • La commande «git fetch» a Ă©tĂ© ajoutĂ©e avec l'option «—porcelain», qui, lorsqu'elle est spĂ©cifiĂ©e, gĂ©nĂšre une sortie au format «<flag> <old-object-id> <new-object-id> <local-reference>», moins lisible mais plus pratique pour l'analyse dans les scripts.
  • Une nouvelle configuration «fetch.hideRefs» a Ă©tĂ© ajoutĂ©e, ce qui permet d'accĂ©lĂ©rer les opĂ©rations «git fetch» en cachant une partie des rĂ©fĂ©rences dans le dĂ©pĂŽt local lors de la vĂ©rification par le serveur de l'ensemble complet des objets, ce qui permet d'Ă©conomiser du temps en limitant la vĂ©rification uniquement aux serveurs, Ă  partir desquelles les donnĂ©es sont extraites directement. Par exemple, lors d'un test sur un systĂšme avec des dĂ©pĂŽts contenant un grand nombre de liens externes suivis, exclure toutes les rĂ©fĂ©rences sauf celles destinĂ©es au serveur $remote a permis de rĂ©duire le temps d'exĂ©cution de l'opĂ©ration «git fetch» de 20 minutes Ă  30 secondes. $ git -c fetch.hideRefs=refs -c fetch.hideRefs=!refs/remotes/$remote \ fetch $remote
  • La commande «git fsck» a introduit la possibilitĂ© de vĂ©rifier les corruptions, la correspondance des sommes de contrĂŽle et la validitĂ© des valeurs dans les cartes de disponibilitĂ© et les index inversĂ©s.
  • Dans l'Ă©quipe « git clone —local », une sortie d'erreur a Ă©tĂ© mise en Ɠuvre lors de la tentative de copie Ă  partir d'un dĂ©pĂŽt contenant des liens symboliques Ă  l'intĂ©rieur de $GIT_DIR.

Source : opennet.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