[{"data":1,"prerenderedAt":2038},["ShallowReactive",2],{"/fr-fr/blog/what-s-new-in-git-2-51-0":3,"navigation-fr-fr":1255,"banner-fr-fr":1689,"footer-fr-fr":1697,"blog-post-authors-fr-fr-Karthik Nayak":1936,"blog-related-posts-fr-fr-what-s-new-in-git-2-51-0":1951,"blog-promotions-fr-fr":1975,"next-steps-fr-fr":2029},{"id":4,"title":5,"authors":6,"body":8,"category":1235,"date":1236,"description":1237,"extension":1238,"externalUrl":1239,"faq":1239,"featured":1240,"heroImage":1241,"meta":1242,"navigation":562,"path":1243,"seo":1244,"slug":1247,"stem":1248,"tags":1249,"template":1253,"updatedDate":1239,"__hash__":1254},"blogPosts/fr-fr/blog/what-s-new-in-git-2-51-0.md","Nouveautés de Git 2.51.0",[7],"Karthik Nayak",{"type":9,"value":10,"toc":1220},"minimark",[11,22,35,50,63,66,69,83,93,104,110,124,128,131,139,142,147,163,166,198,206,210,220,234,243,246,253,260,270,277,284,294,300,415,418,671,680,685,769,775,965,968,971,978,985,991,998,1012,1183,1188,1192,1200,1203,1216],[12,13,14,15,21],"p",{},"Le projet Git a récemment publié la version ",[16,17,20],"a",{"href":18,"rel":19},"https://lore.kernel.org/git/xmqqikikk1hr.fsf@gitster.g/T/#u",[],"Git 2.51",". En raison de l'été dans l'hémisphère nord et d'un développement plus lent, ce cycle de sortie de nouvelles versions a été plus court et a duré 8 semaines (au lieu des 12 semaines habituelles). Passons en revue certaines modifications notables de cette version, notamment les contributions de l'équipe Git de GitLab ainsi que de la communauté Git dans son ensemble.",[23,24,26,27,31,32],"h2",{"id":25},"optimisations-des-performances-pour-git-push1-et-git-fetch1","Optimisations des performances pour ",[28,29,30],"code",{},"git-push(1)"," et ",[28,33,34],{},"git-fetch(1)",[12,36,37,38,31,40,42,43,49],{},"Les commandes ",[28,39,30],{},[28,41,34],{}," permettent aux utilisateurs de synchroniser les dépôts locaux et distants. Une partie de ces commandes consiste à mettre à jour les références dans le dépôt, ce qui peut prendre un temps considérable dans les dépôts comportant de nombreuses références, en particulier pour les utilisateurs qui travaillent avec de grands environnements de développement, des monorepos ou des dépôts avec des ",[16,44,48],{"href":45,"rel":46,"title":47},"https://about.gitlab.com/fr-fr/topics/ci-cd/cicd-pipeline/",[],"Qu’est-ce qu’un pipeline CI/CD ?","pipelines CI/CD"," étendus.",[12,51,52,53,31,55,62],{},"Les transactions de références Git peuvent inclure plusieurs mises à jour de références, mais elles suivent une approche « tout ou rien ». Si une seule mise à jour dans la transaction échoue, la transaction entière échoue, et aucune des mises à jour de références n'est appliquée. Cependant, les mises à jour de références dans ",[28,54,30],{},[16,56,60],{"href":57,"rel":58,"title":59},"https://about.gitlab.com/fr-fr/blog/git-pull-vs-git-fetch-whats-the-difference/",[],"Git Pull et Git Fetch",[28,61,34],{}," sont autorisées à échouer, ce qui permet aux dépôts de synchroniser un sous-ensemble de références même si un sous-ensemble différent a divergé. Pour faciliter ce comportement, Git crée une transaction distincte pour chaque mise à jour de référence afin que certaines transactions réussissent même si d'autres échouent.",[12,64,65],{},"La création d'une transaction distincte par mise à jour entraîne une surcharge opérationnelle importante, car chaque transaction comprend une phase d'initialisation et de finalisation, et vérifie s'il existe des noms de références contradictoires. Le backend « reftable » effectue également un compactage automatique à la fin de chaque transaction. De multiples transactions peuvent ainsi déclencher plusieurs compactages automatiques, ce qui peut augmenter considérablement la latence de la commande.",[12,67,68],{},"Dans Git 2.51.0, ces commandes utilisent désormais des mises à jour par lots au lieu de transactions distinctes afin de mettre à jour plusieurs références dans une seule transaction, tout en autorisant certaines mises à jour à échouer. Cette approche élimine le surcoût lié aux initialisations, vérifications et finalisations répétées et supporte mieux la montée en charge du nombre de références à mettre à jour, puisqu'une seule transaction est utilisée. Les performances du backend « reftable » en sont considérablement améliorées, et ce dernier surpasse désormais le backend « files ». Ces améliorations de performances s'appliquent de manière transparente pour les utilisateurs.",[12,70,71,72,74,75,31,79,82],{},"Pour ",[28,73,34],{},", nous constatons ",[76,77,78],"em",{},"des performances 22x meilleures pour le backend « reftable »",[76,80,81],{},"1,25x meilleures pour le backend « files »"," lorsque cette commande est utilisée dans un dépôt avec 10 000 références.",[84,85,91],"pre",{"className":86,"code":88,"language":89,"meta":90},[87],"language-text","Benchmark 1: fetch: many refs (refformat = reftable, refcount = 10000, revision = master)\n  Time (mean ± σ):      3.403 s ±  0.775 s    [User: 1.875 s, System: 1.417 s]\n  Range (min … max):    2.454 s …  4.529 s    10 runs\n\nBenchmark 2: fetch: many refs (refformat = reftable, refcount = 10000, revision = HEAD)\n Time (mean ± σ):     154.3 ms ±  17.6 ms    [User: 102.5 ms, System: 56.1 ms]\n Range (min … max):   145.2 ms … 220.5 ms    18 runs\n\nSummary\n  fetch: many refs (refformat = reftable, refcount = 10000, revision = HEAD) ran\n   22.06 ± 5.62 times faster than fetch: many refs (refformat = reftable, refcount = 10000, revision = master)\n\nBenchmark 1: fetch: many refs (refformat = files, refcount = 10000, revision = master)\n  Time (mean ± σ):     605.5 ms ±   9.4 ms    [User: 117.8 ms, System: 483.3 ms]\n  Range (min … max):   595.6 ms … 621.5 ms    10 runs\n\nBenchmark 2: fetch: many refs (refformat = files, refcount = 10000, revision = HEAD)\n  Time (mean ± σ):     485.8 ms ±   4.3 ms    [User: 91.1 ms, System: 396.7 ms]\n  Range (min … max):   477.6 ms … 494.3 ms    10 runs\n\nSummary\n  fetch: many refs (refformat = files, refcount = 10000, revision = HEAD) ran\n   1.25 ± 0.02 times faster than fetch: many refs (refformat = files, refcount = 10000, revision = master)\n\n","text","",[28,92,88],{"__ignoreMap":90},[12,94,71,95,97,98,31,101,82],{},[28,96,30],{},", nous constatons des ",[76,99,100],{},"performances 18x meilleures pour le backend reftable",[76,102,103],{},"1,21x meilleures pour le backend « files »",[84,105,108],{"className":106,"code":107,"language":89,"meta":90},[87],"Benchmark 1: push: many refs (refformat = reftable, refcount = 10000, revision = master)\n  Time (mean ± σ):      4.276 s ±  0.078 s    [User: 0.796 s, System: 3.318 s]\n  Range (min … max):    4.185 s …  4.430 s    10 runs\n\nBenchmark 2: push: many refs (refformat = reftable, refcount = 10000, revision = HEAD)\n  Time (mean ± σ):     235.4 ms ±   6.9 ms    [User: 75.4 ms, System: 157.3 ms]\n  Range (min … max):   228.5 ms … 254.2 ms    11 runs\n\nSummary\n  push: many refs (refformat = reftable, refcount = 10000, revision = HEAD) ran\n   18.16 ± 0.63 times faster than push: many refs (refformat = reftable, refcount = 10000, revision = master)\n\nBenchmark 1: push: many refs (refformat = files, refcount = 10000, revision = master)\n  Time (mean ± σ):      1.121 s ±  0.021 s    [User: 0.128 s, System: 0.975 s]\n  Range (min … max):    1.097 s …  1.156 s    10 runs\n\nBenchmark 2: push: many refs (refformat = files, refcount = 10000, revision = HEAD)\n  Time (mean ± σ):     927.9 ms ±  22.6 ms    [User: 99.0 ms, System: 815.2 ms]\n  Range (min … max):   903.1 ms … 978.0 ms    10 runs\n\nSummary\n  push: many refs (refformat = files, refcount = 10000, revision = HEAD) ran\n    1.21 ± 0.04 times faster than push: many refs (refformat = files, refcount = 10000, revision = master)\n\n",[28,109,107],{"__ignoreMap":90},[12,111,112,113,118,119,123],{},"Ce ",[16,114,117],{"href":115,"rel":116},"https://lore.kernel.org/git/20250514-501-update-git-fetch-1-to-use-partial-transactions-v1-0-7c65f46493d4@gmail.com/",[],"projet"," a été mené par ",[16,120,7],{"href":121,"rel":122},"https://gitlab.com/knayakgl",[],".",[23,125,127],{"id":126},"en-route-vers-la-version-git-30","En route vers la version Git 3.0",[12,129,130],{},"La dernière version majeure de Git, la version 2.0, a été publiée il y a onze ans déjà. Bien que nous n'ayons pas de calendrier spécifique pour la prochaine version majeure de Git, la version 2.51.0 inclut déjà des décisions concernant Git 3.0.",[12,132,133,134,123],{},"La planification de la version Git 3.0 nous permet de prévoir et d'implémenter des changements rendant cette version incompatible avec les précédentes et de les communiquer à la communauté Git. En plus de la documentation, Git peut également être compilé avec ces changements incompatibles à des fins de test. Pour en savoir plus, consultez le ",[16,135,138],{"href":136,"rel":137},"https://gitlab.com/gitlab-org/git/-/blob/master/Documentation/BreakingChanges.adoc",[],"document BreakingChanges",[12,140,141],{},"La version Git 2.51.0 apporte des changements importants en préparation de Git 3.0.",[143,144,146],"h3",{"id":145},"reftable-comme-backend-de-références-par-défaut","Reftable comme backend de références par défaut",[12,148,149,150,155,156,162],{},"Dans la version ",[16,151,154],{"href":152,"rel":153},"https://about.gitlab.com/fr-fr/blog/whats-new-in-git-2-45-0/",[],"Git 2.45.0",", le format « reftable » a été introduit comme nouveau backend pour stocker les références comme les branches ou les tags dans Git, afin de corriger de nombreux problèmes avec le backend « files » existant. Consultez notre ",[16,157,161],{"href":158,"rel":159,"title":160},"https://about.gitlab.com/fr-fr/blog/a-beginners-guide-to-the-git-reftable-format/",[],"Format reftable","guide du débutant sur le fonctionnement du format reftable"," pour obtenir plus d'informations sur le backend « reftable ».",[12,164,165],{},"La version Git 2.51.0 marque le passage à l'utilisation du format « reftable » par défaut dans Git 3.0 pour les dépôts nouvellement créés et configure également le changement d'un feature flag. Le format « reftable » offre les améliorations suivantes par rapport au backend « files » traditionnel :",[167,168,169,173,176,179,182,192,195],"ul",{},[170,171,172],"li",{},"Il est impossible de stocker deux références avec pour seule différence la casse sur des systèmes de fichiers qui ne tiennent pas compte de la casse avec le format « files ». Ce problème est courant sur les systèmes Windows et macOS. Étant donné que le backend « reftable » n'utilise pas de chemins de système de fichiers pour encoder les noms de références, ce problème n'a plus lieu d'être.",[170,174,175],{},"De même, macOS normalise les noms de chemins qui contiennent des caractères unicode. Vous ne pouvez donc pas stocker deux noms avec des caractères unicode qui sont encodés différemment avec le backend « files », mais ce n'est pas un problème avec le backend « reftable ».",[170,177,178],{},"La suppression de références avec le backend « files » nécessite que Git réécrive le fichier complet « packed-refs ». Dans les grands dépôts avec de nombreuses références, ce fichier peut facilement faire des dizaines de mégaoctets, voire des gigaoctets. Le backend « reftable » utilise des marqueurs « tombstone » pour les références supprimées et n'a donc pas à réécrire toutes ses données.",[170,180,181],{},"La maintenance du dépôt avec le backend « files » effectue généralement des repacks tout-en-un des références. Cette approche peut être assez coûteuse, et par conséquent, la maintenance est un compromis entre le nombre de références seules par fichier qui s'accumulent et ralentissent les opérations qui lisent les références, et la compression de ces références non compactées en un seul fichier « packed-refs ». Le backend « reftable » utilise le compactage géométrique après chaque écriture, ce qui amortit les coûts et garantit que le backend est toujours bien entretenu.",[170,183,184,185,191],{},"Les opérations qui écrivent plusieurs références à la fois ne sont pas atomiques avec le backend « files ». Par conséquent, ",[16,186,190],{"href":187,"rel":188,"title":189},"https://about.gitlab.com/fr-fr/blog/what-is-git/",[],"Qu'est-ce que Git ?","Git"," peut voir des états intermédiaires lorsqu'il lit des références pendant qu'une transaction de référence est en cours de validation sur le disque.",[170,193,194],{},"L'écriture de nombreuses références à la fois est un processus lent avec le backend « files », car chaque référence est créée en tant que fichier séparé. Le backend « reftable » fournit des résultats considérablement meilleurs par rapport au backend « files ».",[170,196,197],{},"Le backend « reftable » utilise un format binaire avec compression de préfixe pour les noms de références. En conséquence, le format utilise moins d'espace par rapport au fichier « packed-refs ».",[12,199,200,201,123],{},"Ce projet a été mené par ",[16,202,205],{"href":203,"rel":204},"https://gitlab.com/pks-gitlab",[],"Patrick Steinhardt",[143,207,209],{"id":208},"sha-256-comme-fonction-de-hachage-par-défaut","SHA-256 comme fonction de hachage par défaut",[12,211,212,213,219],{},"Le système de ",[16,214,218],{"href":215,"rel":216,"title":217},"https://about.gitlab.com/fr-fr/topics/version-control/",[],"Qu'est-ce que le contrôle de version ?","contrôle de version"," Git stocke les objets dans un système de fichiers adressable par contenu. Cela signifie qu'il utilise le hachage d'un objet pour adresser le contenu tel que les fichiers, les répertoires et les révisions, contrairement aux systèmes de fichiers traditionnels, qui utilisent des nombres séquentiels. L'utilisation d'une fonction de hachage présente les avantages suivants :",[167,221,222,225,228,231],{},[170,223,224],{},"Vérifications faciles de l'intégrité, car un seul bit inversé modifierait complètement le résultat du hachage.",[170,226,227],{},"Recherche d'objets rapide, car ces derniers peuvent être indexés par leur hachage.",[170,229,230],{},"Les noms d'objets peuvent être signés, et des tiers peuvent faire confiance au hachage pour adresser l'objet signé et tous les objets qu'il référence.",[170,232,233],{},"La communication via le protocole Git et les méthodes de communication hors bande disposent d'une chaîne de caractères courte et fiable qui peut être utilisée pour adresser de manière fiable le contenu stocké.",[12,235,236,237,242],{},"Depuis sa création, Git a utilisé l'algorithme de hachage SHA-1. Cependant, des chercheurs en sécurité ont découvert quelques failles dans cet algorithme, en particulier l'",[16,238,241],{"href":239,"rel":240},"https://shattered.io",[],"attaque SHAttered",", qui montre une collision de hachage SHA-1 réalisable en pratique. Nous sommes passés à l'utilisation d'une implémentation SHA-1 renforcée par défaut depuis Git 2.13.0. Cependant, SHA-1 reste un algorithme de hachage faible, et ce n'est qu'une question de temps avant que des attaques supplémentaires ne diminuent encore davantage sa sécurité.",[12,244,245],{},"SHA-256 a été identifié comme le successeur de SHA-1 fin 2018. Git 2.51.0 le marque comme l'algorithme de hachage par défaut à utiliser dans Git 3.0.",[12,247,200,248,123],{},[16,249,252],{"href":250,"rel":251},"https://github.com/bk2204",[],"brian m. carlson",[143,254,256,257],{"id":255},"suppression-de-git-whatchanged1","Suppression de ",[28,258,259],{},"git-whatchanged(1)",[12,261,262,263,265,266,269],{},"La commande ",[28,264,259],{}," montre les logs avec les différences que chaque commit introduit. Bien que cette commande soit maintenant remplacée par ",[28,267,268],{},"git log --raw",", elle a été conservée pour des raisons historiques.",[12,271,272,273,276],{},"Git 2.51.0 oblige les utilisateurs de la commande à utiliser explicitement le flag ",[28,274,275],{},"--i-still-use-this"," pour identifier tous les utilisateurs qui utilisent encore cette commande dépréciée, et marque également la commande pour suppression dans Git 3.0.",[12,278,200,279,123],{},[16,280,283],{"href":281,"rel":282},"https://simple.wikipedia.org/wiki/Junio_Hamano",[],"Junio C Hamano",[23,285,287,31,290,293],{"id":286},"git-switch-et-git-restore-ne-sont-plus-en-phase-expérimentale",[28,288,289],{},"git switch",[28,291,292],{},"git restore"," ne sont plus en phase expérimentale",[12,295,262,296,299],{},[28,297,298],{},"git-checkout(1)"," peut être utilisée dans plusieurs cas d'utilisation différents. Elle peut être utilisée pour changer la référence courante :",[84,301,305],{"className":302,"code":303,"language":304,"meta":90,"style":90},"language-shell shiki shiki-themes github-light","$ git status On branch master Your branch is up to date with 'origin/master'.\nnothing to commit, working tree clean\n$ git checkout next Switched to branch 'next' Your branch is up to date with 'origin/next'.\n","shell",[28,306,307,355,375],{"__ignoreMap":90},[308,309,312,316,320,323,326,329,332,335,337,340,343,346,349,352],"span",{"class":310,"line":311},"line",1,[308,313,315],{"class":314},"s7eDp","$",[308,317,319],{"class":318},"sYBdl"," git",[308,321,322],{"class":318}," status",[308,324,325],{"class":318}," On",[308,327,328],{"class":318}," branch",[308,330,331],{"class":318}," master",[308,333,334],{"class":318}," Your",[308,336,328],{"class":318},[308,338,339],{"class":318}," is",[308,341,342],{"class":318}," up",[308,344,345],{"class":318}," to",[308,347,348],{"class":318}," date",[308,350,351],{"class":318}," with",[308,353,354],{"class":318}," 'origin/master'.\n",[308,356,358,361,363,366,369,372],{"class":310,"line":357},2,[308,359,360],{"class":314},"nothing",[308,362,345],{"class":318},[308,364,365],{"class":318}," commit,",[308,367,368],{"class":318}," working",[308,370,371],{"class":318}," tree",[308,373,374],{"class":318}," clean\n",[308,376,378,380,382,385,388,391,393,395,398,400,402,404,406,408,410,412],{"class":310,"line":377},3,[308,379,315],{"class":314},[308,381,319],{"class":318},[308,383,384],{"class":318}," checkout",[308,386,387],{"class":318}," next",[308,389,390],{"class":318}," Switched",[308,392,345],{"class":318},[308,394,328],{"class":318},[308,396,397],{"class":318}," 'next'",[308,399,334],{"class":318},[308,401,328],{"class":318},[308,403,339],{"class":318},[308,405,342],{"class":318},[308,407,345],{"class":318},[308,409,348],{"class":318},[308,411,351],{"class":318},[308,413,414],{"class":318}," 'origin/next'.\n",[12,416,417],{},"Ou pour restaurer des fichiers :",[84,419,421],{"className":302,"code":420,"language":304,"meta":90,"style":90},"$ echo \"additional line\" >> git.c\n$ git status On branch master Your branch is up to date with 'origin/master'.\nChanges not staged for commit:\n  (use \"git add \u003Cfile>...\" to update what will be committed)\n  (use \"git restore \u003Cfile>...\" to discard changes in working directory)\n    modified:   git.c\n\nno changes added to commit (use \"git add\" and/or \"git commit -a\")\n$ git checkout git.c Updated 1 path from the index\n$ git status On branch master Your branch is up to date with 'origin/master'.\nnothing to commit, working tree clean\n",[28,422,423,440,470,487,520,548,557,564,594,625,656],{"__ignoreMap":90},[308,424,425,427,430,433,437],{"class":310,"line":311},[308,426,315],{"class":314},[308,428,429],{"class":318}," echo",[308,431,432],{"class":318}," \"additional line\"",[308,434,436],{"class":435},"sD7c4"," >>",[308,438,439],{"class":318}," git.c\n",[308,441,442,444,446,448,450,452,454,456,458,460,462,464,466,468],{"class":310,"line":357},[308,443,315],{"class":314},[308,445,319],{"class":318},[308,447,322],{"class":318},[308,449,325],{"class":318},[308,451,328],{"class":318},[308,453,331],{"class":318},[308,455,334],{"class":318},[308,457,328],{"class":318},[308,459,339],{"class":318},[308,461,342],{"class":318},[308,463,345],{"class":318},[308,465,348],{"class":318},[308,467,351],{"class":318},[308,469,354],{"class":318},[308,471,472,475,478,481,484],{"class":310,"line":377},[308,473,474],{"class":314},"Changes",[308,476,477],{"class":318}," not",[308,479,480],{"class":318}," staged",[308,482,483],{"class":318}," for",[308,485,486],{"class":318}," commit:\n",[308,488,490,494,497,500,502,505,508,511,514,517],{"class":310,"line":489},4,[308,491,493],{"class":492},"sgsFI","  (",[308,495,496],{"class":314},"use",[308,498,499],{"class":318}," \"git add \u003Cfile>...\"",[308,501,345],{"class":318},[308,503,504],{"class":318}," update",[308,506,507],{"class":318}," what",[308,509,510],{"class":318}," will",[308,512,513],{"class":318}," be",[308,515,516],{"class":318}," committed",[308,518,519],{"class":492},")\n",[308,521,523,525,527,530,532,535,538,541,543,546],{"class":310,"line":522},5,[308,524,493],{"class":492},[308,526,496],{"class":314},[308,528,529],{"class":318}," \"git restore \u003Cfile>...\"",[308,531,345],{"class":318},[308,533,534],{"class":318}," discard",[308,536,537],{"class":318}," changes",[308,539,540],{"class":318}," in",[308,542,368],{"class":318},[308,544,545],{"class":318}," directory",[308,547,519],{"class":492},[308,549,551,554],{"class":310,"line":550},6,[308,552,553],{"class":314},"    modified:",[308,555,556],{"class":318},"   git.c\n",[308,558,560],{"class":310,"line":559},7,[308,561,563],{"emptyLinePlaceholder":562},true,"\n",[308,565,567,570,572,575,577,580,583,586,589,592],{"class":310,"line":566},8,[308,568,569],{"class":314},"no",[308,571,537],{"class":318},[308,573,574],{"class":318}," added",[308,576,345],{"class":318},[308,578,579],{"class":318}," commit",[308,581,582],{"class":492}," (use ",[308,584,585],{"class":318},"\"git add\"",[308,587,588],{"class":318}," and/or",[308,590,591],{"class":318}," \"git commit -a\"",[308,593,519],{"class":492},[308,595,597,599,601,603,606,609,613,616,619,622],{"class":310,"line":596},9,[308,598,315],{"class":314},[308,600,319],{"class":318},[308,602,384],{"class":318},[308,604,605],{"class":318}," git.c",[308,607,608],{"class":318}," Updated",[308,610,612],{"class":611},"sYu0t"," 1",[308,614,615],{"class":318}," path",[308,617,618],{"class":318}," from",[308,620,621],{"class":318}," the",[308,623,624],{"class":318}," index\n",[308,626,628,630,632,634,636,638,640,642,644,646,648,650,652,654],{"class":310,"line":627},10,[308,629,315],{"class":314},[308,631,319],{"class":318},[308,633,322],{"class":318},[308,635,325],{"class":318},[308,637,328],{"class":318},[308,639,331],{"class":318},[308,641,334],{"class":318},[308,643,328],{"class":318},[308,645,339],{"class":318},[308,647,342],{"class":318},[308,649,345],{"class":318},[308,651,348],{"class":318},[308,653,351],{"class":318},[308,655,354],{"class":318},[308,657,659,661,663,665,667,669],{"class":310,"line":658},11,[308,660,360],{"class":314},[308,662,345],{"class":318},[308,664,365],{"class":318},[308,666,368],{"class":318},[308,668,371],{"class":318},[308,670,374],{"class":318},[12,672,673,674,31,677,123],{},"Pour les nouveaux utilisateurs de Git, ces différentes possibilités peuvent être source de confusion. Dans Git 2.33.0, elles ont été divisées en deux nouvelles commandes, ",[28,675,676],{},"git-switch(1)",[28,678,679],{},"git-restore(1)",[12,681,262,682,684],{},[28,683,676],{}," permet aux utilisateurs de basculer vers une branche spécifique :",[84,686,688],{"className":302,"code":687,"language":304,"meta":90,"style":90},"$ git status On branch master Your branch is up to date with 'origin/master'.\nnothing to commit, working tree clean\n$ git switch next Switched to branch 'next' Your branch is up to date with 'origin/next'.\n",[28,689,690,720,734],{"__ignoreMap":90},[308,691,692,694,696,698,700,702,704,706,708,710,712,714,716,718],{"class":310,"line":311},[308,693,315],{"class":314},[308,695,319],{"class":318},[308,697,322],{"class":318},[308,699,325],{"class":318},[308,701,328],{"class":318},[308,703,331],{"class":318},[308,705,334],{"class":318},[308,707,328],{"class":318},[308,709,339],{"class":318},[308,711,342],{"class":318},[308,713,345],{"class":318},[308,715,348],{"class":318},[308,717,351],{"class":318},[308,719,354],{"class":318},[308,721,722,724,726,728,730,732],{"class":310,"line":357},[308,723,360],{"class":314},[308,725,345],{"class":318},[308,727,365],{"class":318},[308,729,368],{"class":318},[308,731,371],{"class":318},[308,733,374],{"class":318},[308,735,736,738,740,743,745,747,749,751,753,755,757,759,761,763,765,767],{"class":310,"line":377},[308,737,315],{"class":314},[308,739,319],{"class":318},[308,741,742],{"class":318}," switch",[308,744,387],{"class":318},[308,746,390],{"class":318},[308,748,345],{"class":318},[308,750,328],{"class":318},[308,752,397],{"class":318},[308,754,334],{"class":318},[308,756,328],{"class":318},[308,758,339],{"class":318},[308,760,342],{"class":318},[308,762,345],{"class":318},[308,764,348],{"class":318},[308,766,351],{"class":318},[308,768,414],{"class":318},[12,770,771,772,774],{},"Et la commande ",[28,773,679],{}," permet aux utilisateurs de restaurer les fichiers de l'arbre de travail :",[84,776,778],{"className":302,"code":777,"language":304,"meta":90,"style":90},"$ echo \"additional line\" >> git.c\n$ git status On branch master Your branch is up to date with 'origin/master'.\nChanges not staged for commit:\n  (use \"git add \u003Cfile>...\" to update what will be committed)\n  (use \"git restore \u003Cfile>...\" to discard changes in working directory)\n    modified:   git.c\n\nno changes added to commit (use \"git add\" and/or \"git commit -a\")\n$ git restore git.c\n$ git status On branch master Your branch is up to date with 'origin/master'.\nnothing to commit, working tree clean\n",[28,779,780,792,822,834,856,878,884,888,910,921,951],{"__ignoreMap":90},[308,781,782,784,786,788,790],{"class":310,"line":311},[308,783,315],{"class":314},[308,785,429],{"class":318},[308,787,432],{"class":318},[308,789,436],{"class":435},[308,791,439],{"class":318},[308,793,794,796,798,800,802,804,806,808,810,812,814,816,818,820],{"class":310,"line":357},[308,795,315],{"class":314},[308,797,319],{"class":318},[308,799,322],{"class":318},[308,801,325],{"class":318},[308,803,328],{"class":318},[308,805,331],{"class":318},[308,807,334],{"class":318},[308,809,328],{"class":318},[308,811,339],{"class":318},[308,813,342],{"class":318},[308,815,345],{"class":318},[308,817,348],{"class":318},[308,819,351],{"class":318},[308,821,354],{"class":318},[308,823,824,826,828,830,832],{"class":310,"line":377},[308,825,474],{"class":314},[308,827,477],{"class":318},[308,829,480],{"class":318},[308,831,483],{"class":318},[308,833,486],{"class":318},[308,835,836,838,840,842,844,846,848,850,852,854],{"class":310,"line":489},[308,837,493],{"class":492},[308,839,496],{"class":314},[308,841,499],{"class":318},[308,843,345],{"class":318},[308,845,504],{"class":318},[308,847,507],{"class":318},[308,849,510],{"class":318},[308,851,513],{"class":318},[308,853,516],{"class":318},[308,855,519],{"class":492},[308,857,858,860,862,864,866,868,870,872,874,876],{"class":310,"line":522},[308,859,493],{"class":492},[308,861,496],{"class":314},[308,863,529],{"class":318},[308,865,345],{"class":318},[308,867,534],{"class":318},[308,869,537],{"class":318},[308,871,540],{"class":318},[308,873,368],{"class":318},[308,875,545],{"class":318},[308,877,519],{"class":492},[308,879,880,882],{"class":310,"line":550},[308,881,553],{"class":314},[308,883,556],{"class":318},[308,885,886],{"class":310,"line":559},[308,887,563],{"emptyLinePlaceholder":562},[308,889,890,892,894,896,898,900,902,904,906,908],{"class":310,"line":566},[308,891,569],{"class":314},[308,893,537],{"class":318},[308,895,574],{"class":318},[308,897,345],{"class":318},[308,899,579],{"class":318},[308,901,582],{"class":492},[308,903,585],{"class":318},[308,905,588],{"class":318},[308,907,591],{"class":318},[308,909,519],{"class":492},[308,911,912,914,916,919],{"class":310,"line":596},[308,913,315],{"class":314},[308,915,319],{"class":318},[308,917,918],{"class":318}," restore",[308,920,439],{"class":318},[308,922,923,925,927,929,931,933,935,937,939,941,943,945,947,949],{"class":310,"line":627},[308,924,315],{"class":314},[308,926,319],{"class":318},[308,928,322],{"class":318},[308,930,325],{"class":318},[308,932,328],{"class":318},[308,934,331],{"class":318},[308,936,334],{"class":318},[308,938,328],{"class":318},[308,940,339],{"class":318},[308,942,342],{"class":318},[308,944,345],{"class":318},[308,946,348],{"class":318},[308,948,351],{"class":318},[308,950,354],{"class":318},[308,952,953,955,957,959,961,963],{"class":310,"line":658},[308,954,360],{"class":314},[308,956,345],{"class":318},[308,958,365],{"class":318},[308,960,368],{"class":318},[308,962,371],{"class":318},[308,964,374],{"class":318},[12,966,967],{},"Ces deux commandes existent depuis 2019, mais étaient en phase expérimentale. Ce qui signifie que le projet Git ne garantissait pas la compatibilité avec les versions précédentes pour ces commandes, et le comportement pouvait changer à tout moment. L'objectif était initialement de stabiliser ces commandes après quelques nouvelles versions, mais cela n'a pas été le cas jusqu'à présent.",[12,969,970],{},"Cela a entraîné plusieurs discussions sur la liste de diffusion Git, où les utilisateurs se demandaient s'ils pouvaient commencer à utiliser ces nouvelles commandes, ou si celles-ci pourraient éventuellement disparaître à nouveau. Mais étant donné qu'aucun changement significatif n'a été proposé, et que certains utilisateurs utilisent déjà ces commandes, nous avons décidé de les retirer de leur phase expérimentale dans la version Git 2.51.",[12,972,200,973,123],{},[16,974,977],{"href":975,"rel":976},"https://gitlab.com/justintobler",[],"Justin Tobler",[23,979,981,982],{"id":980},"prise-en-charge-de-la-pagination-pour-git-for-each-ref1","Prise en charge de la pagination pour ",[28,983,984],{},"git for-each-ref(1)",[12,986,262,987,990],{},[28,988,989],{},"git for-each-ref"," est utilisée pour indiquer toutes les références présentes dans un dépôt. Comme elle fait partie de la couche de plomberie de Git, cette commande est fréquemment utilisée par les forges logicielles d'hébergement pour lister sur leur interface utilisateur les références qui existent dans le dépôt. Mais à mesure que les dépôts grandissent, il n'est pas réaliste de lister toutes les références à la fois, car les plus grands dépôts peuvent en contenir des millions ! À la place, les forges ont tendance à paginer les références.",[12,992,993,994,997],{},"Une lacune importante émerge ainsi : ",[28,995,996],{},"git-for-each-ref"," ne sait pas ignorer les références des pages précédentes qui ont déjà été affichées. Par conséquent, cette commande peut devoir lister un grand nombre de références sans intérêt avant de commencer à indiquer les références requises pour la page actuelle. Ce processus est peu efficace et conduit à une latence plus élevée que nécessaire ou même à des délais d'attente dépassés.",[12,999,1000,1001,1004,1005,1007,1008,1011],{},"Git 2.51.0 prend en charge une nouvelle option ",[28,1002,1003],{},"--start-after"," pour ",[28,1006,989],{},", qui permet de paginer les données de sortie. Il est aussi possible de la combiner avec l'option ",[28,1009,1010],{},"--count"," pour itérer sur un lot de références.",[84,1013,1015],{"className":302,"code":1014,"language":304,"meta":90,"style":90},"$ git for-each-ref --count=10 9751243fba48b34d29aabfc9784803617a806e81 commit    refs/heads/branch-001 9751243fba48b34d29aabfc9784803617a806e81 commit    refs/heads/branch-002 9751243fba48b34d29aabfc9784803617a806e81 commit    refs/heads/branch-003 9751243fba48b34d29aabfc9784803617a806e81 commit    refs/heads/branch-004 9751243fba48b34d29aabfc9784803617a806e81 commit    refs/heads/branch-005 9751243fba48b34d29aabfc9784803617a806e81 commit    refs/heads/branch-006 9751243fba48b34d29aabfc9784803617a806e81 commit    refs/heads/branch-007 9751243fba48b34d29aabfc9784803617a806e81 commit    refs/heads/branch-008 9751243fba48b34d29aabfc9784803617a806e81 commit    refs/heads/branch-009 9751243fba48b34d29aabfc9784803617a806e81 commit    refs/heads/branch-010\n$ git for-each-ref --count=10 --start-after=refs/heads/branch-010 9751243fba48b34d29aabfc9784803617a806e81 commit    refs/heads/branch-011 9751243fba48b34d29aabfc9784803617a806e81 commit    refs/heads/branch-012 9751243fba48b34d29aabfc9784803617a806e81 commit    refs/heads/branch-013 9751243fba48b34d29aabfc9784803617a806e81 commit    refs/heads/branch-014 9751243fba48b34d29aabfc9784803617a806e81 commit    refs/heads/branch-015 9751243fba48b34d29aabfc9784803617a806e81 commit    refs/heads/branch-016 9751243fba48b34d29aabfc9784803617a806e81 commit    refs/heads/branch-017 9751243fba48b34d29aabfc9784803617a806e81 commit    refs/heads/branch-018 9751243fba48b34d29aabfc9784803617a806e81 commit    refs/heads/branch-019 9751243fba48b34d29aabfc9784803617a806e81 commit    refs/heads/branch-020\n",[28,1016,1017,1100],{"__ignoreMap":90},[308,1018,1019,1021,1023,1026,1029,1032,1034,1037,1039,1041,1044,1046,1048,1051,1053,1055,1058,1060,1062,1065,1067,1069,1072,1074,1076,1079,1081,1083,1086,1088,1090,1093,1095,1097],{"class":310,"line":311},[308,1020,315],{"class":314},[308,1022,319],{"class":318},[308,1024,1025],{"class":318}," for-each-ref",[308,1027,1028],{"class":611}," --count=10",[308,1030,1031],{"class":318}," 9751243fba48b34d29aabfc9784803617a806e81",[308,1033,579],{"class":318},[308,1035,1036],{"class":318},"    refs/heads/branch-001",[308,1038,1031],{"class":318},[308,1040,579],{"class":318},[308,1042,1043],{"class":318},"    refs/heads/branch-002",[308,1045,1031],{"class":318},[308,1047,579],{"class":318},[308,1049,1050],{"class":318},"    refs/heads/branch-003",[308,1052,1031],{"class":318},[308,1054,579],{"class":318},[308,1056,1057],{"class":318},"    refs/heads/branch-004",[308,1059,1031],{"class":318},[308,1061,579],{"class":318},[308,1063,1064],{"class":318},"    refs/heads/branch-005",[308,1066,1031],{"class":318},[308,1068,579],{"class":318},[308,1070,1071],{"class":318},"    refs/heads/branch-006",[308,1073,1031],{"class":318},[308,1075,579],{"class":318},[308,1077,1078],{"class":318},"    refs/heads/branch-007",[308,1080,1031],{"class":318},[308,1082,579],{"class":318},[308,1084,1085],{"class":318},"    refs/heads/branch-008",[308,1087,1031],{"class":318},[308,1089,579],{"class":318},[308,1091,1092],{"class":318},"    refs/heads/branch-009",[308,1094,1031],{"class":318},[308,1096,579],{"class":318},[308,1098,1099],{"class":318},"    refs/heads/branch-010\n",[308,1101,1102,1104,1106,1108,1110,1113,1115,1117,1120,1122,1124,1127,1129,1131,1134,1136,1138,1141,1143,1145,1148,1150,1152,1155,1157,1159,1162,1164,1166,1169,1171,1173,1176,1178,1180],{"class":310,"line":357},[308,1103,315],{"class":314},[308,1105,319],{"class":318},[308,1107,1025],{"class":318},[308,1109,1028],{"class":611},[308,1111,1112],{"class":611}," --start-after=refs/heads/branch-010",[308,1114,1031],{"class":318},[308,1116,579],{"class":318},[308,1118,1119],{"class":318},"    refs/heads/branch-011",[308,1121,1031],{"class":318},[308,1123,579],{"class":318},[308,1125,1126],{"class":318},"    refs/heads/branch-012",[308,1128,1031],{"class":318},[308,1130,579],{"class":318},[308,1132,1133],{"class":318},"    refs/heads/branch-013",[308,1135,1031],{"class":318},[308,1137,579],{"class":318},[308,1139,1140],{"class":318},"    refs/heads/branch-014",[308,1142,1031],{"class":318},[308,1144,579],{"class":318},[308,1146,1147],{"class":318},"    refs/heads/branch-015",[308,1149,1031],{"class":318},[308,1151,579],{"class":318},[308,1153,1154],{"class":318},"    refs/heads/branch-016",[308,1156,1031],{"class":318},[308,1158,579],{"class":318},[308,1160,1161],{"class":318},"    refs/heads/branch-017",[308,1163,1031],{"class":318},[308,1165,579],{"class":318},[308,1167,1168],{"class":318},"    refs/heads/branch-018",[308,1170,1031],{"class":318},[308,1172,579],{"class":318},[308,1174,1175],{"class":318},"    refs/heads/branch-019",[308,1177,1031],{"class":318},[308,1179,579],{"class":318},[308,1181,1182],{"class":318},"    refs/heads/branch-020\n",[12,1184,200,1185,123],{},[16,1186,7],{"href":121,"rel":1187},[],[23,1189,1191],{"id":1190},"perspectives","Perspectives",[12,1193,1194,1195,31,1197,1199],{},"Prêt à découvrir ces améliorations ? Mettez à jour votre version Git et commencez à utiliser ",[28,1196,289],{},[28,1198,292],{}," dans vos workflows quotidiens.",[12,1201,1202],{},"Pour les utilisateurs de GitLab, ces améliorations de performances enrichiront automatiquement l'expérience de développement une fois la version de Git mise à jour.",[12,1204,1205,1206,1210,1211,123],{},"Pour en savoir plus, consultez les ",[16,1207,1209],{"href":18,"rel":1208},[],"notes de version officielles de Git 2.51.0"," et explorez notre ",[16,1212,1215],{"href":1213,"rel":1214},"https://about.gitlab.com/fr-fr/blog/tags/git/",[],"archive complète de le développement de Git",[1217,1218,1219],"style",{},"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 .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}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}",{"title":90,"searchDepth":357,"depth":357,"links":1221},[1222,1224,1230,1232,1234],{"id":25,"depth":357,"text":1223},"Optimisations des performances pour git-push(1) et git-fetch(1)",{"id":126,"depth":357,"text":127,"children":1225},[1226,1227,1228],{"id":145,"depth":377,"text":146},{"id":208,"depth":377,"text":209},{"id":255,"depth":377,"text":1229},"Suppression de git-whatchanged(1)",{"id":286,"depth":357,"text":1231},"git switch et git restore ne sont plus en phase expérimentale",{"id":980,"depth":357,"text":1233},"Prise en charge de la pagination pour git for-each-ref(1)",{"id":1190,"depth":357,"text":1191},"open-source","2025-08-25","Découvrez les dernières contributions de l'équipe Git de GitLab et de la communauté Git, notamment les optimisations de performances pour git-push(1) et git-fetch(1).","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/f_auto,q_auto,c_lfill/v1749663087/Blog/Hero%20Images/git3-cover.png",{},"/fr-fr/blog/what-s-new-in-git-2-51-0",{"config":1245,"title":5,"ogTitle":5,"description":1246,"ogDescription":1246,"ogImage":1241},{"noIndex":1240},"Découvrez les dernières contributions de l'équipe Git de GitLab et de la communauté Git pour la version Git 2.51.0.","what-s-new-in-git-2-51-0","fr-fr/blog/what-s-new-in-git-2-51-0",[1250,1251,1252],"git","open source","community","BlogPost","YPSCzFnq5G0xH2MprzepfTeCUQodPwZW_2Mv4XKDzSg",{"logo":1256,"freeTrial":1261,"sales":1266,"login":1271,"items":1276,"search":1604,"minimal":1640,"duo":1659,"switchNav":1668,"pricingDeployment":1679},{"config":1257},{"href":1258,"dataGaName":1259,"dataGaLocation":1260},"/fr-fr/","gitlab logo","header",{"text":1262,"config":1263},"Commencer un essai gratuit",{"href":1264,"dataGaName":1265,"dataGaLocation":1260},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/fr-fr&glm_content=default-saas-trial/","free trial",{"text":1267,"config":1268},"Demander une démo",{"href":1269,"dataGaName":1270,"dataGaLocation":1260},"/fr-fr/sales/?contact-topic=request-demo","sales",{"text":1272,"config":1273},"Connexion",{"href":1274,"dataGaName":1275,"dataGaLocation":1260},"https://gitlab.com/users/sign_in/","sign in",[1277,1306,1408,1413,1526,1582],{"text":1278,"config":1279,"menu":1281},"Plateforme",{"dataNavLevelOne":1280},"platform",{"type":1282,"columns":1283},"cards",[1284,1290,1298],{"title":1278,"description":1285,"link":1286},"La plateforme d'orchestration intelligente pour le DevSecOps",{"text":1287,"config":1288},"Explorer notre plateforme",{"href":1289,"dataGaName":1280,"dataGaLocation":1260},"/fr-fr/platform/",{"title":1291,"description":1292,"link":1293},"GitLab Duo Agent Platform","L'IA agentique pour l'ensemble du cycle de développement logiciel",{"text":1294,"config":1295},"Découvrir GitLab Duo",{"href":1296,"dataGaName":1297,"dataGaLocation":1260},"/fr-fr/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":1299,"description":1300,"link":1301},"Pourquoi GitLab ?","Découvrez les principales raisons pour lesquelles les entreprises choisissent GitLab",{"text":1302,"config":1303},"En savoir plus",{"href":1304,"dataGaName":1305,"dataGaLocation":1260},"/fr-fr/why-gitlab/","why gitlab",{"text":1307,"left":562,"config":1308,"menu":1310},"Produit",{"dataNavLevelOne":1309},"solutions",{"type":1311,"link":1312,"columns":1316,"feature":1387},"lists",{"text":1313,"config":1314},"Voir toutes les solutions",{"href":1315,"dataGaName":1309,"dataGaLocation":1260},"/fr-fr/solutions/",[1317,1342,1365],{"title":1318,"description":1319,"link":1320,"items":1325},"Automatisation","CI/CD et automatisation pour accélérer le déploiement",{"config":1321},{"icon":1322,"href":1323,"dataGaName":1324,"dataGaLocation":1260},"AutomatedCodeAlt","/fr-fr/solutions/delivery-automation/","automated software delivery",[1326,1330,1333,1338],{"text":1327,"config":1328},"CI/CD",{"href":1329,"dataGaLocation":1260,"dataGaName":1327},"/fr-fr/solutions/continuous-integration/",{"text":1291,"config":1331},{"href":1296,"dataGaLocation":1260,"dataGaName":1332},"gitlab duo agent platform - product menu",{"text":1334,"config":1335},"Gestion du code source",{"href":1336,"dataGaLocation":1260,"dataGaName":1337},"/fr-fr/solutions/source-code-management/","Source Code Management",{"text":1339,"config":1340},"Livraison de logiciels automatisée",{"href":1323,"dataGaLocation":1260,"dataGaName":1341},"Automated software delivery",{"title":1343,"description":1344,"link":1345,"items":1350},"Sécurité","Livrez du code plus rapidement sans compromettre la sécurité",{"config":1346},{"href":1347,"dataGaName":1348,"dataGaLocation":1260,"icon":1349},"/fr-fr/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[1351,1355,1360],{"text":1352,"config":1353},"Tests de sécurité des applications",{"href":1347,"dataGaName":1354,"dataGaLocation":1260},"Application security testing",{"text":1356,"config":1357},"Sécurité de la chaîne d'approvisionnement logicielle",{"href":1358,"dataGaLocation":1260,"dataGaName":1359},"/fr-fr/solutions/supply-chain/","Software supply chain security",{"text":1361,"config":1362},"Conformité logicielle",{"href":1363,"dataGaName":1364,"dataGaLocation":1260},"/fr-fr/solutions/software-compliance/","software compliance",{"title":1366,"link":1367,"items":1372},"Mesures",{"config":1368},{"icon":1369,"href":1370,"dataGaName":1371,"dataGaLocation":1260},"DigitalTransformation","/fr-fr/solutions/visibility-measurement/","visibility and measurement",[1373,1377,1382],{"text":1374,"config":1375},"Visibilité et mesures",{"href":1370,"dataGaLocation":1260,"dataGaName":1376},"Visibility and Measurement",{"text":1378,"config":1379},"Gestion de la chaîne de valeur",{"href":1380,"dataGaLocation":1260,"dataGaName":1381},"/fr-fr/solutions/value-stream-management/","Value Stream Management",{"text":1383,"config":1384},"Analyses et informations",{"href":1385,"dataGaLocation":1260,"dataGaName":1386},"/fr-fr/solutions/analytics-and-insights/","Analytics and insights",{"title":1388,"type":1311,"items":1389},"GitLab",[1390,1396,1402],{"text":1391,"config":1392},"Entreprises",{"icon":1393,"href":1394,"dataGaLocation":1260,"dataGaName":1395},"Building","/fr-fr/enterprise/","enterprise",{"text":1397,"config":1398},"Pour les PME",{"icon":1399,"href":1400,"dataGaLocation":1260,"dataGaName":1401},"Work","/fr-fr/small-business/","small business",{"text":1403,"config":1404},"Pour le secteur public",{"icon":1405,"href":1406,"dataGaLocation":1260,"dataGaName":1407},"Organization","/fr-fr/solutions/public-sector/","public sector",{"text":1409,"config":1410},"Tarifs",{"href":1411,"dataGaName":1412,"dataGaLocation":1260,"dataNavLevelOne":1412},"/fr-fr/pricing/","pricing",{"text":1414,"config":1415,"menu":1417},"Ressources",{"dataNavLevelOne":1416},"resources",{"type":1311,"link":1418,"columns":1422,"feature":1515},{"text":1419,"config":1420},"Afficher toutes les ressources",{"href":1421,"dataGaName":1416,"dataGaLocation":1260},"/fr-fr/resources/",[1423,1456,1483],{"title":1424,"items":1425},"Premiers pas",[1426,1431,1436,1441,1446,1451],{"text":1427,"config":1428},"Installation",{"href":1429,"dataGaName":1430,"dataGaLocation":1260},"/fr-fr/install/","install",{"text":1432,"config":1433},"Guides de démarrage",{"href":1434,"dataGaName":1435,"dataGaLocation":1260},"/fr-fr/get-started/","quick setup checklists",{"text":1437,"config":1438},"Apprentissage",{"href":1439,"dataGaLocation":1260,"dataGaName":1440},"https://university.gitlab.com/","learn",{"text":1442,"config":1443},"Documentation",{"href":1444,"dataGaName":1445,"dataGaLocation":1260},"https://docs.gitlab.com/","product documentation",{"text":1447,"config":1448},"Vidéos sur les bonnes pratiques",{"href":1449,"dataGaName":1450,"dataGaLocation":1260},"/fr-fr/getting-started-videos/","best practice videos",{"text":1452,"config":1453},"Intégrations",{"href":1454,"dataGaName":1455,"dataGaLocation":1260},"/fr-fr/integrations/","integrations",{"title":1457,"items":1458},"Découvrir",[1459,1464,1469,1474,1478],{"text":1460,"config":1461},"Témoignages clients",{"href":1462,"dataGaName":1463,"dataGaLocation":1260},"/fr-fr/customers/","customer success stories",{"text":1465,"config":1466},"Blog",{"href":1467,"dataGaName":1468,"dataGaLocation":1260},"/fr-fr/blog/","blog",{"text":1470,"config":1471},"Demo Hub",{"href":1472,"dataGaName":1473,"dataGaLocation":1260},"/fr-fr/demo-hub/","demo hub",{"text":1475,"config":1476},"The Source",{"href":1477,"dataGaName":1468,"dataGaLocation":1260},"/fr-fr/the-source/",{"text":1479,"config":1480},"Travail à distance",{"href":1481,"dataGaName":1482,"dataGaLocation":1260},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":1484,"items":1485},"Connecter",[1486,1491,1496,1500,1505,1510],{"text":1487,"config":1488},"Services GitLab",{"href":1489,"dataGaName":1490,"dataGaLocation":1260},"/fr-fr/services/","services",{"text":1492,"config":1493},"Contribuer",{"href":1494,"dataGaName":1495,"dataGaLocation":1260},"https://contributors.gitlab.com","contribute",{"text":1497,"config":1498},"Communauté",{"href":1499,"dataGaName":1252,"dataGaLocation":1260},"/community/",{"text":1501,"config":1502},"Forum",{"href":1503,"dataGaName":1504,"dataGaLocation":1260},"https://forum.gitlab.com/","forum",{"text":1506,"config":1507},"Événements",{"href":1508,"dataGaName":1509,"dataGaLocation":1260},"/events/","events",{"text":1511,"config":1512},"Partenaires",{"href":1513,"dataGaName":1514,"dataGaLocation":1260},"/fr-fr/partners/","partners",{"config":1516,"title":1519,"text":1520,"link":1521},{"background":1517,"textColor":1518},"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":1522,"config":1523},"Lire les articles les plus récents",{"href":1524,"dataGaName":1525,"dataGaLocation":1260},"/fr-fr/whats-new/","whats new",{"text":1527,"config":1528,"menu":1530},"Société",{"dataNavLevelOne":1529},"company",{"type":1311,"columns":1531},[1532],{"items":1533},[1534,1539,1545,1547,1552,1557,1562,1567,1572,1577],{"text":1535,"config":1536},"À propos",{"href":1537,"dataGaName":1538,"dataGaLocation":1260},"/fr-fr/company/","about",{"text":1540,"config":1541,"footerGa":1544},"Carrières",{"href":1542,"dataGaName":1543,"dataGaLocation":1260},"/jobs/","jobs",{"dataGaName":1543},{"text":1506,"config":1546},{"href":1508,"dataGaName":1509,"dataGaLocation":1260},{"text":1548,"config":1549},"Leadership",{"href":1550,"dataGaName":1551,"dataGaLocation":1260},"/company/team/e-group/","leadership",{"text":1553,"config":1554},"Manuel",{"href":1555,"dataGaName":1556,"dataGaLocation":1260},"https://handbook.gitlab.com/","handbook",{"text":1558,"config":1559},"Relations avec les investisseurs",{"href":1560,"dataGaName":1561,"dataGaLocation":1260},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":1563,"config":1564},"Trust Center",{"href":1565,"dataGaName":1566,"dataGaLocation":1260},"/fr-fr/security/","trust center",{"text":1568,"config":1569},"Centre pour la transparence de l'IA",{"href":1570,"dataGaName":1571,"dataGaLocation":1260},"/fr-fr/ai-transparency-center/","ai transparency center",{"text":1573,"config":1574},"Newsletter",{"href":1575,"dataGaName":1576,"dataGaLocation":1260},"/company/contact/#contact-forms","newsletter",{"text":1578,"config":1579},"Presse",{"href":1580,"dataGaName":1581,"dataGaLocation":1260},"/press/","press",{"text":1583,"config":1584,"menu":1585},"Nous contacter",{"dataNavLevelOne":1529},{"type":1311,"columns":1586},[1587],{"items":1588},[1589,1594,1599],{"text":1590,"config":1591},"Contacter l'équipe commerciale",{"href":1592,"dataGaName":1593,"dataGaLocation":1260},"/fr-fr/sales/","talk to sales",{"text":1595,"config":1596},"Assistance GitLab",{"href":1597,"dataGaName":1598,"dataGaLocation":1260},"https://support.gitlab.com/hc/en-us","support portal",{"text":1600,"config":1601},"Portail clients GitLab",{"href":1602,"dataGaName":1603,"dataGaLocation":1260},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":1605,"login":1606,"suggestions":1613},"Fermer",{"text":1607,"link":1608},"Pour rechercher des dépôts et des projets, connectez-vous à",{"text":1609,"config":1610},"GitLab.com",{"href":1274,"dataGaName":1611,"dataGaLocation":1612},"search login","search",{"text":1614,"default":1615},"Suggestions",[1616,1619,1624,1626,1631,1636],{"text":1291,"config":1617},{"href":1296,"dataGaName":1618,"dataGaLocation":1612},"GitLab Duo Agent Platform",{"text":1620,"config":1621},"Suggestions de code (IA)",{"href":1622,"dataGaName":1623,"dataGaLocation":1612},"/fr-fr/solutions/code-suggestions/","Code Suggestions (AI)",{"text":1327,"config":1625},{"href":1329,"dataGaName":1327,"dataGaLocation":1612},{"text":1627,"config":1628},"GitLab sur AWS",{"href":1629,"dataGaName":1630,"dataGaLocation":1612},"/fr-fr/partners/technology-partners/aws/","GitLab on AWS",{"text":1632,"config":1633},"GitLab sur Google Cloud",{"href":1634,"dataGaName":1635,"dataGaLocation":1612},"/fr-fr/partners/technology-partners/google-cloud-platform/","GitLab on Google Cloud",{"text":1637,"config":1638},"Pourquoi utiliser GitLab ?",{"href":1304,"dataGaName":1639,"dataGaLocation":1612},"Why GitLab?",{"freeTrial":1641,"mobileIcon":1646,"desktopIcon":1651,"secondaryButton":1654},{"text":1642,"config":1643},"Commencer votre essai gratuit",{"href":1644,"dataGaName":1265,"dataGaLocation":1645},"https://gitlab.com/-/trials/new/","nav",{"altText":1647,"config":1648},"Icône GitLab",{"src":1649,"dataGaName":1650,"dataGaLocation":1645},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":1647,"config":1652},{"src":1653,"dataGaName":1650,"dataGaLocation":1645},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":1655,"config":1656},"Commencer",{"href":1657,"dataGaName":1658,"dataGaLocation":1645},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/fr-fr/get-started/","get started",{"freeTrial":1660,"mobileIcon":1664,"desktopIcon":1666},{"text":1661,"config":1662},"En savoir plus sur GitLab Duo",{"href":1296,"dataGaName":1663,"dataGaLocation":1645},"gitlab duo",{"altText":1647,"config":1665},{"src":1649,"dataGaName":1650,"dataGaLocation":1645},{"altText":1647,"config":1667},{"src":1653,"dataGaName":1650,"dataGaLocation":1645},{"button":1669,"mobileIcon":1674,"desktopIcon":1676},{"text":1670,"config":1671},"/switch",{"href":1672,"dataGaName":1673,"dataGaLocation":1645},"#contact","switch",{"altText":1647,"config":1675},{"src":1649,"dataGaName":1650,"dataGaLocation":1645},{"altText":1647,"config":1677},{"src":1678,"dataGaName":1650,"dataGaLocation":1645},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":1680,"mobileIcon":1685,"desktopIcon":1687},{"text":1681,"config":1682},"Retour aux tarifs",{"href":1411,"dataGaName":1683,"dataGaLocation":1645,"icon":1684},"back to pricing","GoBack",{"altText":1647,"config":1686},{"src":1649,"dataGaName":1650,"dataGaLocation":1645},{"altText":1647,"config":1688},{"src":1653,"dataGaName":1650,"dataGaLocation":1645},{"title":1690,"button":1691,"config":1695},"GitLab Orbit est arrivé : la couche de contexte pour les agents d'IA.",{"text":1302,"config":1692},{"href":1693,"dataGaName":1694,"dataGaLocation":1260},"/fr-fr/gitlab-orbit/","orbit",{"layout":1696,"disabled":1240},"release",{"data":1698},{"text":1699,"source":1700,"edit":1706,"contribute":1711,"config":1715,"items":1720,"minimal":1928},"Git est une marque déposée de Software Freedom Conservancy et notre utilisation de « GitLab » est sous licence.",{"text":1701,"config":1702},"Afficher le code source de la page",{"href":1703,"dataGaName":1704,"dataGaLocation":1705},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":1707,"config":1708},"Modifier cette page",{"href":1709,"dataGaName":1710,"dataGaLocation":1705},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":1492,"config":1712},{"href":1713,"dataGaName":1714,"dataGaLocation":1705},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":1716,"facebook":1717,"youtube":1718,"linkedin":1719},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[1721,1767,1820,1863,1895],{"title":1409,"links":1722,"subMenu":1737},[1723,1727,1732],{"text":1724,"config":1725},"Voir les forfaits",{"href":1411,"dataGaName":1726,"dataGaLocation":1705},"view plans",{"text":1728,"config":1729},"GitLab Premium",{"href":1730,"dataGaName":1731,"dataGaLocation":1705},"/fr-fr/pricing/premium/","why premium",{"text":1733,"config":1734},"GitLab Ultimate",{"href":1735,"dataGaName":1736,"dataGaLocation":1705},"/fr-fr/pricing/ultimate/","why ultimate",[1738],{"title":1583,"links":1739},[1740,1742,1744,1747,1752,1757,1762],{"text":1590,"config":1741},{"href":1592,"dataGaName":1270,"dataGaLocation":1705},{"text":1595,"config":1743},{"href":1597,"dataGaName":1598,"dataGaLocation":1705},{"text":1745,"config":1746},"Portail clients",{"href":1602,"dataGaName":1603,"dataGaLocation":1705},{"text":1748,"config":1749},"Statut",{"href":1750,"dataGaName":1751,"dataGaLocation":1705},"https://status.gitlab.com/","status",{"text":1753,"config":1754},"Conditions d'utilisation",{"href":1755,"dataGaName":1756,"dataGaLocation":1705},"/terms/","terms of use",{"text":1758,"config":1759},"Politique de confidentialité",{"href":1760,"dataGaName":1761,"dataGaLocation":1705},"/fr-fr/privacy/","privacy statement",{"text":1763,"config":1764},"Gestion des cookies",{"dataGaName":1765,"dataGaLocation":1705,"id":1766,"isOneTrustButton":562},"cookie preferences","ot-sdk-btn",{"title":1307,"links":1768,"subMenu":1777},[1769,1773],{"text":1770,"config":1771},"Plateforme DevSecOps",{"href":1289,"dataGaName":1772,"dataGaLocation":1705},"devsecops platform",{"text":1774,"config":1775},"Développement assisté par l'IA",{"href":1296,"dataGaName":1776,"dataGaLocation":1705},"ai-assisted development",[1778],{"title":1779,"links":1780},"Thèmes",[1781,1785,1790,1795,1800,1805,1810,1815],{"text":1327,"config":1782},{"href":1783,"dataGaName":1784,"dataGaLocation":1705},"/fr-fr/topics/ci-cd/","cicd",{"text":1786,"config":1787},"GitOps",{"href":1788,"dataGaName":1789,"dataGaLocation":1705},"/fr-fr/topics/gitops/","gitops",{"text":1791,"config":1792},"DevOps",{"href":1793,"dataGaName":1794,"dataGaLocation":1705},"/fr-fr/topics/devops/","devops",{"text":1796,"config":1797},"Contrôle de version",{"href":1798,"dataGaName":1799,"dataGaLocation":1705},"/fr-fr/topics/version-control/","version control",{"text":1801,"config":1802},"DevSecOps",{"href":1803,"dataGaName":1804,"dataGaLocation":1705},"/fr-fr/topics/devsecops/","devsecops",{"text":1806,"config":1807},"Cloud-native",{"href":1808,"dataGaName":1809,"dataGaLocation":1705},"/fr-fr/topics/cloud-native/","cloud native",{"text":1811,"config":1812},"IA pour la programmation",{"href":1813,"dataGaName":1814,"dataGaLocation":1705},"/fr-fr/topics/devops/ai-for-coding/","ai for coding",{"text":1816,"config":1817},"IA agentique",{"href":1818,"dataGaName":1819,"dataGaLocation":1705},"/fr-fr/topics/agentic-ai/","agentic ai",{"title":1821,"links":1822},"Solutions",[1823,1826,1828,1833,1836,1839,1842,1845,1847,1850,1853,1858],{"text":1352,"config":1824},{"href":1347,"dataGaName":1825,"dataGaLocation":1705},"Application Security Testing",{"text":1339,"config":1827},{"href":1323,"dataGaName":1324,"dataGaLocation":1705},{"text":1829,"config":1830},"Développement Agile",{"href":1831,"dataGaName":1832,"dataGaLocation":1705},"/fr-fr/solutions/agile-delivery/","agile delivery",{"text":1334,"config":1834},{"href":1336,"dataGaName":1835,"dataGaLocation":1705},"source code management",{"text":1327,"config":1837},{"href":1329,"dataGaName":1838,"dataGaLocation":1705},"continuous integration & delivery",{"text":1378,"config":1840},{"href":1380,"dataGaName":1841,"dataGaLocation":1705},"value stream management",{"text":1786,"config":1843},{"href":1844,"dataGaName":1789,"dataGaLocation":1705},"/fr-fr/solutions/gitops/",{"text":1391,"config":1846},{"href":1394,"dataGaName":1395,"dataGaLocation":1705},{"text":1848,"config":1849},"PME",{"href":1400,"dataGaName":1401,"dataGaLocation":1705},{"text":1851,"config":1852},"Secteur public",{"href":1406,"dataGaName":1407,"dataGaLocation":1705},{"text":1854,"config":1855},"Éducation",{"href":1856,"dataGaName":1857,"dataGaLocation":1705},"/fr-fr/solutions/education/","education",{"text":1859,"config":1860},"Services financiers",{"href":1861,"dataGaName":1862,"dataGaLocation":1705},"/fr-fr/solutions/finance/","financial services",{"title":1414,"links":1864},[1865,1867,1869,1871,1874,1876,1879,1881,1883,1885,1887,1889,1891,1893],{"text":1427,"config":1866},{"href":1429,"dataGaName":1430,"dataGaLocation":1705},{"text":1432,"config":1868},{"href":1434,"dataGaName":1435,"dataGaLocation":1705},{"text":1437,"config":1870},{"href":1439,"dataGaName":1440,"dataGaLocation":1705},{"text":1442,"config":1872},{"href":1444,"dataGaName":1873,"dataGaLocation":1705},"docs",{"text":1465,"config":1875},{"href":1467,"dataGaName":1468,"dataGaLocation":1705},{"text":1877,"config":1878},"Nouveautés",{"href":1524,"dataGaName":1525,"dataGaLocation":1705},{"text":1460,"config":1880},{"href":1462,"dataGaName":1463,"dataGaLocation":1705},{"text":1479,"config":1882},{"href":1481,"dataGaName":1482,"dataGaLocation":1705},{"text":1487,"config":1884},{"href":1489,"dataGaName":1490,"dataGaLocation":1705},{"text":1492,"config":1886},{"href":1494,"dataGaName":1495,"dataGaLocation":1705},{"text":1497,"config":1888},{"href":1499,"dataGaName":1252,"dataGaLocation":1705},{"text":1501,"config":1890},{"href":1503,"dataGaName":1504,"dataGaLocation":1705},{"text":1506,"config":1892},{"href":1508,"dataGaName":1509,"dataGaLocation":1705},{"text":1511,"config":1894},{"href":1513,"dataGaName":1514,"dataGaLocation":1705},{"title":1527,"links":1896},[1897,1899,1901,1903,1905,1907,1912,1917,1919,1921,1923],{"text":1535,"config":1898},{"href":1537,"dataGaName":1529,"dataGaLocation":1705},{"text":1540,"config":1900},{"href":1542,"dataGaName":1543,"dataGaLocation":1705},{"text":1548,"config":1902},{"href":1550,"dataGaName":1551,"dataGaLocation":1705},{"text":1553,"config":1904},{"href":1555,"dataGaName":1556,"dataGaLocation":1705},{"text":1558,"config":1906},{"href":1560,"dataGaName":1561,"dataGaLocation":1705},{"text":1908,"config":1909},"Développement durable",{"href":1910,"dataGaName":1911,"dataGaLocation":1705},"/sustainability/","Sustainability",{"text":1913,"config":1914},"Diversité, inclusion et appartenance (DIB)",{"href":1915,"dataGaName":1916,"dataGaLocation":1705},"/fr-fr/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":1563,"config":1918},{"href":1565,"dataGaName":1566,"dataGaLocation":1705},{"text":1573,"config":1920},{"href":1575,"dataGaName":1576,"dataGaLocation":1705},{"text":1578,"config":1922},{"href":1580,"dataGaName":1581,"dataGaLocation":1705},{"text":1924,"config":1925},"Déclaration de transparence sur l'esclavage moderne",{"href":1926,"dataGaName":1927,"dataGaLocation":1705},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1929},[1930,1932,1934],{"text":1753,"config":1931},{"href":1755,"dataGaName":1756,"dataGaLocation":1705},{"text":1763,"config":1933},{"dataGaName":1765,"dataGaLocation":1705,"id":1766,"isOneTrustButton":562},{"text":1758,"config":1935},{"href":1760,"dataGaName":1761,"dataGaLocation":1705},[1937],{"id":1938,"title":7,"body":1239,"config":1939,"content":1941,"description":1239,"extension":1945,"meta":1946,"navigation":562,"path":1947,"seo":1948,"stem":1949,"__hash__":1950},"blogAuthors/en-us/blog/authors/karthik-nayak.yml",{"template":1940},"BlogAuthor",{"name":7,"config":1942},{"headshot":1943,"ctfId":1944},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659809/Blog/Author%20Headshots/Screenshot_2025-06-04_at_8.49.51%C3%A2__AM.png","3Q6ZKvaiCRw7tFZdDGlecg","yml",{},"/en-us/blog/authors/karthik-nayak",{},"en-us/blog/authors/karthik-nayak","pDQbfmQk6aaJ6PA9L68AzPlzIUBcosTh7WBoq680gpk",[1952,1960,1967],{"title":1953,"description":1954,"heroImage":1955,"category":1235,"date":1956,"authors":1957,"slug":1959,"externalUrl":1239},"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",[1958],"Toon Claes","whats-new-in-git-2-55-0",{"title":1961,"description":1962,"heroImage":1963,"category":1235,"date":1964,"authors":1965,"slug":1966,"externalUrl":1239},"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",[205],"whats-new-in-git-2-54-0",{"title":1968,"description":1969,"heroImage":1970,"category":1235,"date":1971,"authors":1972,"slug":1974,"externalUrl":1239},"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",[1973],"Nick Veenhof","gitlab-ai-hackathon-2026-meet-the-winners",{"promotions":1976},[1977,1991,2003,2015],{"id":1978,"categories":1979,"header":1981,"text":1982,"button":1983,"image":1988},"ai-modernization",[1980],"ai","L'IA tient-elle ses promesses à grande échelle ?","Le questionnaire ne prendra pas plus de 5 minutes.",{"text":1984,"config":1985},"Obtenez votre score de maturité IA",{"href":1986,"dataGaName":1987,"dataGaLocation":1468},"/fr-fr/assessments/ai-modernization-assessment/","modernization assessment",{"config":1989},{"src":1990},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1992,"categories":1993,"header":1995,"text":1982,"button":1996,"image":2000},"devops-modernization",[1994,1804],"product","Vous contentez-vous de gérer des outils ou de livrer des innovations ?",{"text":1997,"config":1998},"Obtenez votre score de maturité DevOps",{"href":1999,"dataGaName":1987,"dataGaLocation":1468},"/fr-fr/assessments/devops-modernization-assessment/",{"config":2001},{"src":2002},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":2004,"categories":2005,"header":2007,"text":1982,"button":2008,"image":2012},"security-modernization",[2006],"security","Faut-il sacrifier la rapidité pour garantir la sécurité ?",{"text":2009,"config":2010},"Obtenez votre score de maturité en matière de sécurité",{"href":2011,"dataGaName":1987,"dataGaLocation":1468},"/fr-fr/assessments/security-modernization-assessment/",{"config":2013},{"src":2014},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":2016,"paths":2017,"header":2020,"text":2021,"button":2022,"image":2027},"github-azure-migration",[2018,2019],"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":2023,"config":2024},"Découvrez les différences entre GitLab et GitHub",{"href":2025,"dataGaName":2026,"dataGaLocation":1468},"/fr-fr/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":2028},{"src":2002},{"header":2030,"blurb":2031,"button":2032,"secondaryButton":2036},"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":1262,"config":2033},{"href":2034,"dataGaName":1265,"dataGaLocation":2035},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/fr-fr/","feature",{"text":1590,"config":2037},{"href":1592,"dataGaName":1270,"dataGaLocation":2035},1786803765281]