[{"data":1,"prerenderedAt":1838},["ShallowReactive",2],{"/fr-fr/blog/whats-new-in-git-2-46-0":3,"navigation-fr-fr":1056,"banner-fr-fr":1489,"footer-fr-fr":1497,"blog-post-authors-fr-fr-Justin Tobler":1736,"blog-related-posts-fr-fr-whats-new-in-git-2-46-0":1751,"blog-promotions-fr-fr":1775,"next-steps-fr-fr":1829},{"id":4,"title":5,"authors":6,"body":8,"category":1034,"date":1035,"description":1036,"extension":1037,"externalUrl":1038,"faq":1038,"featured":1039,"heroImage":1040,"meta":1041,"navigation":1039,"path":1042,"seo":1043,"slug":1048,"stem":1049,"tags":1050,"template":1053,"updatedDate":1054,"__hash__":1055},"blogPosts/fr-fr/blog/whats-new-in-git-2-46-0.md","Nouveautés de Git 2.46.0",[7],"Justin Tobler",{"type":9,"value":10,"toc":1025},"minimark",[11,22,27,49,57,365,371,381,384,392,396,409,559,562,580,669,676,683,687,690,808,844,888,893,897,908,921,929,956,960,963,982,986,994,1003,1007,1021],[12,13,14,15,21],"p",{},"Le projet Git a récemment publié la ",[16,17,20],"a",{"href":18,"rel":19},"https://lore.kernel.org/git/xmqqzfq0i0qa.fsf@gitster.g/T/#u",[],"version 2.46.0 de Git",". Jetons un coup d'œil aux points forts de cette version, comprenant des contributions de l'équipe Git de GitLab et de la communauté Git au sens large.",[23,24,26],"h2",{"id":25},"outils-pour-migrer-les-backends-de-références","Outils pour migrer les backends de références",[12,28,29,30,35,36,41,42,48],{},"Dans la version ",[16,31,34],{"href":32,"rel":33},"https://gitlab.com/gitlab-org/git/-/raw/master/Documentation/RelNotes/2.45.0.txt?ref_type=heads",[],"Git 2.45.0","\nprécédente, le format « reftable » est devenu le nouveau backend pour le stockage\ndes références. Ce nouveau format de référence vise à améliorer les performances et l'efficacité des dépôts Git,\nen particulier lorsque le nombre de références devient très élevé. Si le backend « reftable » ne vous est pas encore\nfamilier, n'hésitez pas à consultez notre précédent ",[16,37,40],{"href":38,"rel":39},"https://about.gitlab.com/fr-fr/blog/whats-new-in-git-2-45-0/",[],"article de blog consacré à la version 2.45.0 de Git"," dans lequel nous présentons ce nouveau format, ainsi que notre guide du débutant pour ",[16,43,47],{"href":44,"rel":45,"title":46},"https://about.gitlab.com/fr-fr/blog/a-beginners-guide-to-the-git-reftable-format/",[],"Format reftable de Git","en savoir plus sur le fonctionnement des reftables",".",[12,50,51,52,56],{},"Le backend « reftable » offre un format de stockage sur disque différent de l'ancien format de backend basé sur les fichiers. Par conséquent, l’utilisation du format « reftable » avec un dépôt existant, nécessite une conversion entre les différents formats. Pour cela, une nouvelle commande git-refs(1) a été introduite, incluant la sous-commande ",[53,54,55],"code",{},"migrate"," pour effectuer les migrations de backend de référence. Voici un exemple illustrant l'utilisation de cette commande :",[58,59,64],"pre",{"className":60,"code":61,"language":62,"meta":63,"style":63},"language-shell shiki shiki-themes github-light","# Initialize a new repository as “bare” so it does not contain reflogs.\n$ git init --bare .\n$ git commit --allow-empty -m \"init\"\n# Populate repository with references in the files backend.\n$ git branch foo\n$ git branch bar\n$ tree .git/refs\n.git/refs\n├── heads\n│   ├── bar\n│   ├── foo\n│   ├── main\n└── tags\n# Perform reference migration to reftables format.\n$ git refs migrate --ref-format=reftable\n# Check that reftables backend is now in use.\n$ tree .git/reftable\n.git/reftable\n├── 0x000000000001-0x000000000001-a3451eed.ref\n└── tables.list\n# Check the repository config to see the updated `refstorage` format.\n$ cat config\n[core]\n        repositoryformatversion = 1\n        filemode = true\n        bare = true\n        ignorecase = true\n        precomposeunicode = true\n[extensions]\n        refstorage = reftable\n","shell","",[53,65,66,75,96,115,121,134,146,157,163,172,183,192,202,211,217,233,239,249,255,263,271,277,288,295,307,318,328,338,348,354],{"__ignoreMap":63},[67,68,71],"span",{"class":69,"line":70},"line",1,[67,72,74],{"class":73},"sAwPA","# Initialize a new repository as “bare” so it does not contain reflogs.\n",[67,76,78,82,86,89,93],{"class":69,"line":77},2,[67,79,81],{"class":80},"s7eDp","$",[67,83,85],{"class":84},"sYBdl"," git",[67,87,88],{"class":84}," init",[67,90,92],{"class":91},"sYu0t"," --bare",[67,94,95],{"class":84}," .\n",[67,97,99,101,103,106,109,112],{"class":69,"line":98},3,[67,100,81],{"class":80},[67,102,85],{"class":84},[67,104,105],{"class":84}," commit",[67,107,108],{"class":91}," --allow-empty",[67,110,111],{"class":91}," -m",[67,113,114],{"class":84}," \"init\"\n",[67,116,118],{"class":69,"line":117},4,[67,119,120],{"class":73},"# Populate repository with references in the files backend.\n",[67,122,124,126,128,131],{"class":69,"line":123},5,[67,125,81],{"class":80},[67,127,85],{"class":84},[67,129,130],{"class":84}," branch",[67,132,133],{"class":84}," foo\n",[67,135,137,139,141,143],{"class":69,"line":136},6,[67,138,81],{"class":80},[67,140,85],{"class":84},[67,142,130],{"class":84},[67,144,145],{"class":84}," bar\n",[67,147,149,151,154],{"class":69,"line":148},7,[67,150,81],{"class":80},[67,152,153],{"class":84}," tree",[67,155,156],{"class":84}," .git/refs\n",[67,158,160],{"class":69,"line":159},8,[67,161,162],{"class":80},".git/refs\n",[67,164,166,169],{"class":69,"line":165},9,[67,167,168],{"class":80},"├──",[67,170,171],{"class":84}," heads\n",[67,173,175,178,181],{"class":69,"line":174},10,[67,176,177],{"class":80},"│",[67,179,180],{"class":84},"   ├──",[67,182,145],{"class":84},[67,184,186,188,190],{"class":69,"line":185},11,[67,187,177],{"class":80},[67,189,180],{"class":84},[67,191,133],{"class":84},[67,193,195,197,199],{"class":69,"line":194},12,[67,196,177],{"class":80},[67,198,180],{"class":84},[67,200,201],{"class":84}," main\n",[67,203,205,208],{"class":69,"line":204},13,[67,206,207],{"class":80},"└──",[67,209,210],{"class":84}," tags\n",[67,212,214],{"class":69,"line":213},14,[67,215,216],{"class":73},"# Perform reference migration to reftables format.\n",[67,218,220,222,224,227,230],{"class":69,"line":219},15,[67,221,81],{"class":80},[67,223,85],{"class":84},[67,225,226],{"class":84}," refs",[67,228,229],{"class":84}," migrate",[67,231,232],{"class":91}," --ref-format=reftable\n",[67,234,236],{"class":69,"line":235},16,[67,237,238],{"class":73},"# Check that reftables backend is now in use.\n",[67,240,242,244,246],{"class":69,"line":241},17,[67,243,81],{"class":80},[67,245,153],{"class":84},[67,247,248],{"class":84}," .git/reftable\n",[67,250,252],{"class":69,"line":251},18,[67,253,254],{"class":80},".git/reftable\n",[67,256,258,260],{"class":69,"line":257},19,[67,259,168],{"class":80},[67,261,262],{"class":84}," 0x000000000001-0x000000000001-a3451eed.ref\n",[67,264,266,268],{"class":69,"line":265},20,[67,267,207],{"class":80},[67,269,270],{"class":84}," tables.list\n",[67,272,274],{"class":69,"line":273},21,[67,275,276],{"class":73},"# Check the repository config to see the updated `refstorage` format.\n",[67,278,280,282,285],{"class":69,"line":279},22,[67,281,81],{"class":80},[67,283,284],{"class":84}," cat",[67,286,287],{"class":84}," config\n",[67,289,291],{"class":69,"line":290},23,[67,292,294],{"class":293},"sgsFI","[core]\n",[67,296,298,301,304],{"class":69,"line":297},24,[67,299,300],{"class":80},"        repositoryformatversion",[67,302,303],{"class":84}," =",[67,305,306],{"class":91}," 1\n",[67,308,310,313,315],{"class":69,"line":309},25,[67,311,312],{"class":80},"        filemode",[67,314,303],{"class":84},[67,316,317],{"class":91}," true\n",[67,319,321,324,326],{"class":69,"line":320},26,[67,322,323],{"class":80},"        bare",[67,325,303],{"class":84},[67,327,317],{"class":91},[67,329,331,334,336],{"class":69,"line":330},27,[67,332,333],{"class":80},"        ignorecase",[67,335,303],{"class":84},[67,337,317],{"class":91},[67,339,341,344,346],{"class":69,"line":340},28,[67,342,343],{"class":80},"        precomposeunicode",[67,345,303],{"class":84},[67,347,317],{"class":91},[67,349,351],{"class":69,"line":350},29,[67,352,353],{"class":293},"[extensions]\n",[67,355,357,360,362],{"class":69,"line":356},30,[67,358,359],{"class":80},"        refstorage",[67,361,303],{"class":84},[67,363,364],{"class":84}," reftable\n",[12,366,367,368,48],{},"Une fois qu'un dépôt est migré, le format de stockage sur disque est mis à jour, permettant ainsi\nl'utilisation du backend « reftable ». Les opérations Git dans le dépôt continuent de\nfonctionner normalement et d'interagir avec les dépôts distants comme elles le faisaient auparavant. La migration n'a d'incidence que\nsur la manière dont les références sont stockées en interne pour le dépôt. Si vous souhaitez revenir au backend « fichiers », vous pouvez le faire avec la même commande en spécifiant à la place ",[53,369,370],{},"--ref-format=files",[12,372,373,374,380],{},"L'outil de migration présente actuellement certaines limitations notables. Les reflogs dans un dépôt font partie du backend de gestion des références et nécessitent également une migration lors du changement de format. Malheureusement, l'outil n'est pas encore capable de convertir les reflogs entre les backends « fichiers » et les backends « reftable ». De plus, un dépôt avec des ",[16,375,379],{"href":376,"rel":377,"title":378},"https://git-scm.com/docs/git-worktree/fr",[],"Arbres de travail Git","arbres de travail"," dispose en réalité de plusieurs ref stores et l'outil de migration ne prend pas encore en charge ce scénario. Par conséquent, si un dépôt contient des reflogs ou des arbres de travail, la migration des références n'est actuellement pas possible. Ces limitations pourraient être résolues dans les futures versions.",[12,382,383],{},"Les dépôts Git « bare » ne contiennent pas de reflogs, ce qui facilite leur migration. Pour migrer un dépôt « non bare » standard, les reflogs doivent d'abord être supprimés. Ainsi, il est possible de migrer tout dépôt dépourvu de reflog et d'arbre de travail. En tenant compte de ces limitations, cet outil de migration peut être très utile pour profiter des avantages du backend « reftable » dans vos dépôts existants.",[12,385,386,387,48],{},"Ce projet a été mené par ",[16,388,391],{"href":389,"rel":390},"https://gitlab.com/pks-gitlab",[],"Patrick Steinhardt",[23,393,395],{"id":394},"mises-à-jour-des-références-symboliques-transactionnelles","Mises à jour des références symboliques transactionnelles",[12,397,398,399,404,405,408],{},"La commande ",[16,400,403],{"href":401,"rel":402},"https://git-scm.com/docs/git-update-ref",[],"git-update-ref(1)","\npermet de mettre à jour les références dans un dépôt Git. Ces mises à jour de références peuvent également être effectuées de manière atomique en bloc via des transactions, en utilisant la commande\n",[53,406,407],{},"git update-ref --stdin"," pour transmettre les informations de mise à jour de références à stdin. Voici un exemple :",[58,410,412],{"className":60,"code":411,"language":62,"meta":63,"style":63},"$ git init .\n$ git branch -m main\n$ git commit --allow-empty -m \"foo\" && git commit --allow-empty -m \"bar\"\n# Retrieve the object ID of the two commits created.\n$ git rev-parse main~ main\n567aac2b3d1fbf0bd2433f669eb0b82a0348775e\n3b13462a9a42e0a3130b9cbc472ab479d3ef0631\n# Start transaction, provide update-ref instructions, and commit.\n$ git update-ref --stdin \u003C\u003CEOF\n> start\n> create refs/heads/new-ref 3b13462a9a42e0a3130b9cbc472ab479d3ef0631\n> update refs/heads/main 567aac2b3d1fbf0bd2433f669eb0b82a0348775e\n> commit\n> EOF\n$ git for-each-ref\n567aac2b3d1fbf0bd2433f669eb0b82a0348775e commit refs/heads/main\n3b13462a9a42e0a3130b9cbc472ab479d3ef0631 commit refs/heads/my-ref\n",[53,413,414,424,436,466,471,485,490,495,500,519,524,529,534,539,544,549,554],{"__ignoreMap":63},[67,415,416,418,420,422],{"class":69,"line":70},[67,417,81],{"class":80},[67,419,85],{"class":84},[67,421,88],{"class":84},[67,423,95],{"class":84},[67,425,426,428,430,432,434],{"class":69,"line":77},[67,427,81],{"class":80},[67,429,85],{"class":84},[67,431,130],{"class":84},[67,433,111],{"class":91},[67,435,201],{"class":84},[67,437,438,440,442,444,446,448,451,454,457,459,461,463],{"class":69,"line":98},[67,439,81],{"class":80},[67,441,85],{"class":84},[67,443,105],{"class":84},[67,445,108],{"class":91},[67,447,111],{"class":91},[67,449,450],{"class":84}," \"foo\"",[67,452,453],{"class":293}," && ",[67,455,456],{"class":80},"git",[67,458,105],{"class":84},[67,460,108],{"class":91},[67,462,111],{"class":91},[67,464,465],{"class":84}," \"bar\"\n",[67,467,468],{"class":69,"line":117},[67,469,470],{"class":73},"# Retrieve the object ID of the two commits created.\n",[67,472,473,475,477,480,483],{"class":69,"line":123},[67,474,81],{"class":80},[67,476,85],{"class":84},[67,478,479],{"class":84}," rev-parse",[67,481,482],{"class":84}," main~",[67,484,201],{"class":84},[67,486,487],{"class":69,"line":136},[67,488,489],{"class":80},"567aac2b3d1fbf0bd2433f669eb0b82a0348775e\n",[67,491,492],{"class":69,"line":148},[67,493,494],{"class":80},"3b13462a9a42e0a3130b9cbc472ab479d3ef0631\n",[67,496,497],{"class":69,"line":159},[67,498,499],{"class":73},"# Start transaction, provide update-ref instructions, and commit.\n",[67,501,502,504,506,509,512,516],{"class":69,"line":165},[67,503,81],{"class":80},[67,505,85],{"class":84},[67,507,508],{"class":84}," update-ref",[67,510,511],{"class":91}," --stdin",[67,513,515],{"class":514},"sD7c4"," \u003C\u003C",[67,517,518],{"class":84},"EOF\n",[67,520,521],{"class":69,"line":174},[67,522,523],{"class":84},"> start\n",[67,525,526],{"class":69,"line":185},[67,527,528],{"class":84},"> create refs/heads/new-ref 3b13462a9a42e0a3130b9cbc472ab479d3ef0631\n",[67,530,531],{"class":69,"line":194},[67,532,533],{"class":84},"> update refs/heads/main 567aac2b3d1fbf0bd2433f669eb0b82a0348775e\n",[67,535,536],{"class":69,"line":204},[67,537,538],{"class":84},"> commit\n",[67,540,541],{"class":69,"line":213},[67,542,543],{"class":84},"> EOF\n",[67,545,546],{"class":69,"line":219},[67,547,548],{"class":84},"$ git for-each-ref\n",[67,550,551],{"class":69,"line":235},[67,552,553],{"class":84},"567aac2b3d1fbf0bd2433f669eb0b82a0348775e commit refs/heads/main\n",[67,555,556],{"class":69,"line":241},[67,557,558],{"class":84},"3b13462a9a42e0a3130b9cbc472ab479d3ef0631 commit refs/heads/my-ref\n",[12,560,561],{},"Dans cet exemple, une fois la transaction validée, une nouvelle branche est créée et pointe vers le commit « bar » tandis que la branche principale est mise à jour et pointe vers le commit « foo » précédent. La validation de la transaction exécute les mises à jour des références spécifiées de manière atomique. Si une mise à jour concernant une référence particulière échoue, la transaction est abandonnée et aucune mise à jour de références n'est effectuée.",[12,563,564,565,568,569,568,572,575,576,579],{},"Il convient de noter ici qu'aucune instruction quant à la prise en charge des mises à jour des références symboliques n'est disponible pour ces\ntransactions. Si un utilisateur souhaite mettre à jour une référence symbolique en même temps que d'autres références\nde manière atomique dans une seule transaction, il n'existe pas d'outil pour le faire. Dans la\nnouvelle version de Git, les instructions ",[53,566,567],{},"symref-create",", ",[53,570,571],{},"symref-update",[53,573,574],{},"symref-delete"," et\n",[53,577,578],{},"symref-verify"," sont introduites pour fournir cette fonctionnalité.",[58,581,583],{"className":60,"code":582,"language":62,"meta":63,"style":63},"# Create a symref that will be updated during the next operation.\n$ git symbolic-ref refs/heads/symref refs/heads/main\n# The --no-deref flag is required to ensure the symref itself is updated.\n$ git update-ref --stdin --no-deref \u003C\u003CEOF\n> start\n> symref-create refs/heads/new-symref refs/heads/main\n> symref-update refs/heads/symref refs/heads/new-ref\n> commit\n> EOF\n$ git symbolic-ref refs/heads/symref\nrefs/heads/new-ref\n$ git symbolic-ref refs/heads/new-symref\nrefs/heads/main\n",[53,584,585,590,605,610,627,631,636,641,645,649,654,659,664],{"__ignoreMap":63},[67,586,587],{"class":69,"line":70},[67,588,589],{"class":73},"# Create a symref that will be updated during the next operation.\n",[67,591,592,594,596,599,602],{"class":69,"line":77},[67,593,81],{"class":80},[67,595,85],{"class":84},[67,597,598],{"class":84}," symbolic-ref",[67,600,601],{"class":84}," refs/heads/symref",[67,603,604],{"class":84}," refs/heads/main\n",[67,606,607],{"class":69,"line":98},[67,608,609],{"class":73},"# The --no-deref flag is required to ensure the symref itself is updated.\n",[67,611,612,614,616,618,620,623,625],{"class":69,"line":117},[67,613,81],{"class":80},[67,615,85],{"class":84},[67,617,508],{"class":84},[67,619,511],{"class":91},[67,621,622],{"class":91}," --no-deref",[67,624,515],{"class":514},[67,626,518],{"class":84},[67,628,629],{"class":69,"line":123},[67,630,523],{"class":84},[67,632,633],{"class":69,"line":136},[67,634,635],{"class":84},"> symref-create refs/heads/new-symref refs/heads/main\n",[67,637,638],{"class":69,"line":148},[67,639,640],{"class":84},"> symref-update refs/heads/symref refs/heads/new-ref\n",[67,642,643],{"class":69,"line":159},[67,644,538],{"class":84},[67,646,647],{"class":69,"line":165},[67,648,543],{"class":84},[67,650,651],{"class":69,"line":174},[67,652,653],{"class":84},"$ git symbolic-ref refs/heads/symref\n",[67,655,656],{"class":69,"line":185},[67,657,658],{"class":84},"refs/heads/new-ref\n",[67,660,661],{"class":69,"line":194},[67,662,663],{"class":84},"$ git symbolic-ref refs/heads/new-symref\n",[67,665,666],{"class":69,"line":204},[67,667,668],{"class":84},"refs/heads/main\n",[12,670,671,672,48],{},"L'exemple ci-dessus illustre la création d'une nouvelle référence symbolique et la mise à jour d'une autre\nau cours d'une transaction. Ces nouvelles instructions pour les références symboliques peuvent désormais être\ncombinées avec les instructions existantes afin de réaliser toutes sortes de\nmises à jour de références dans une seule transaction. Pour en savoir plus\nsur chacune de ces nouvelles instructions, consultez la ",[16,673,675],{"href":401,"rel":674},[],"documentation",[12,677,386,678,48],{},[16,679,682],{"href":680,"rel":681},"https://gitlab.com/knayakgl",[],"Karthik Nayak",[23,684,686],{"id":685},"améliorations-de-lexpérience-utilisateur-pour-git-config1","Améliorations de l'expérience utilisateur pour git-config(1)",[12,688,689],{},"La commande git-config(1) est utilisée dans Git pour visualiser et modifier les options de configuration, tant au niveau local (pour un dépôt spécifique) qu'au niveau global (pour l'ensemble de l'interface utilisateur). Les modes d'interaction avec la configuration peuvent être choisis explicitement à l'aide d'indicateurs spécifiques ou déterminés implicitement en fonction du nombre d'arguments fournis à la commande. Voici un exemple :",[58,691,693],{"className":60,"code":692,"language":62,"meta":63,"style":63},"$ git config --list\n# Explicit retrieval of username configuration\n$ git config --get user.name\n# Implicit retrieval of username configuration\n$ git config user.name\n# Explicit setting of username configuration\n$ git config --set user.name \"Sidney Jones\"\n# Implicit setting of username configuration\n$ git config user.name \"Sidney Jones\"\n# An optional third argument is also accepted. What do you think this does?\n$ git config \u003Cname> [\u003Cvalue> [\u003Cvalue-pattern>]]\n",[53,694,695,707,712,726,731,741,746,763,768,780,785],{"__ignoreMap":63},[67,696,697,699,701,704],{"class":69,"line":70},[67,698,81],{"class":80},[67,700,85],{"class":84},[67,702,703],{"class":84}," config",[67,705,706],{"class":91}," --list\n",[67,708,709],{"class":69,"line":77},[67,710,711],{"class":73},"# Explicit retrieval of username configuration\n",[67,713,714,716,718,720,723],{"class":69,"line":98},[67,715,81],{"class":80},[67,717,85],{"class":84},[67,719,703],{"class":84},[67,721,722],{"class":91}," --get",[67,724,725],{"class":84}," user.name\n",[67,727,728],{"class":69,"line":117},[67,729,730],{"class":73},"# Implicit retrieval of username configuration\n",[67,732,733,735,737,739],{"class":69,"line":123},[67,734,81],{"class":80},[67,736,85],{"class":84},[67,738,703],{"class":84},[67,740,725],{"class":84},[67,742,743],{"class":69,"line":136},[67,744,745],{"class":73},"# Explicit setting of username configuration\n",[67,747,748,750,752,754,757,760],{"class":69,"line":148},[67,749,81],{"class":80},[67,751,85],{"class":84},[67,753,703],{"class":84},[67,755,756],{"class":91}," --set",[67,758,759],{"class":84}," user.name",[67,761,762],{"class":84}," \"Sidney Jones\"\n",[67,764,765],{"class":69,"line":159},[67,766,767],{"class":73},"# Implicit setting of username configuration\n",[67,769,770,772,774,776,778],{"class":69,"line":165},[67,771,81],{"class":80},[67,773,85],{"class":84},[67,775,703],{"class":84},[67,777,759],{"class":84},[67,779,762],{"class":84},[67,781,782],{"class":69,"line":174},[67,783,784],{"class":73},"# An optional third argument is also accepted. What do you think this does?\n",[67,786,787,789,791,793,796,799,802,805],{"class":69,"line":185},[67,788,81],{"class":80},[67,790,85],{"class":84},[67,792,703],{"class":84},[67,794,795],{"class":514}," \u003C",[67,797,798],{"class":84},"nam",[67,800,801],{"class":293},"e",[67,803,804],{"class":514},">",[67,806,807],{"class":293}," [\u003Cvalue> [\u003Cvalue-pattern>]]\n",[12,809,810,811,816,817,820,821,568,824,568,827,568,830,568,833,568,836,839,840,843],{},"Globalement, l'interface utilisateur de ",[16,812,815],{"href":813,"rel":814},"https://git-scm.com/docs/git-config",[],"git-config(1)","\nn'est pas cohérente avec le fonctionnement d'autres commandes Git plus récentes, où l'on utilise généralement des sous-commandes. Par exemple, ",[53,818,819],{},"git remote list",". Cette nouvelle version Git introduit les sous-commandes ",[53,822,823],{},"list",[53,825,826],{},"get",[53,828,829],{},"set",[53,831,832],{},"unset",[53,834,835],{},"rename-section",[53,837,838],{},"remove-section"," et ",[53,841,842],{},"edit"," pour la commande config, tout en conservant l'ancienne syntaxe. Ce changement vise à améliorer l'expérience utilisateur en adaptant la commande config pour qu'elle suive des pratiques plus modernes et soit davantage alignée avec les autres commandes de Git. Par exemple :",[58,845,847],{"className":60,"code":846,"language":62,"meta":63,"style":63},"$ git config list\n$ git config get user.name\n$ git config set user.name \"Sidney Jones\"\n",[53,848,849,860,873],{"__ignoreMap":63},[67,850,851,853,855,857],{"class":69,"line":70},[67,852,81],{"class":80},[67,854,85],{"class":84},[67,856,703],{"class":84},[67,858,859],{"class":84}," list\n",[67,861,862,864,866,868,871],{"class":69,"line":77},[67,863,81],{"class":80},[67,865,85],{"class":84},[67,867,703],{"class":84},[67,869,870],{"class":84}," get",[67,872,725],{"class":84},[67,874,875,877,879,881,884,886],{"class":69,"line":98},[67,876,81],{"class":80},[67,878,85],{"class":84},[67,880,703],{"class":84},[67,882,883],{"class":84}," set",[67,885,759],{"class":84},[67,887,762],{"class":84},[12,889,386,890,48],{},[16,891,391],{"href":389,"rel":892},[],[23,894,896],{"id":895},"correction-de-la-régression-des-performances","Correction de la régression des performances",[12,898,899,900,903,904,907],{},"Les opérations Git qui utilisent des attributs reposent sur la lecture des fichiers ",[53,901,902],{},".gitattributes"," présents dans l'arbre de travail du dépôt. Cela pose un problème pour les dépôts Git « bare » qui sont, par définition, dépourvus d'un arbre de travail. Pour contourner ce problème, Git dispose de la configuration ",[53,905,906],{},"attr.tree",", qui permet de définir un arbre source et de l'utiliser pour en extraire des attributs.",[12,909,910,911,914,915,917,918,920],{},"Dans la version 2.43.0 de Git, Git a commencé à utiliser par défaut l'arborescence de ",[53,912,913],{},"HEAD"," comme source des attributs Git dans le cas de dépôts « bare  ». Malheureusement, cette charge de travail supplémentaire liée à la recherche de fichiers d'attributs Git a eu de graves impacts sur les performances. En effet, à chaque recherche d'attribut, l'arbre source est parcouru dans son ensemble pour rechercher un fichier ",[53,916,902],{}," associé, si ",[53,919,906],{}," est défini. Plus l'arbre source du dépôt est grand et profond, plus la régression des performances est évidente. Par exemple, des tests de performance réalisés sur le dépôt linux.git ont montré que\ngit-pack-objects(1) mettait 1,68 fois plus de temps à s'exécuter. Cela peut entraîner des ralentissements lors d'opérations de clonage ou de récupération.",[58,922,927],{"className":923,"code":925,"language":926,"meta":63},[924],"language-text","# attr.tree set to HEAD as done by default in Git version 2.43.0.\nBenchmark 1: git -c attr.tree=HEAD pack-objects --all --stdout \u003C/dev/null >/dev/null\n  Time (mean ± σ):     133.807 s ±  4.866 s    [User: 129.034 s, System: 6.671 s]\n  Range (min … max):   128.447 s … 137.945 s    3 runs\n\n# attr.tree is set to an empty tree to disable attribute lookup as done in Git versions prior to 2.43.0.\nBenchmark 2: git -c attr.tree=4b825dc642cb6eb9a060e54bf8d69288fbee4904 pack-objects --all --stdout \u003C/dev/null >/dev/null\n  Time (mean ± σ):     79.442 s ±  0.822 s    [User: 77.500 s, System: 6.056 s]\n  Range (min … max):   78.583 s … 80.221 s    3 runs\n","text",[53,928,925],{"__ignoreMap":63},[12,930,931,932,568,935,568,938,839,941,944,945,947,948,950,951,48],{},"Les commandes Git les plus impactées étaient ",[53,933,934],{},"clone",[53,936,937],{},"pull",[53,939,940],{},"fetch",[53,942,943],{},"diff",", particulièrement lorsqu'elles étaient utilisées sur des dépôts avec des arborescences volumineuses ou profondes. Par conséquent, dans Git 2.46.0, la configuration ",[53,946,906],{}," a été partiellement modifiée pour ne plus être définie sur ",[53,949,913],{}," par défaut afin de remédier à la régression des performances. Pour en savoir plus, consultez ce ",[16,952,955],{"href":953,"rel":954},"https://lore.kernel.org/git/CAKOHPAn1btewYTdLYWpW+fOaXMY+JQZsLCQxUSwoUqnnFN_ohA@mail.gmail.com/",[],"fil de discussion",[23,957,959],{"id":958},"migration-des-tests-unitaires","Migration des tests unitaires",[12,961,962],{},"Historiquement, pour tester Git, les développeurs utilisaient des scripts shell\npour réaliser des tests de bout en bout. Un framework de tests unitaires écrit en C a été récemment\nintégré au projet Git. Ce nouveau framework\npermet de tester en détail les implémentations à un niveau granulaire,\ntel que chaque appel de fonction, et complète les tests de bout en bout existants. Certains tests de bout en bout existants sont plus adaptés aux tests unitaires et sont donc de bons candidats pour le portage de tests.",[12,964,965,966,971,972,839,977,48],{},"Cette année, GitLab continu d'aider les contributeurs du ",[16,967,970],{"href":968,"rel":969},"https://summerofcode.withgoogle.com/",[],"Google Summer of Code (GSoC)"," qui travaillent sur le projet Git. Grâce aux efforts déployés dans le cadre de ces projets GSoC et à la contribution de la communauté Git au sens large, certains tests existants sont révisés et migrés vers le framework de tests unitaires. Pour la sortie de la nouvelle version Git 2.46.0, plusieurs contributions ont été apportées dans le but d'améliorer les tests dans le projet Git. Pour suivre l'avancement de ces projets de contributeurs GSoC, consultez les blogs de ",[16,973,976],{"href":974,"rel":975},"https://chand-ra.github.io/",[],"Chandra",[16,978,981],{"href":979,"rel":980},"https://spectre10.github.io/posts/",[],"Ghanshyam",[23,983,985],{"id":984},"correction-du-bundle-uri","Correction du bundle URI",[12,987,988,989,48],{},"En général, lorsqu'un client récupère des données à partir d'un dépôt distant, tous les objets nécessaires\nsont envoyés dans un fichier groupé généré par le serveur distant. Pour éviter une partie de ce\ntraitement, les serveurs peuvent choisir de proposer des bundles prêts à l'emploi, stockés séparément du serveur distant, qui contiennent des ensembles de références et d'objets dont le client peut avoir besoin. Le client peut d'abord récupérer ces bundles grâce à un mécanisme appelé ",[16,990,993],{"href":991,"rel":992},"https://git-scm.com/docs/bundle-uri",[],"bundle-uri",[12,995,996,997,1002],{},"Grâce à ",[16,998,1001],{"href":999,"rel":1000},"https://lore.kernel.org/git/pull.1730.git.1715742069966.gitgitgadget@gmail.com/",[],"Xing Xin",", un problème a été identifié et corrigé : Git, malgré le téléchargement de certains bundles, continuait de télécharger tous les objets et les références depuis le dépôt distant, comme si aucun bundle n'avait été récupéré. La raison de ce problème était que Git ne découvrait pas correctement l'ensemble des bundles téléchargés, ce qui entraînait la nécessité de récupérer les bundles suivants depuis le dépôt distant. Grâce à cette correction, les dépôts distants utilisant le mécanisme bundle-uri peuvent éviter d'avoir à effectuer un travail redondant et ainsi améliorer les performances.",[23,1004,1006],{"id":1005},"en-savoir-plus","En savoir plus",[12,1008,1009,1010,1014,1015,1020],{},"Cet article n'a mis en évidence que quelques-unes des contributions apportées par GitLab et\nla communauté Git au sens large pour cette nouvelle version. Vous pouvez approfondir ce sujet en lisant ",[16,1011,1013],{"href":18,"rel":1012},[],"l'annonce officielle"," du projet Git. Consultez également nos ",[16,1016,1019],{"href":1017,"rel":1018},"https://about.gitlab.com/blog/tags/git/",[],"précédents articles de blog sur les nouvelles versions de Git"," pour en découvrir davantage sur les contributions de l'équipe GitLab.",[1022,1023,1024],"style",{},"html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}",{"title":63,"searchDepth":77,"depth":77,"links":1026},[1027,1028,1029,1030,1031,1032,1033],{"id":25,"depth":77,"text":26},{"id":394,"depth":77,"text":395},{"id":685,"depth":77,"text":686},{"id":895,"depth":77,"text":896},{"id":958,"depth":77,"text":959},{"id":984,"depth":77,"text":985},{"id":1005,"depth":77,"text":1006},"open-source","2024-07-29","Découvrez les contributions de l'équipe Git de GitLab et de la communauté Git au sens large à la dernière version de Git.","md",null,true,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749660028/Blog/Hero%20Images/blog-image-template-1800x945__25_.png",{},"/fr-fr/blog/whats-new-in-git-2-46-0",{"title":5,"description":1036,"ogTitle":5,"ogDescription":1036,"noIndex":1044,"ogImage":1040,"ogUrl":1045,"ogSiteName":1046,"ogType":1047,"canonicalUrls":1045},false,"https://about.gitlab.com/blog/whats-new-in-git-2-46-0","https://about.gitlab.com","article","whats-new-in-git-2-46-0","fr-fr/blog/whats-new-in-git-2-46-0",[456,1051,1052],"open source","community","BlogPost","2024-08-15","TWEQCy2ivi-ze8kKhD945_rr0pAHVwWklvdqHReudK8",{"logo":1057,"freeTrial":1062,"sales":1067,"login":1072,"items":1077,"search":1404,"minimal":1440,"duo":1459,"switchNav":1468,"pricingDeployment":1479},{"config":1058},{"href":1059,"dataGaName":1060,"dataGaLocation":1061},"/fr-fr/","gitlab logo","header",{"text":1063,"config":1064},"Commencer un essai gratuit",{"href":1065,"dataGaName":1066,"dataGaLocation":1061},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/fr-fr&glm_content=default-saas-trial/","free trial",{"text":1068,"config":1069},"Demander une démo",{"href":1070,"dataGaName":1071,"dataGaLocation":1061},"/fr-fr/sales/?contact-topic=request-demo","sales",{"text":1073,"config":1074},"Connexion",{"href":1075,"dataGaName":1076,"dataGaLocation":1061},"https://gitlab.com/users/sign_in/","sign in",[1078,1106,1208,1213,1326,1382],{"text":1079,"config":1080,"menu":1082},"Plateforme",{"dataNavLevelOne":1081},"platform",{"type":1083,"columns":1084},"cards",[1085,1091,1099],{"title":1079,"description":1086,"link":1087},"La plateforme d'orchestration intelligente pour le DevSecOps",{"text":1088,"config":1089},"Explorer notre plateforme",{"href":1090,"dataGaName":1081,"dataGaLocation":1061},"/fr-fr/platform/",{"title":1092,"description":1093,"link":1094},"GitLab Duo Agent Platform","L'IA agentique pour l'ensemble du cycle de développement logiciel",{"text":1095,"config":1096},"Découvrir GitLab Duo",{"href":1097,"dataGaName":1098,"dataGaLocation":1061},"/fr-fr/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":1100,"description":1101,"link":1102},"Pourquoi GitLab ?","Découvrez les principales raisons pour lesquelles les entreprises choisissent GitLab",{"text":1006,"config":1103},{"href":1104,"dataGaName":1105,"dataGaLocation":1061},"/fr-fr/why-gitlab/","why gitlab",{"text":1107,"left":1039,"config":1108,"menu":1110},"Produit",{"dataNavLevelOne":1109},"solutions",{"type":1111,"link":1112,"columns":1116,"feature":1187},"lists",{"text":1113,"config":1114},"Voir toutes les solutions",{"href":1115,"dataGaName":1109,"dataGaLocation":1061},"/fr-fr/solutions/",[1117,1142,1165],{"title":1118,"description":1119,"link":1120,"items":1125},"Automatisation","CI/CD et automatisation pour accélérer le déploiement",{"config":1121},{"icon":1122,"href":1123,"dataGaName":1124,"dataGaLocation":1061},"AutomatedCodeAlt","/fr-fr/solutions/delivery-automation/","automated software delivery",[1126,1130,1133,1138],{"text":1127,"config":1128},"CI/CD",{"href":1129,"dataGaLocation":1061,"dataGaName":1127},"/fr-fr/solutions/continuous-integration/",{"text":1092,"config":1131},{"href":1097,"dataGaLocation":1061,"dataGaName":1132},"gitlab duo agent platform - product menu",{"text":1134,"config":1135},"Gestion du code source",{"href":1136,"dataGaLocation":1061,"dataGaName":1137},"/fr-fr/solutions/source-code-management/","Source Code Management",{"text":1139,"config":1140},"Livraison de logiciels automatisée",{"href":1123,"dataGaLocation":1061,"dataGaName":1141},"Automated software delivery",{"title":1143,"description":1144,"link":1145,"items":1150},"Sécurité","Livrez du code plus rapidement sans compromettre la sécurité",{"config":1146},{"href":1147,"dataGaName":1148,"dataGaLocation":1061,"icon":1149},"/fr-fr/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[1151,1155,1160],{"text":1152,"config":1153},"Tests de sécurité des applications",{"href":1147,"dataGaName":1154,"dataGaLocation":1061},"Application security testing",{"text":1156,"config":1157},"Sécurité de la chaîne d'approvisionnement logicielle",{"href":1158,"dataGaLocation":1061,"dataGaName":1159},"/fr-fr/solutions/supply-chain/","Software supply chain security",{"text":1161,"config":1162},"Conformité logicielle",{"href":1163,"dataGaName":1164,"dataGaLocation":1061},"/fr-fr/solutions/software-compliance/","software compliance",{"title":1166,"link":1167,"items":1172},"Mesures",{"config":1168},{"icon":1169,"href":1170,"dataGaName":1171,"dataGaLocation":1061},"DigitalTransformation","/fr-fr/solutions/visibility-measurement/","visibility and measurement",[1173,1177,1182],{"text":1174,"config":1175},"Visibilité et mesures",{"href":1170,"dataGaLocation":1061,"dataGaName":1176},"Visibility and Measurement",{"text":1178,"config":1179},"Gestion de la chaîne de valeur",{"href":1180,"dataGaLocation":1061,"dataGaName":1181},"/fr-fr/solutions/value-stream-management/","Value Stream Management",{"text":1183,"config":1184},"Analyses et informations",{"href":1185,"dataGaLocation":1061,"dataGaName":1186},"/fr-fr/solutions/analytics-and-insights/","Analytics and insights",{"title":1188,"type":1111,"items":1189},"GitLab",[1190,1196,1202],{"text":1191,"config":1192},"Entreprises",{"icon":1193,"href":1194,"dataGaLocation":1061,"dataGaName":1195},"Building","/fr-fr/enterprise/","enterprise",{"text":1197,"config":1198},"Pour les PME",{"icon":1199,"href":1200,"dataGaLocation":1061,"dataGaName":1201},"Work","/fr-fr/small-business/","small business",{"text":1203,"config":1204},"Pour le secteur public",{"icon":1205,"href":1206,"dataGaLocation":1061,"dataGaName":1207},"Organization","/fr-fr/solutions/public-sector/","public sector",{"text":1209,"config":1210},"Tarifs",{"href":1211,"dataGaName":1212,"dataGaLocation":1061,"dataNavLevelOne":1212},"/fr-fr/pricing/","pricing",{"text":1214,"config":1215,"menu":1217},"Ressources",{"dataNavLevelOne":1216},"resources",{"type":1111,"link":1218,"columns":1222,"feature":1315},{"text":1219,"config":1220},"Afficher toutes les ressources",{"href":1221,"dataGaName":1216,"dataGaLocation":1061},"/fr-fr/resources/",[1223,1256,1283],{"title":1224,"items":1225},"Premiers pas",[1226,1231,1236,1241,1246,1251],{"text":1227,"config":1228},"Installation",{"href":1229,"dataGaName":1230,"dataGaLocation":1061},"/fr-fr/install/","install",{"text":1232,"config":1233},"Guides de démarrage",{"href":1234,"dataGaName":1235,"dataGaLocation":1061},"/fr-fr/get-started/","quick setup checklists",{"text":1237,"config":1238},"Apprentissage",{"href":1239,"dataGaLocation":1061,"dataGaName":1240},"https://university.gitlab.com/","learn",{"text":1242,"config":1243},"Documentation",{"href":1244,"dataGaName":1245,"dataGaLocation":1061},"https://docs.gitlab.com/","product documentation",{"text":1247,"config":1248},"Vidéos sur les bonnes pratiques",{"href":1249,"dataGaName":1250,"dataGaLocation":1061},"/fr-fr/getting-started-videos/","best practice videos",{"text":1252,"config":1253},"Intégrations",{"href":1254,"dataGaName":1255,"dataGaLocation":1061},"/fr-fr/integrations/","integrations",{"title":1257,"items":1258},"Découvrir",[1259,1264,1269,1274,1278],{"text":1260,"config":1261},"Témoignages clients",{"href":1262,"dataGaName":1263,"dataGaLocation":1061},"/fr-fr/customers/","customer success stories",{"text":1265,"config":1266},"Blog",{"href":1267,"dataGaName":1268,"dataGaLocation":1061},"/fr-fr/blog/","blog",{"text":1270,"config":1271},"Demo Hub",{"href":1272,"dataGaName":1273,"dataGaLocation":1061},"/fr-fr/demo-hub/","demo hub",{"text":1275,"config":1276},"The Source",{"href":1277,"dataGaName":1268,"dataGaLocation":1061},"/fr-fr/the-source/",{"text":1279,"config":1280},"Travail à distance",{"href":1281,"dataGaName":1282,"dataGaLocation":1061},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":1284,"items":1285},"Connecter",[1286,1291,1296,1300,1305,1310],{"text":1287,"config":1288},"Services GitLab",{"href":1289,"dataGaName":1290,"dataGaLocation":1061},"/fr-fr/services/","services",{"text":1292,"config":1293},"Contribuer",{"href":1294,"dataGaName":1295,"dataGaLocation":1061},"https://contributors.gitlab.com","contribute",{"text":1297,"config":1298},"Communauté",{"href":1299,"dataGaName":1052,"dataGaLocation":1061},"/community/",{"text":1301,"config":1302},"Forum",{"href":1303,"dataGaName":1304,"dataGaLocation":1061},"https://forum.gitlab.com/","forum",{"text":1306,"config":1307},"Événements",{"href":1308,"dataGaName":1309,"dataGaLocation":1061},"/events/","events",{"text":1311,"config":1312},"Partenaires",{"href":1313,"dataGaName":1314,"dataGaLocation":1061},"/fr-fr/partners/","partners",{"config":1316,"title":1319,"text":1320,"link":1321},{"background":1317,"textColor":1318},"url('https://res.cloudinary.com/about-gitlab-com/image/upload/v1777322348/qpq8yrgn8knii57omj0c.png')","#000","Nouveautés de GitLab","Découvrez les dernières fonctionnalités et améliorations.",{"text":1322,"config":1323},"Lire les articles les plus récents",{"href":1324,"dataGaName":1325,"dataGaLocation":1061},"/fr-fr/whats-new/","whats new",{"text":1327,"config":1328,"menu":1330},"Société",{"dataNavLevelOne":1329},"company",{"type":1111,"columns":1331},[1332],{"items":1333},[1334,1339,1345,1347,1352,1357,1362,1367,1372,1377],{"text":1335,"config":1336},"À propos",{"href":1337,"dataGaName":1338,"dataGaLocation":1061},"/fr-fr/company/","about",{"text":1340,"config":1341,"footerGa":1344},"Carrières",{"href":1342,"dataGaName":1343,"dataGaLocation":1061},"/jobs/","jobs",{"dataGaName":1343},{"text":1306,"config":1346},{"href":1308,"dataGaName":1309,"dataGaLocation":1061},{"text":1348,"config":1349},"Leadership",{"href":1350,"dataGaName":1351,"dataGaLocation":1061},"/company/team/e-group/","leadership",{"text":1353,"config":1354},"Manuel",{"href":1355,"dataGaName":1356,"dataGaLocation":1061},"https://handbook.gitlab.com/","handbook",{"text":1358,"config":1359},"Relations avec les investisseurs",{"href":1360,"dataGaName":1361,"dataGaLocation":1061},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":1363,"config":1364},"Trust Center",{"href":1365,"dataGaName":1366,"dataGaLocation":1061},"/fr-fr/security/","trust center",{"text":1368,"config":1369},"Centre pour la transparence de l'IA",{"href":1370,"dataGaName":1371,"dataGaLocation":1061},"/fr-fr/ai-transparency-center/","ai transparency center",{"text":1373,"config":1374},"Newsletter",{"href":1375,"dataGaName":1376,"dataGaLocation":1061},"/company/contact/#contact-forms","newsletter",{"text":1378,"config":1379},"Presse",{"href":1380,"dataGaName":1381,"dataGaLocation":1061},"/press/","press",{"text":1383,"config":1384,"menu":1385},"Nous contacter",{"dataNavLevelOne":1329},{"type":1111,"columns":1386},[1387],{"items":1388},[1389,1394,1399],{"text":1390,"config":1391},"Contacter l'équipe commerciale",{"href":1392,"dataGaName":1393,"dataGaLocation":1061},"/fr-fr/sales/","talk to sales",{"text":1395,"config":1396},"Assistance GitLab",{"href":1397,"dataGaName":1398,"dataGaLocation":1061},"https://support.gitlab.com/hc/en-us","support portal",{"text":1400,"config":1401},"Portail clients GitLab",{"href":1402,"dataGaName":1403,"dataGaLocation":1061},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":1405,"login":1406,"suggestions":1413},"Fermer",{"text":1407,"link":1408},"Pour rechercher des dépôts et des projets, connectez-vous à",{"text":1409,"config":1410},"GitLab.com",{"href":1075,"dataGaName":1411,"dataGaLocation":1412},"search login","search",{"text":1414,"default":1415},"Suggestions",[1416,1419,1424,1426,1431,1436],{"text":1092,"config":1417},{"href":1097,"dataGaName":1418,"dataGaLocation":1412},"GitLab Duo Agent Platform",{"text":1420,"config":1421},"Suggestions de code (IA)",{"href":1422,"dataGaName":1423,"dataGaLocation":1412},"/fr-fr/solutions/code-suggestions/","Code Suggestions (AI)",{"text":1127,"config":1425},{"href":1129,"dataGaName":1127,"dataGaLocation":1412},{"text":1427,"config":1428},"GitLab sur AWS",{"href":1429,"dataGaName":1430,"dataGaLocation":1412},"/fr-fr/partners/technology-partners/aws/","GitLab on AWS",{"text":1432,"config":1433},"GitLab sur Google Cloud",{"href":1434,"dataGaName":1435,"dataGaLocation":1412},"/fr-fr/partners/technology-partners/google-cloud-platform/","GitLab on Google Cloud",{"text":1437,"config":1438},"Pourquoi utiliser GitLab ?",{"href":1104,"dataGaName":1439,"dataGaLocation":1412},"Why GitLab?",{"freeTrial":1441,"mobileIcon":1446,"desktopIcon":1451,"secondaryButton":1454},{"text":1442,"config":1443},"Commencer votre essai gratuit",{"href":1444,"dataGaName":1066,"dataGaLocation":1445},"https://gitlab.com/-/trials/new/","nav",{"altText":1447,"config":1448},"Icône GitLab",{"src":1449,"dataGaName":1450,"dataGaLocation":1445},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":1447,"config":1452},{"src":1453,"dataGaName":1450,"dataGaLocation":1445},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":1455,"config":1456},"Commencer",{"href":1457,"dataGaName":1458,"dataGaLocation":1445},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/fr-fr/get-started/","get started",{"freeTrial":1460,"mobileIcon":1464,"desktopIcon":1466},{"text":1461,"config":1462},"En savoir plus sur GitLab Duo",{"href":1097,"dataGaName":1463,"dataGaLocation":1445},"gitlab duo",{"altText":1447,"config":1465},{"src":1449,"dataGaName":1450,"dataGaLocation":1445},{"altText":1447,"config":1467},{"src":1453,"dataGaName":1450,"dataGaLocation":1445},{"button":1469,"mobileIcon":1474,"desktopIcon":1476},{"text":1470,"config":1471},"/switch",{"href":1472,"dataGaName":1473,"dataGaLocation":1445},"#contact","switch",{"altText":1447,"config":1475},{"src":1449,"dataGaName":1450,"dataGaLocation":1445},{"altText":1447,"config":1477},{"src":1478,"dataGaName":1450,"dataGaLocation":1445},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":1480,"mobileIcon":1485,"desktopIcon":1487},{"text":1481,"config":1482},"Retour aux tarifs",{"href":1211,"dataGaName":1483,"dataGaLocation":1445,"icon":1484},"back to pricing","GoBack",{"altText":1447,"config":1486},{"src":1449,"dataGaName":1450,"dataGaLocation":1445},{"altText":1447,"config":1488},{"src":1453,"dataGaName":1450,"dataGaLocation":1445},{"title":1490,"button":1491,"config":1495},"GitLab Orbit est arrivé : la couche de contexte pour les agents d'IA.",{"text":1006,"config":1492},{"href":1493,"dataGaName":1494,"dataGaLocation":1061},"/fr-fr/gitlab-orbit/","orbit",{"layout":1496,"disabled":1044},"release",{"data":1498},{"text":1499,"source":1500,"edit":1506,"contribute":1511,"config":1515,"items":1520,"minimal":1728},"Git est une marque déposée de Software Freedom Conservancy et notre utilisation de « GitLab » est sous licence.",{"text":1501,"config":1502},"Afficher le code source de la page",{"href":1503,"dataGaName":1504,"dataGaLocation":1505},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":1507,"config":1508},"Modifier cette page",{"href":1509,"dataGaName":1510,"dataGaLocation":1505},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":1292,"config":1512},{"href":1513,"dataGaName":1514,"dataGaLocation":1505},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":1516,"facebook":1517,"youtube":1518,"linkedin":1519},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[1521,1567,1620,1663,1695],{"title":1209,"links":1522,"subMenu":1537},[1523,1527,1532],{"text":1524,"config":1525},"Voir les forfaits",{"href":1211,"dataGaName":1526,"dataGaLocation":1505},"view plans",{"text":1528,"config":1529},"GitLab Premium",{"href":1530,"dataGaName":1531,"dataGaLocation":1505},"/fr-fr/pricing/premium/","why premium",{"text":1533,"config":1534},"GitLab Ultimate",{"href":1535,"dataGaName":1536,"dataGaLocation":1505},"/fr-fr/pricing/ultimate/","why ultimate",[1538],{"title":1383,"links":1539},[1540,1542,1544,1547,1552,1557,1562],{"text":1390,"config":1541},{"href":1392,"dataGaName":1071,"dataGaLocation":1505},{"text":1395,"config":1543},{"href":1397,"dataGaName":1398,"dataGaLocation":1505},{"text":1545,"config":1546},"Portail clients",{"href":1402,"dataGaName":1403,"dataGaLocation":1505},{"text":1548,"config":1549},"Statut",{"href":1550,"dataGaName":1551,"dataGaLocation":1505},"https://status.gitlab.com/","status",{"text":1553,"config":1554},"Conditions d'utilisation",{"href":1555,"dataGaName":1556,"dataGaLocation":1505},"/terms/","terms of use",{"text":1558,"config":1559},"Politique de confidentialité",{"href":1560,"dataGaName":1561,"dataGaLocation":1505},"/fr-fr/privacy/","privacy statement",{"text":1563,"config":1564},"Gestion des cookies",{"dataGaName":1565,"dataGaLocation":1505,"id":1566,"isOneTrustButton":1039},"cookie preferences","ot-sdk-btn",{"title":1107,"links":1568,"subMenu":1577},[1569,1573],{"text":1570,"config":1571},"Plateforme DevSecOps",{"href":1090,"dataGaName":1572,"dataGaLocation":1505},"devsecops platform",{"text":1574,"config":1575},"Développement assisté par l'IA",{"href":1097,"dataGaName":1576,"dataGaLocation":1505},"ai-assisted development",[1578],{"title":1579,"links":1580},"Thèmes",[1581,1585,1590,1595,1600,1605,1610,1615],{"text":1127,"config":1582},{"href":1583,"dataGaName":1584,"dataGaLocation":1505},"/fr-fr/topics/ci-cd/","cicd",{"text":1586,"config":1587},"GitOps",{"href":1588,"dataGaName":1589,"dataGaLocation":1505},"/fr-fr/topics/gitops/","gitops",{"text":1591,"config":1592},"DevOps",{"href":1593,"dataGaName":1594,"dataGaLocation":1505},"/fr-fr/topics/devops/","devops",{"text":1596,"config":1597},"Contrôle de version",{"href":1598,"dataGaName":1599,"dataGaLocation":1505},"/fr-fr/topics/version-control/","version control",{"text":1601,"config":1602},"DevSecOps",{"href":1603,"dataGaName":1604,"dataGaLocation":1505},"/fr-fr/topics/devsecops/","devsecops",{"text":1606,"config":1607},"Cloud-native",{"href":1608,"dataGaName":1609,"dataGaLocation":1505},"/fr-fr/topics/cloud-native/","cloud native",{"text":1611,"config":1612},"IA pour la programmation",{"href":1613,"dataGaName":1614,"dataGaLocation":1505},"/fr-fr/topics/devops/ai-for-coding/","ai for coding",{"text":1616,"config":1617},"IA agentique",{"href":1618,"dataGaName":1619,"dataGaLocation":1505},"/fr-fr/topics/agentic-ai/","agentic ai",{"title":1621,"links":1622},"Solutions",[1623,1626,1628,1633,1636,1639,1642,1645,1647,1650,1653,1658],{"text":1152,"config":1624},{"href":1147,"dataGaName":1625,"dataGaLocation":1505},"Application Security Testing",{"text":1139,"config":1627},{"href":1123,"dataGaName":1124,"dataGaLocation":1505},{"text":1629,"config":1630},"Développement Agile",{"href":1631,"dataGaName":1632,"dataGaLocation":1505},"/fr-fr/solutions/agile-delivery/","agile delivery",{"text":1134,"config":1634},{"href":1136,"dataGaName":1635,"dataGaLocation":1505},"source code management",{"text":1127,"config":1637},{"href":1129,"dataGaName":1638,"dataGaLocation":1505},"continuous integration & delivery",{"text":1178,"config":1640},{"href":1180,"dataGaName":1641,"dataGaLocation":1505},"value stream management",{"text":1586,"config":1643},{"href":1644,"dataGaName":1589,"dataGaLocation":1505},"/fr-fr/solutions/gitops/",{"text":1191,"config":1646},{"href":1194,"dataGaName":1195,"dataGaLocation":1505},{"text":1648,"config":1649},"PME",{"href":1200,"dataGaName":1201,"dataGaLocation":1505},{"text":1651,"config":1652},"Secteur public",{"href":1206,"dataGaName":1207,"dataGaLocation":1505},{"text":1654,"config":1655},"Éducation",{"href":1656,"dataGaName":1657,"dataGaLocation":1505},"/fr-fr/solutions/education/","education",{"text":1659,"config":1660},"Services financiers",{"href":1661,"dataGaName":1662,"dataGaLocation":1505},"/fr-fr/solutions/finance/","financial services",{"title":1214,"links":1664},[1665,1667,1669,1671,1674,1676,1679,1681,1683,1685,1687,1689,1691,1693],{"text":1227,"config":1666},{"href":1229,"dataGaName":1230,"dataGaLocation":1505},{"text":1232,"config":1668},{"href":1234,"dataGaName":1235,"dataGaLocation":1505},{"text":1237,"config":1670},{"href":1239,"dataGaName":1240,"dataGaLocation":1505},{"text":1242,"config":1672},{"href":1244,"dataGaName":1673,"dataGaLocation":1505},"docs",{"text":1265,"config":1675},{"href":1267,"dataGaName":1268,"dataGaLocation":1505},{"text":1677,"config":1678},"Nouveautés",{"href":1324,"dataGaName":1325,"dataGaLocation":1505},{"text":1260,"config":1680},{"href":1262,"dataGaName":1263,"dataGaLocation":1505},{"text":1279,"config":1682},{"href":1281,"dataGaName":1282,"dataGaLocation":1505},{"text":1287,"config":1684},{"href":1289,"dataGaName":1290,"dataGaLocation":1505},{"text":1292,"config":1686},{"href":1294,"dataGaName":1295,"dataGaLocation":1505},{"text":1297,"config":1688},{"href":1299,"dataGaName":1052,"dataGaLocation":1505},{"text":1301,"config":1690},{"href":1303,"dataGaName":1304,"dataGaLocation":1505},{"text":1306,"config":1692},{"href":1308,"dataGaName":1309,"dataGaLocation":1505},{"text":1311,"config":1694},{"href":1313,"dataGaName":1314,"dataGaLocation":1505},{"title":1327,"links":1696},[1697,1699,1701,1703,1705,1707,1712,1717,1719,1721,1723],{"text":1335,"config":1698},{"href":1337,"dataGaName":1329,"dataGaLocation":1505},{"text":1340,"config":1700},{"href":1342,"dataGaName":1343,"dataGaLocation":1505},{"text":1348,"config":1702},{"href":1350,"dataGaName":1351,"dataGaLocation":1505},{"text":1353,"config":1704},{"href":1355,"dataGaName":1356,"dataGaLocation":1505},{"text":1358,"config":1706},{"href":1360,"dataGaName":1361,"dataGaLocation":1505},{"text":1708,"config":1709},"Développement durable",{"href":1710,"dataGaName":1711,"dataGaLocation":1505},"/sustainability/","Sustainability",{"text":1713,"config":1714},"Diversité, inclusion et appartenance (DIB)",{"href":1715,"dataGaName":1716,"dataGaLocation":1505},"/fr-fr/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":1363,"config":1718},{"href":1365,"dataGaName":1366,"dataGaLocation":1505},{"text":1373,"config":1720},{"href":1375,"dataGaName":1376,"dataGaLocation":1505},{"text":1378,"config":1722},{"href":1380,"dataGaName":1381,"dataGaLocation":1505},{"text":1724,"config":1725},"Déclaration de transparence sur l'esclavage moderne",{"href":1726,"dataGaName":1727,"dataGaLocation":1505},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1729},[1730,1732,1734],{"text":1553,"config":1731},{"href":1555,"dataGaName":1556,"dataGaLocation":1505},{"text":1563,"config":1733},{"dataGaName":1565,"dataGaLocation":1505,"id":1566,"isOneTrustButton":1039},{"text":1558,"config":1735},{"href":1560,"dataGaName":1561,"dataGaLocation":1505},[1737],{"id":1738,"title":7,"body":1038,"config":1739,"content":1741,"description":1038,"extension":1745,"meta":1746,"navigation":1039,"path":1747,"seo":1748,"stem":1749,"__hash__":1750},"blogAuthors/en-us/blog/authors/justin-tobler.yml",{"template":1740},"BlogAuthor",{"name":7,"config":1742},{"headshot":1743,"ctfId":1744},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664737/Blog/Author%20Headshots/james_tobler_headshot.png","5pnOIbNI1Sc5IFnReNHNtv","yml",{},"/en-us/blog/authors/justin-tobler",{},"en-us/blog/authors/justin-tobler","fZs0fJVrV3MQT0RHzrMvziLDriL7K4hf9Db4QlPsRvA",[1752,1760,1767],{"title":1753,"description":1754,"heroImage":1755,"category":1034,"date":1756,"authors":1757,"slug":1759,"externalUrl":1038},"Nouveautés de Git 2.55.0","Découvrez les nouveautés de Git 2.55 : commande fixup de git-history(1), daemon fsmonitor pour Linux, push vers des groupes de dépôts distants et plus encore.","https://res.cloudinary.com/about-gitlab-com/image/upload/f_auto,q_auto,c_lfill/v1782732487/ztwgrvlolpifo01vj8qc.png","2026-07-01",[1758],"Toon Claes","whats-new-in-git-2-55-0",{"title":1761,"description":1762,"heroImage":1763,"category":1034,"date":1764,"authors":1765,"slug":1766,"externalUrl":1038},"Nouveautés de Git 2.54.0","Découvrez les contributions à cette release de Git 2.54.0, notamment la nouvelle maintenance des dépôts, une nouvelle commande pour modifier l'historique des commits, le remplacement de git-sizer(1) et plus encore.","https://res.cloudinary.com/about-gitlab-com/image/upload/f_auto,q_auto,c_lfill/v1776711651/sj7xxyyuimlarswbyft5.png","2026-04-27",[391],"whats-new-in-git-2-54-0",{"title":1768,"description":1769,"heroImage":1770,"category":1034,"date":1771,"authors":1772,"slug":1774,"externalUrl":1038},"GitLab AI Hackathon 2026 : découvrez les gagnants","Près de 7 000 développeurs ont créé plus de 600 agents et flows d'IA sur GitLab Duo Agent Platform. Découvrez les gagnants et leurs projets.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1776457632/llddiylsgwuze0u1rjks.png","2026-04-22",[1773],"Nick Veenhof","gitlab-ai-hackathon-2026-meet-the-winners",{"promotions":1776},[1777,1791,1803,1815],{"id":1778,"categories":1779,"header":1781,"text":1782,"button":1783,"image":1788},"ai-modernization",[1780],"ai","L'IA tient-elle ses promesses à grande échelle ?","Le questionnaire ne prendra pas plus de 5 minutes.",{"text":1784,"config":1785},"Obtenez votre score de maturité IA",{"href":1786,"dataGaName":1787,"dataGaLocation":1268},"/fr-fr/assessments/ai-modernization-assessment/","modernization assessment",{"config":1789},{"src":1790},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1792,"categories":1793,"header":1795,"text":1782,"button":1796,"image":1800},"devops-modernization",[1794,1604],"product","Vous contentez-vous de gérer des outils ou de livrer des innovations ?",{"text":1797,"config":1798},"Obtenez votre score de maturité DevOps",{"href":1799,"dataGaName":1787,"dataGaLocation":1268},"/fr-fr/assessments/devops-modernization-assessment/",{"config":1801},{"src":1802},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1804,"categories":1805,"header":1807,"text":1782,"button":1808,"image":1812},"security-modernization",[1806],"security","Faut-il sacrifier la rapidité pour garantir la sécurité ?",{"text":1809,"config":1810},"Obtenez votre score de maturité en matière de sécurité",{"href":1811,"dataGaName":1787,"dataGaLocation":1268},"/fr-fr/assessments/security-modernization-assessment/",{"config":1813},{"src":1814},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1816,"paths":1817,"header":1820,"text":1821,"button":1822,"image":1827},"github-azure-migration",[1818,1819],"migration-from-azure-devops-to-gitlab","integrating-azure-devops-scm-and-gitlab","Votre équipe est-elle prête pour la migration de GitHub vers Azure ?","GitHub a déjà commencé sa migration vers Azure. Découvrez ce que cela signifie pour vous.",{"text":1823,"config":1824},"Découvrez les différences entre GitLab et GitHub",{"href":1825,"dataGaName":1826,"dataGaLocation":1268},"/fr-fr/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1828},{"src":1802},{"header":1830,"blurb":1831,"button":1832,"secondaryButton":1836},"Commencez à développer plus rapidement dès aujourd'hui","Découvrez ce que votre équipe peut accomplir avec la plateforme d'orchestration intelligente pour le DevSecOps.\n",{"text":1063,"config":1833},{"href":1834,"dataGaName":1066,"dataGaLocation":1835},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/fr-fr/","feature",{"text":1390,"config":1837},{"href":1392,"dataGaName":1071,"dataGaLocation":1835},1786803764343]