[{"data":1,"prerenderedAt":711},["ShallowReactive",2],{"/fr-fr/blog/what-s-new-in-git-2-51-0":3,"navigation-fr-fr":34,"banner-fr-fr":452,"footer-fr-fr":465,"Karthik Nayak":676,"next-steps-fr-fr":689,"footer-source-/fr-fr/blog/what-s-new-in-git-2-51-0/":704},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"seo":8,"content":13,"config":24,"_id":27,"_type":28,"title":29,"_source":30,"_file":31,"_stem":32,"_extension":33},"/fr-fr/blog/what-s-new-in-git-2-51-0","blog",false,"",{"config":9,"title":10,"ogTitle":10,"description":11,"ogDescription":11,"ogImage":12},{"noIndex":6},"Nouveautés de Git 2.51.0","Découvrez les dernières contributions de l'équipe Git de GitLab et de la communauté Git pour la version Git 2.51.0.","https://res.cloudinary.com/about-gitlab-com/image/upload/f_auto,q_auto,c_lfill/v1749663087/Blog/Hero%20Images/git3-cover.png",{"title":10,"description":14,"authors":15,"heroImage":12,"date":17,"body":18,"category":19,"tags":20},"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).",[16],"Karthik Nayak","2025-08-25","Le projet Git a récemment publié la version [Git 2.51](https://lore.kernel.org/git/xmqqikikk1hr.fsf@gitster.g/T/#u). 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.\n\n\n## Optimisations des performances pour `git-push(1)` et `git-fetch(1)`\n\n\n\nLes commandes `git-push(1)` et `git-fetch(1)` 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 [pipelines CI/CD](https://about.gitlab.com/fr-fr/topics/ci-cd/cicd-pipeline/ \"Qu’est-ce qu’un pipeline CI/CD ?\") étendus.\n\n\n\nLes 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 `git-push(1)` et [`git-fetch(1)`](https://about.gitlab.com/fr-fr/blog/git-pull-vs-git-fetch-whats-the-difference/ \"Git Pull et Git Fetch\") 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.\n\n\n\nLa 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.\n\n\n\nDans 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.\n\n\n\nPour `git-fetch(1)`, nous constatons *des performances 22x meilleures pour le backend « reftable »* et *1,25x meilleures pour le backend « files »* lorsque cette commande est utilisée dans un dépôt avec 10 000 références.\n\n\n\n```\nBenchmark 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\n\n\nPour `git-push(1)`, nous constatons des *performances 18x meilleures pour le backend reftable* et *1,21x meilleures pour le backend « files »* lorsque cette commande est utilisée dans un dépôt avec 10 000 références.\n\n\n\n```\nBenchmark 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\n\n\nCe [projet](https://lore.kernel.org/git/20250514-501-update-git-fetch-1-to-use-partial-transactions-v1-0-7c65f46493d4@gmail.com/) a été mené par [Karthik Nayak](https://gitlab.com/knayakgl).\n\n\n\n## En route vers la version Git 3.0\n\n\n\nLa 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.\n\n\n\nLa 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 [document BreakingChanges](https://gitlab.com/gitlab-org/git/-/blob/master/Documentation/BreakingChanges.adoc).\n\n\n\nLa version Git 2.51.0 apporte des changements importants en préparation de Git 3.0.\n\n\n\n### Reftable comme backend de références par défaut\n\n\n\nDans la version [Git 2.45.0](https://about.gitlab.com/fr-fr/blog/whats-new-in-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 [guide du débutant sur le fonctionnement du format reftable](https://about.gitlab.com/fr-fr/blog/a-beginners-guide-to-the-git-reftable-format/ \"Format reftable\") pour obtenir plus d'informations sur le backend « reftable ».\n\n\n\nLa 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 :\n\n\n\n* 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.\n\n\n* 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 ».\n\n\n* 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.\n\n\n* 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.\n\n\n* Les opérations qui écrivent plusieurs références à la fois ne sont pas atomiques avec le backend « files ». Par conséquent, [Git](https://about.gitlab.com/fr-fr/blog/what-is-git/ \"Qu'est-ce que 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.\n\n\n* 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 ».\n\n\n* 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 ».\n\n\n\nCe projet a été mené par [Patrick Steinhardt](https://gitlab.com/pks-gitlab).\n\n\n\n### SHA-256 comme fonction de hachage par défaut\n\n\n\nLe système de [contrôle de version](https://about.gitlab.com/fr-fr/topics/version-control/ \"Qu'est-ce que le 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 :\n\n\n\n* Vérifications faciles de l'intégrité, car un seul bit inversé modifierait complètement le résultat du hachage.\n\n\n* Recherche d'objets rapide, car ces derniers peuvent être indexés par leur hachage.\n\n\n* 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.\n\n\n* 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é.\n\n\n\nDepuis 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'[attaque SHAttered](https://shattered.io), 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é.\n\n\n\nSHA-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.\n\n\n\nCe projet a été mené par [brian m. carlson](https://github.com/bk2204).\n\n\n\n### Suppression de `git-whatchanged(1)`\n\n\n\nLa commande `git-whatchanged(1)` montre les logs avec les différences que chaque commit introduit. Bien que cette commande soit maintenant remplacée par `git log --raw`, elle a été conservée pour des raisons historiques.\n\n\n\nGit 2.51.0 oblige les utilisateurs de la commande à utiliser explicitement le flag `--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.\n\n\n\nCe projet a été mené par [Junio C Hamano](https://simple.wikipedia.org/wiki/Junio_Hamano).\n\n\n\n## `git switch` et `git restore` ne sont plus en phase expérimentale\n\n\n\nLa commande `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 :\n\n\n\n```\n$ git status\nOn branch master\nYour branch is up to date with 'origin/master'.\n\nnothing to commit, working tree clean\n\n$ git checkout next\nSwitched to branch 'next'\nYour branch is up to date with 'origin/next'.\n```\n\n\n\nOu pour restaurer des fichiers :\n\n\n\n```\n$ echo \"additional line\" >> git.c\n\n$ git status\nOn branch master\nYour branch is up to date with 'origin/master'.\n\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\n$ git checkout git.c\nUpdated 1 path from the index\n\n$ git status\nOn branch master\nYour branch is up to date with 'origin/master'.\n\nnothing to commit, working tree clean\n```\n\n\n\nPour 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, `git-switch(1)` et `git-restore(1)`.\n\n\n\nLa commande `git-switch(1)` permet aux utilisateurs de basculer vers une branche spécifique :\n\n\n\n```\n$ git status\nOn branch master\nYour branch is up to date with 'origin/master'.\n\nnothing to commit, working tree clean\n\n$ git switch next\nSwitched to branch 'next'\nYour branch is up to date with 'origin/next'.\n```\n\n\n\nEt la commande `git-restore(1)` permet aux utilisateurs de restaurer les fichiers de l'arbre de travail :\n\n\n\n```\n$ echo \"additional line\" >> git.c\n\n$ git status\nOn branch master\nYour branch is up to date with 'origin/master'.\n\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\n$ git restore git.c\n\n$ git status\nOn branch master\nYour branch is up to date with 'origin/master'.\n\nnothing to commit, working tree clean\n```\n\n\n\nCes 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.\n\n\n\nCela 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.\n\n\n\nCe projet a été mené par [Justin Tobler](https://gitlab.com/justintobler).\n\n\n\n## Prise en charge de la pagination pour `git for-each-ref(1)`\n\n\n\nLa commande `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.\n\n\n\nUne lacune importante émerge ainsi : `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.\n\n\n\nGit 2.51.0 prend en charge une nouvelle option `--start-after` pour `git for-each-ref`, qui permet de paginer les données de sortie. Il est aussi possible de la combiner avec l'option `--count` pour itérer sur un lot de références.\n\n\n\n```\n$ git for-each-ref --count=10\n9751243fba48b34d29aabfc9784803617a806e81 commit    refs/heads/branch-001\n9751243fba48b34d29aabfc9784803617a806e81 commit    refs/heads/branch-002\n9751243fba48b34d29aabfc9784803617a806e81 commit    refs/heads/branch-003\n9751243fba48b34d29aabfc9784803617a806e81 commit    refs/heads/branch-004\n9751243fba48b34d29aabfc9784803617a806e81 commit    refs/heads/branch-005\n9751243fba48b34d29aabfc9784803617a806e81 commit    refs/heads/branch-006\n9751243fba48b34d29aabfc9784803617a806e81 commit    refs/heads/branch-007\n9751243fba48b34d29aabfc9784803617a806e81 commit    refs/heads/branch-008\n9751243fba48b34d29aabfc9784803617a806e81 commit    refs/heads/branch-009\n9751243fba48b34d29aabfc9784803617a806e81 commit    refs/heads/branch-010\n\n$ git for-each-ref --count=10 --start-after=refs/heads/branch-010\n9751243fba48b34d29aabfc9784803617a806e81 commit    refs/heads/branch-011\n9751243fba48b34d29aabfc9784803617a806e81 commit    refs/heads/branch-012\n9751243fba48b34d29aabfc9784803617a806e81 commit    refs/heads/branch-013\n9751243fba48b34d29aabfc9784803617a806e81 commit    refs/heads/branch-014\n9751243fba48b34d29aabfc9784803617a806e81 commit    refs/heads/branch-015\n9751243fba48b34d29aabfc9784803617a806e81 commit    refs/heads/branch-016\n9751243fba48b34d29aabfc9784803617a806e81 commit    refs/heads/branch-017\n9751243fba48b34d29aabfc9784803617a806e81 commit    refs/heads/branch-018\n9751243fba48b34d29aabfc9784803617a806e81 commit    refs/heads/branch-019\n9751243fba48b34d29aabfc9784803617a806e81 commit    refs/heads/branch-020\n```\n\n\n\nCe projet a été mené par [Karthik Nayak](https://gitlab.com/knayakgl).\n\n\n\n## Perspectives\n\n\n\nPrêt à découvrir ces améliorations ? Mettez à jour votre version Git et commencez à utiliser `git switch` et `git restore` dans vos workflows quotidiens.\n\n\n\nPour 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.\n\n\n\nPour en savoir plus, consultez les [notes de version officielles de Git 2.51.0](https://lore.kernel.org/git/xmqqikikk1hr.fsf@gitster.g/T/#u) et explorez notre [archive complète de le développement de Git](https://about.gitlab.com/fr-fr/blog/tags/git/).\n","open-source",[21,22,23],"git","open source","community",{"featured":6,"template":25,"slug":26},"BlogPost","what-s-new-in-git-2-51-0","content:fr-fr:blog:what-s-new-in-git-2-51-0.yml","yaml","What S New In Git 2 51 0","content","fr-fr/blog/what-s-new-in-git-2-51-0.yml","fr-fr/blog/what-s-new-in-git-2-51-0","yml",{"_path":35,"_dir":36,"_draft":6,"_partial":6,"_locale":7,"data":37,"_id":448,"_type":28,"title":449,"_source":30,"_file":450,"_stem":451,"_extension":33},"/shared/fr-fr/main-navigation","fr-fr",{"logo":38,"freeTrial":43,"sales":48,"login":53,"items":58,"search":389,"minimal":425,"duo":439},{"config":39},{"href":40,"dataGaName":41,"dataGaLocation":42},"/fr-fr/","gitlab logo","header",{"text":44,"config":45},"Commencer un essai gratuit",{"href":46,"dataGaName":47,"dataGaLocation":42},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":49,"config":50},"Contacter l'équipe commerciale",{"href":51,"dataGaName":52,"dataGaLocation":42},"/fr-fr/sales/","sales",{"text":54,"config":55},"Connexion",{"href":56,"dataGaName":57,"dataGaLocation":42},"https://gitlab.com/users/sign_in/","sign in",[59,103,201,206,310,370],{"text":60,"config":61,"cards":63,"footer":86},"Plateforme",{"dataNavLevelOne":62},"platform",[64,70,78],{"title":60,"description":65,"link":66},"La plateforme DevSecOps alimentée par l'IA la plus complète",{"text":67,"config":68},"Découvrir notre plateforme",{"href":69,"dataGaName":62,"dataGaLocation":42},"/fr-fr/platform/",{"title":71,"description":72,"link":73},"GitLab Duo (IA)","Créez des logiciels plus rapidement en tirant parti de l'IA à chaque étape du développement",{"text":74,"config":75},"Découvrez GitLab Duo",{"href":76,"dataGaName":77,"dataGaLocation":42},"/fr-fr/gitlab-duo/","gitlab duo ai",{"title":79,"description":80,"link":81},"Choisir GitLab","10 raisons pour lesquelles les entreprises choisissent GitLab",{"text":82,"config":83},"En savoir plus",{"href":84,"dataGaName":85,"dataGaLocation":42},"/fr-fr/why-gitlab/","why gitlab",{"title":87,"items":88},"Démarrer avec",[89,94,99],{"text":90,"config":91},"Ingénierie de plateforme",{"href":92,"dataGaName":93,"dataGaLocation":42},"/fr-fr/solutions/platform-engineering/","platform engineering",{"text":95,"config":96},"Expérience développeur",{"href":97,"dataGaName":98,"dataGaLocation":42},"/fr-fr/developer-experience/","Developer experience",{"text":100,"config":101},"MLOps",{"href":102,"dataGaName":100,"dataGaLocation":42},"/fr-fr/topics/devops/the-role-of-ai-in-devops/",{"text":104,"left":105,"config":106,"link":108,"lists":112,"footer":183},"Produit",true,{"dataNavLevelOne":107},"solutions",{"text":109,"config":110},"Voir toutes les solutions",{"href":111,"dataGaName":107,"dataGaLocation":42},"/fr-fr/solutions/",[113,139,161],{"title":114,"description":115,"link":116,"items":121},"Automatisation","CI/CD et automatisation pour accélérer le déploiement",{"config":117},{"icon":118,"href":119,"dataGaName":120,"dataGaLocation":42},"AutomatedCodeAlt","/fr-fr/solutions/delivery-automation/","automated software delivery",[122,126,130,135],{"text":123,"config":124},"CI/CD",{"href":125,"dataGaLocation":42,"dataGaName":123},"/fr-fr/solutions/continuous-integration/",{"text":127,"config":128},"Développement assisté par l'IA",{"href":76,"dataGaLocation":42,"dataGaName":129},"AI assisted development",{"text":131,"config":132},"Gestion du code source",{"href":133,"dataGaLocation":42,"dataGaName":134},"/fr-fr/solutions/source-code-management/","Source Code Management",{"text":136,"config":137},"Livraison de logiciels automatisée",{"href":119,"dataGaLocation":42,"dataGaName":138},"Automated software delivery",{"title":140,"description":141,"link":142,"items":147},"Securité","Livrez du code plus rapidement sans compromettre la sécurité",{"config":143},{"href":144,"dataGaName":145,"dataGaLocation":42,"icon":146},"/fr-fr/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[148,152,157],{"text":149,"config":150},"Application Security Testing",{"href":144,"dataGaName":151,"dataGaLocation":42},"Application security testing",{"text":153,"config":154},"Sécurité de la chaîne d'approvisionnement logicielle",{"href":155,"dataGaLocation":42,"dataGaName":156},"/fr-fr/solutions/supply-chain/","Software supply chain security",{"text":158,"config":159},"Software Compliance",{"href":160,"dataGaName":158,"dataGaLocation":42},"/fr-fr/solutions/software-compliance/",{"title":162,"link":163,"items":168},"Mesures",{"config":164},{"icon":165,"href":166,"dataGaName":167,"dataGaLocation":42},"DigitalTransformation","/fr-fr/solutions/visibility-measurement/","visibility and measurement",[169,173,178],{"text":170,"config":171},"Visibilité et mesures",{"href":166,"dataGaLocation":42,"dataGaName":172},"Visibility and Measurement",{"text":174,"config":175},"Gestion de la chaîne de valeur",{"href":176,"dataGaLocation":42,"dataGaName":177},"/fr-fr/solutions/value-stream-management/","Value Stream Management",{"text":179,"config":180},"Données d'analyse et informations clés",{"href":181,"dataGaLocation":42,"dataGaName":182},"/fr-fr/solutions/analytics-and-insights/","Analytics and insights",{"title":184,"items":185},"GitLab pour",[186,191,196],{"text":187,"config":188},"Entreprises",{"href":189,"dataGaLocation":42,"dataGaName":190},"/fr-fr/enterprise/","enterprise",{"text":192,"config":193},"PME",{"href":194,"dataGaLocation":42,"dataGaName":195},"/fr-fr/small-business/","small business",{"text":197,"config":198},"Secteur public",{"href":199,"dataGaLocation":42,"dataGaName":200},"/fr-fr/solutions/public-sector/","public sector",{"text":202,"config":203},"Tarifs",{"href":204,"dataGaName":205,"dataGaLocation":42,"dataNavLevelOne":205},"/fr-fr/pricing/","pricing",{"text":207,"config":208,"link":210,"lists":214,"feature":297},"Ressources",{"dataNavLevelOne":209},"resources",{"text":211,"config":212},"Afficher toutes les ressources",{"href":213,"dataGaName":209,"dataGaLocation":42},"/fr-fr/resources/",[215,248,270],{"title":216,"items":217},"Premiers pas",[218,223,228,233,238,243],{"text":219,"config":220},"Installation",{"href":221,"dataGaName":222,"dataGaLocation":42},"/fr-fr/install/","install",{"text":224,"config":225},"Guides de démarrage rapide",{"href":226,"dataGaName":227,"dataGaLocation":42},"/fr-fr/get-started/","quick setup checklists",{"text":229,"config":230},"Apprentissage",{"href":231,"dataGaLocation":42,"dataGaName":232},"https://university.gitlab.com/","learn",{"text":234,"config":235},"Documentation sur le produit",{"href":236,"dataGaName":237,"dataGaLocation":42},"https://docs.gitlab.com/","product documentation",{"text":239,"config":240},"Vidéos sur les bonnes pratiques",{"href":241,"dataGaName":242,"dataGaLocation":42},"/fr-fr/getting-started-videos/","best practice videos",{"text":244,"config":245},"Intégrations",{"href":246,"dataGaName":247,"dataGaLocation":42},"/fr-fr/integrations/","integrations",{"title":249,"items":250},"Découvrir",[251,256,260,265],{"text":252,"config":253},"Histoires de succès client",{"href":254,"dataGaName":255,"dataGaLocation":42},"/fr-fr/customers/","customer success stories",{"text":257,"config":258},"Blog",{"href":259,"dataGaName":5,"dataGaLocation":42},"/fr-fr/blog/",{"text":261,"config":262},"Travail à distance",{"href":263,"dataGaName":264,"dataGaLocation":42},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"text":266,"config":267},"TeamOps",{"href":268,"dataGaName":269,"dataGaLocation":42},"/fr-fr/teamops/","teamops",{"title":271,"items":272},"Connecter",[273,278,282,287,292],{"text":274,"config":275},"Services GitLab",{"href":276,"dataGaName":277,"dataGaLocation":42},"/fr-fr/services/","services",{"text":279,"config":280},"Communauté",{"href":281,"dataGaName":23,"dataGaLocation":42},"/community/",{"text":283,"config":284},"Forum",{"href":285,"dataGaName":286,"dataGaLocation":42},"https://forum.gitlab.com/","forum",{"text":288,"config":289},"Événements",{"href":290,"dataGaName":291,"dataGaLocation":42},"/events/","events",{"text":293,"config":294},"Partenaires",{"href":295,"dataGaName":296,"dataGaLocation":42},"/fr-fr/partners/","partners",{"backgroundColor":298,"textColor":299,"text":300,"image":301,"link":305},"#2f2a6b","#fff","L'avenir du développement logiciel. Tendances et perspectives.",{"altText":302,"config":303},"carte promo The Source",{"src":304},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758208064/dzl0dbift9xdizyelkk4.svg",{"text":306,"config":307},"Lire les articles les plus récents",{"href":308,"dataGaName":309,"dataGaLocation":42},"/fr-fr/the-source/","the source",{"text":311,"config":312,"lists":314},"Société",{"dataNavLevelOne":313},"company",[315],{"items":316},[317,322,328,330,335,340,345,350,355,360,365],{"text":318,"config":319},"À propos",{"href":320,"dataGaName":321,"dataGaLocation":42},"/fr-fr/company/","about",{"text":323,"config":324,"footerGa":327},"Emplois",{"href":325,"dataGaName":326,"dataGaLocation":42},"/jobs/","jobs",{"dataGaName":326},{"text":288,"config":329},{"href":290,"dataGaName":291,"dataGaLocation":42},{"text":331,"config":332},"Leadership",{"href":333,"dataGaName":334,"dataGaLocation":42},"/company/team/e-group/","leadership",{"text":336,"config":337},"Équipe",{"href":338,"dataGaName":339,"dataGaLocation":42},"/company/team/","team",{"text":341,"config":342},"Manuel",{"href":343,"dataGaName":344,"dataGaLocation":42},"https://handbook.gitlab.com/","handbook",{"text":346,"config":347},"Relations avec les investisseurs",{"href":348,"dataGaName":349,"dataGaLocation":42},"https://ir.gitlab.com/","investor relations",{"text":351,"config":352},"Centre de confiance",{"href":353,"dataGaName":354,"dataGaLocation":42},"/fr-fr/security/","trust center",{"text":356,"config":357},"Centre pour la transparence de l'IA",{"href":358,"dataGaName":359,"dataGaLocation":42},"/fr-fr/ai-transparency-center/","ai transparency center",{"text":361,"config":362},"Newsletter",{"href":363,"dataGaName":364,"dataGaLocation":42},"/company/contact/","newsletter",{"text":366,"config":367},"Presse",{"href":368,"dataGaName":369,"dataGaLocation":42},"/press/","press",{"text":371,"config":372,"lists":373},"Nous contacter",{"dataNavLevelOne":313},[374],{"items":375},[376,379,384],{"text":49,"config":377},{"href":51,"dataGaName":378,"dataGaLocation":42},"talk to sales",{"text":380,"config":381},"Aide",{"href":382,"dataGaName":383,"dataGaLocation":42},"/support/","get help",{"text":385,"config":386},"Portail clients GitLab",{"href":387,"dataGaName":388,"dataGaLocation":42},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":390,"login":391,"suggestions":398},"Fermer",{"text":392,"link":393},"Pour rechercher des dépôts et des projets, connectez-vous à",{"text":394,"config":395},"gitlab.com",{"href":56,"dataGaName":396,"dataGaLocation":397},"search login","search",{"text":399,"default":400},"Suggestions",[401,404,409,411,416,421],{"text":71,"config":402},{"href":76,"dataGaName":403,"dataGaLocation":397},"GitLab Duo (AI)",{"text":405,"config":406},"Suggestions de code (IA)",{"href":407,"dataGaName":408,"dataGaLocation":397},"/fr-fr/solutions/code-suggestions/","Code Suggestions (AI)",{"text":123,"config":410},{"href":125,"dataGaName":123,"dataGaLocation":397},{"text":412,"config":413},"GitLab sur AWS",{"href":414,"dataGaName":415,"dataGaLocation":397},"/fr-fr/partners/technology-partners/aws/","GitLab on AWS",{"text":417,"config":418},"GitLab sur Google Cloud ",{"href":419,"dataGaName":420,"dataGaLocation":397},"/fr-fr/partners/technology-partners/google-cloud-platform/","GitLab on Google Cloud",{"text":422,"config":423},"Pourquoi utiliser GitLab ?",{"href":84,"dataGaName":424,"dataGaLocation":397},"Why GitLab?",{"freeTrial":426,"mobileIcon":431,"desktopIcon":436},{"text":427,"config":428},"Commencer votre essai gratuit",{"href":429,"dataGaName":47,"dataGaLocation":430},"https://gitlab.com/-/trials/new/","nav",{"altText":432,"config":433},"Icône GitLab",{"src":434,"dataGaName":435,"dataGaLocation":430},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":432,"config":437},{"src":438,"dataGaName":435,"dataGaLocation":430},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"freeTrial":440,"mobileIcon":444,"desktopIcon":446},{"text":441,"config":442},"En savoir plus sur GitLab Duo",{"href":76,"dataGaName":443,"dataGaLocation":430},"gitlab duo",{"altText":432,"config":445},{"src":434,"dataGaName":435,"dataGaLocation":430},{"altText":432,"config":447},{"src":438,"dataGaName":435,"dataGaLocation":430},"content:shared:fr-fr:main-navigation.yml","Main Navigation","shared/fr-fr/main-navigation.yml","shared/fr-fr/main-navigation",{"_path":453,"_dir":36,"_draft":6,"_partial":6,"_locale":7,"title":454,"titleMobile":454,"button":455,"config":460,"_id":462,"_type":28,"_source":30,"_file":463,"_stem":464,"_extension":33},"/shared/fr-fr/banner","GitLab Duo Agent Platform est maintenant disponible en version bêta publique !",{"text":456,"config":457},"Essayer la version bêta",{"href":458,"dataGaName":459,"dataGaLocation":42},"/fr-fr/gitlab-duo/agent-platform/","duo banner",{"layout":461},"release","content:shared:fr-fr:banner.yml","shared/fr-fr/banner.yml","shared/fr-fr/banner",{"_path":466,"_dir":36,"_draft":6,"_partial":6,"_locale":7,"data":467,"_id":672,"_type":28,"title":673,"_source":30,"_file":674,"_stem":675,"_extension":33},"/shared/fr-fr/main-footer",{"text":468,"source":469,"edit":475,"contribute":480,"config":485,"items":490,"minimal":663},"Git est une marque déposée de Software Freedom Conservancy et notre utilisation de « GitLab » est sous licence",{"text":470,"config":471},"Afficher le code source de la page",{"href":472,"dataGaName":473,"dataGaLocation":474},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":476,"config":477},"Modifier cette page",{"href":478,"dataGaName":479,"dataGaLocation":474},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":481,"config":482},"Veuillez contribuer",{"href":483,"dataGaName":484,"dataGaLocation":474},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":486,"facebook":487,"youtube":488,"linkedin":489},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[491,514,568,600,634],{"title":60,"links":492,"subMenu":497},[493],{"text":494,"config":495},"Plateforme DevSecOps",{"href":69,"dataGaName":496,"dataGaLocation":474},"devsecops platform",[498],{"title":202,"links":499},[500,504,509],{"text":501,"config":502},"Voir les forfaits",{"href":204,"dataGaName":503,"dataGaLocation":474},"view plans",{"text":505,"config":506},"Pourquoi choisir GitLab Premium ?",{"href":507,"dataGaName":508,"dataGaLocation":474},"/fr-fr/pricing/premium/","why premium",{"text":510,"config":511},"Pourquoi choisir GitLab Ultimate ?",{"href":512,"dataGaName":513,"dataGaLocation":474},"/fr-fr/pricing/ultimate/","why ultimate",{"title":515,"links":516},"Solutions",[517,522,525,527,532,537,541,544,547,552,554,556,558,563],{"text":518,"config":519},"Transformation digitale",{"href":520,"dataGaName":521,"dataGaLocation":474},"/fr-fr/topics/digital-transformation/","digital transformation",{"text":523,"config":524},"Sécurité et conformité",{"href":144,"dataGaName":151,"dataGaLocation":474},{"text":136,"config":526},{"href":119,"dataGaName":120,"dataGaLocation":474},{"text":528,"config":529},"Développement agile",{"href":530,"dataGaName":531,"dataGaLocation":474},"/fr-fr/solutions/agile-delivery/","agile delivery",{"text":533,"config":534},"Transformation cloud",{"href":535,"dataGaName":536,"dataGaLocation":474},"/fr-fr/topics/cloud-native/","cloud transformation",{"text":538,"config":539},"SCM",{"href":133,"dataGaName":540,"dataGaLocation":474},"source code management",{"text":123,"config":542},{"href":125,"dataGaName":543,"dataGaLocation":474},"continuous integration & delivery",{"text":174,"config":545},{"href":176,"dataGaName":546,"dataGaLocation":474},"value stream management",{"text":548,"config":549},"GitOps",{"href":550,"dataGaName":551,"dataGaLocation":474},"/fr-fr/solutions/gitops/","gitops",{"text":187,"config":553},{"href":189,"dataGaName":190,"dataGaLocation":474},{"text":192,"config":555},{"href":194,"dataGaName":195,"dataGaLocation":474},{"text":197,"config":557},{"href":199,"dataGaName":200,"dataGaLocation":474},{"text":559,"config":560},"Formation",{"href":561,"dataGaName":562,"dataGaLocation":474},"/fr-fr/solutions/education/","education",{"text":564,"config":565},"Services financiers",{"href":566,"dataGaName":567,"dataGaLocation":474},"/fr-fr/solutions/finance/","financial services",{"title":207,"links":569},[570,572,574,576,579,581,584,586,588,590,592,594,596,598],{"text":219,"config":571},{"href":221,"dataGaName":222,"dataGaLocation":474},{"text":224,"config":573},{"href":226,"dataGaName":227,"dataGaLocation":474},{"text":229,"config":575},{"href":231,"dataGaName":232,"dataGaLocation":474},{"text":234,"config":577},{"href":236,"dataGaName":578,"dataGaLocation":474},"docs",{"text":257,"config":580},{"href":259,"dataGaName":5},{"text":582,"config":583},"Histoires de réussite client",{"href":254,"dataGaLocation":474},{"text":252,"config":585},{"href":254,"dataGaName":255,"dataGaLocation":474},{"text":261,"config":587},{"href":263,"dataGaName":264,"dataGaLocation":474},{"text":274,"config":589},{"href":276,"dataGaName":277,"dataGaLocation":474},{"text":266,"config":591},{"href":268,"dataGaName":269,"dataGaLocation":474},{"text":279,"config":593},{"href":281,"dataGaName":23,"dataGaLocation":474},{"text":283,"config":595},{"href":285,"dataGaName":286,"dataGaLocation":474},{"text":288,"config":597},{"href":290,"dataGaName":291,"dataGaLocation":474},{"text":293,"config":599},{"href":295,"dataGaName":296,"dataGaLocation":474},{"title":311,"links":601},[602,604,606,608,610,612,614,618,623,625,627,629],{"text":318,"config":603},{"href":320,"dataGaName":313,"dataGaLocation":474},{"text":323,"config":605},{"href":325,"dataGaName":326,"dataGaLocation":474},{"text":331,"config":607},{"href":333,"dataGaName":334,"dataGaLocation":474},{"text":336,"config":609},{"href":338,"dataGaName":339,"dataGaLocation":474},{"text":341,"config":611},{"href":343,"dataGaName":344,"dataGaLocation":474},{"text":346,"config":613},{"href":348,"dataGaName":349,"dataGaLocation":474},{"text":615,"config":616},"Sustainability",{"href":617,"dataGaName":615,"dataGaLocation":474},"/sustainability/",{"text":619,"config":620},"Diversité, inclusion et appartenance (DIB)",{"href":621,"dataGaName":622,"dataGaLocation":474},"/fr-fr/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":351,"config":624},{"href":353,"dataGaName":354,"dataGaLocation":474},{"text":361,"config":626},{"href":363,"dataGaName":364,"dataGaLocation":474},{"text":366,"config":628},{"href":368,"dataGaName":369,"dataGaLocation":474},{"text":630,"config":631},"Déclaration de transparence sur l'esclavage moderne",{"href":632,"dataGaName":633,"dataGaLocation":474},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"title":371,"links":635},[636,639,641,643,648,653,658],{"text":637,"config":638},"Échanger avec un expert",{"href":51,"dataGaName":52,"dataGaLocation":474},{"text":380,"config":640},{"href":382,"dataGaName":383,"dataGaLocation":474},{"text":385,"config":642},{"href":387,"dataGaName":388,"dataGaLocation":474},{"text":644,"config":645},"Statut",{"href":646,"dataGaName":647,"dataGaLocation":474},"https://status.gitlab.com/","status",{"text":649,"config":650},"Conditions d'utilisation",{"href":651,"dataGaName":652},"/terms/","terms of use",{"text":654,"config":655},"Déclaration de confidentialité",{"href":656,"dataGaName":657,"dataGaLocation":474},"/fr-fr/privacy/","privacy statement",{"text":659,"config":660},"Préférences en matière de cookies",{"dataGaName":661,"dataGaLocation":474,"id":662,"isOneTrustButton":105},"cookie preferences","ot-sdk-btn",{"items":664},[665,667,670],{"text":649,"config":666},{"href":651,"dataGaName":652,"dataGaLocation":474},{"text":668,"config":669},"Politique de confidentialité",{"href":656,"dataGaName":657,"dataGaLocation":474},{"text":659,"config":671},{"dataGaName":661,"dataGaLocation":474,"id":662,"isOneTrustButton":105},"content:shared:fr-fr:main-footer.yml","Main Footer","shared/fr-fr/main-footer.yml","shared/fr-fr/main-footer",[677],{"_path":678,"_dir":679,"_draft":6,"_partial":6,"_locale":7,"content":680,"config":684,"_id":686,"_type":28,"title":16,"_source":30,"_file":687,"_stem":688,"_extension":33},"/en-us/blog/authors/karthik-nayak","authors",{"name":16,"config":681},{"headshot":682,"ctfId":683},"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",{"template":685},"BlogAuthor","content:en-us:blog:authors:karthik-nayak.yml","en-us/blog/authors/karthik-nayak.yml","en-us/blog/authors/karthik-nayak",{"_path":690,"_dir":36,"_draft":6,"_partial":6,"_locale":7,"header":691,"eyebrow":692,"blurb":693,"button":694,"secondaryButton":698,"_id":700,"_type":28,"title":701,"_source":30,"_file":702,"_stem":703,"_extension":33},"/shared/fr-fr/next-steps","Commencez à livrer des logiciels de meilleurs qualité plus rapidement","Plus de 50 % des entreprises du classement Fortune 100 font confiance à GitLab","Découvrez comment la plateforme DevSecOps intelligente\n\n\npeut aider votre équipe.\n",{"text":44,"config":695},{"href":696,"dataGaName":47,"dataGaLocation":697},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":49,"config":699},{"href":51,"dataGaName":52,"dataGaLocation":697},"content:shared:fr-fr:next-steps.yml","Next Steps","shared/fr-fr/next-steps.yml","shared/fr-fr/next-steps",{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"seo":705,"content":707,"config":710,"_id":27,"_type":28,"title":29,"_source":30,"_file":31,"_stem":32,"_extension":33},{"config":706,"title":10,"ogTitle":10,"description":11,"ogDescription":11,"ogImage":12},{"noIndex":6},{"title":10,"description":14,"authors":708,"heroImage":12,"date":17,"body":18,"category":19,"tags":709},[16],[21,22,23],{"featured":6,"template":25,"slug":26},1760469832432]