[{"data":1,"prerenderedAt":706},["ShallowReactive",2],{"/fr-fr/blog/whats-new-in-git-2-45-0/":3,"navigation-fr-fr":35,"banner-fr-fr":454,"footer-fr-fr":466,"Patrick Steinhardt":678,"next-steps-fr-fr":691},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"seo":8,"content":16,"config":25,"_id":28,"_type":29,"title":30,"_source":31,"_file":32,"_stem":33,"_extension":34},"/fr-fr/blog/whats-new-in-git-2-45-0","blog",false,"",{"title":9,"description":10,"ogTitle":9,"ogDescription":10,"noIndex":6,"ogImage":11,"ogUrl":12,"ogSiteName":13,"ogType":14,"canonicalUrls":12,"schema":15},"Nouveautés de Git 2.45.0","Découvrez les contributions de l'équipe Git de GitLab et de la communauté Git au sens large à la dernière version de Git.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659507/Blog/Hero%20Images/AdobeStock_623844718.jpg","https://about.gitlab.com/blog/whats-new-in-git-2-45-0","https://about.gitlab.com","article","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Nouveautés de Git 2.45.0\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Patrick Steinhardt\"}],\n        \"datePublished\": \"2024-04-30\",\n      }",{"title":9,"description":10,"authors":17,"heroImage":11,"date":19,"body":20,"category":21,"tags":22},[18],"Patrick Steinhardt","2024-04-30","Le projet Git a récemment publié la [version 2.45.0 de Git](https://lore.kernel.org/git/xmqq8r0ww0sj.fsf@gitster.g/). Jetons un coup d'œil aux points forts de cette version, comprenant des contributions de l'équipe Git de GitLab et de la communauté Git au sens large.\n\n## Reftables : un nouveau backend pour le stockage des références\n\nChaque dépôt Git doit suivre deux structures de données de base :\n- Le graphique qui stocke les données de vos fichiers, la structure de répertoires, les messages de commit et les tags.\n- Les références qui sont des pointeurs dans ce graphique pour associer des objets spécifiques à un nom plus accessible. Par exemple, une branche est une référence dont le nom commence par un préfixe `refs/heads/`. \n\nLe format sur disque de stockage des références dans un dépôt est resté largement inchangé depuis la création de Git et est appelé le format « fichiers ». Chaque fois que vous créez une référence, Git crée une « référence libre » qui correspond à un fichier ordinaire dans votre dépôt Git dont le chemin d'accès correspond au nom de la référence.\n\nPar exemple : \n\n```shell\n$ git init .\nInitialized empty Git repository in /tmp/repo/.git/\n\n# Updating a reference will cause Git to create a \"loose ref\". This loose ref is\n# a simple file which contains the object ID of the commit.\n$ git commit --allow-empty --message \"Initial commit\"\n[main (root-commit) c70f266] Initial commit\n$ cat .git/refs/heads/main\nc70f26689975782739ef9666af079535b12b5946\n\n# Creating a second reference will end up with a second loose ref.\n$ git branch feature\n$ cat .git/refs/heads/feature\nc70f26689975782739ef9666af079535b12b5946\n$ tree .git/refs\n.git/refs/\n├── heads\n│   ├── feature\n│   └── main\n└── tags\n\n3 directories, 2 files\n```\nIl arrive que Git empaquette ces références dans un format de fichier « empaqueté » pour que la recherche de références soit plus efficace. Par exemple :\n\n```shell\n# Packing references will create \"packed\" references, which are a sorted list of\n# references. The loose reference does not exist anymore.\n$ git pack-refs --all\n$ cat .git/refs/heads/main\ncat: .git/refs/heads/main: No such file or directory\n$ cat .git/packed-refs\n# pack-refs with: peeled fully-peeled sorted\nc70f26689975782739ef9666af079535b12b5946 refs/heads/feature\nc70f26689975782739ef9666af079535b12b5946 refs/heads/main\n```\n\nBien qu'il soit relativement simple, ce format comporte certaines limites :\n\n- Dans les mono repos contenant de nombreuses références, nous avons commencé à nous heurter à des problèmes d'évolutivité. La suppression des références est particulièrement inefficace car l'ensemble du fichier « packed-refs » doit être réécrit pour supprimer la référence supprimée. Dans nos plus grands dépôts, cela peut entraîner la réécriture de plusieurs gigaoctets de données à chaque suppression de référence. \n- Il est impossible d'effectuer une lecture atomique des références sans bloquer les rédacteurs simultanés, car il est nécessaire de lire plusieurs fichiers pour comprendre toutes les références.\n- Il est impossible d'effectuer une écriture atomique, car elle nécessite la création ou la mise à jour de plusieurs fichiers, ce qui est impossible en une seule étape. \n- La maintenance des références ne s'adapte pas bien, parce que vous devez réécrire le fichier « packed-refs » entièrement. \n- Étant donné que les références libres utilisent le chemin d'accès du système de fichiers comme nom, elles sont soumises à un comportement spécifique au système de fichiers. Par exemple, les systèmes de fichiers insensibles à la casse ne peuvent pas stocker des références pour lesquelles seule la casse diffère.\n\nPour résoudre ces problèmes, Git v2.45.0 introduit un nouveau backend « reftable », qui utilise un nouveau format binaire pour stocker les références. Ce nouveau backend est en développement depuis très longtemps. Il a été initialement proposé par [Shawn Pearce](https://sfconservancy.org/blog/2018/jan/30/shawn-pearce/) en juillet 2017 et a été mis en place pour la première fois dans [JGit](https://www.eclipse.org/jgit/ \"JGit\"). Il est largement utilisé par le [projet Gerrit](https://www.gerritcodereview.com/ \"Projet Gerrit\"). En 2021, [Han-Wen Nienhuys](https://hanwen.home.xs4all.nl/) a intégré la bibliothèque dans Git, ce qui lui permet de lire et d'écrire le format reftable. \n\nLe nouveau backend « reftable » que nous avons introduit dans Git v2.45.0 rassemble enfin la bibliothèque reftable et Git de sorte qu'il est possible d'utiliser le nouveau format comme backend de stockage dans vos dépôts Git. \n\nEn supposant que vous exécutez au moins la version 2.45.0 de Git, vous pouvez créer de nouveaux dépôts au format « reftable » en basculant `--ref-format=reftable` sur `git-init(1)` ou `git-clone(1)`. \n\nPar exemple :\n\n```shell\n$ git init --ref-format=reftable .\nInitialized empty Git repository in /tmp/repo/.git/\n$ git rev-parse --show-ref-format\nreftable\n$ find -type f .git/reftable/\n.git/reftable/0x000000000001-0x000000000001-01b5e47d.ref\n.git/reftable/tables.list\n\n$ git commit --allow-empty --message \"Initial commit\"\n$ find -type f .git/reftable/\n.git/reftable/0x000000000001-0x000000000001-01b5e47d.ref\n.git/reftable/0x000000000002-0x000000000002-87006b81.ref\n.git/reftable/tables.list\n```\n\nComme vous pouvez le constater, les références sont maintenant stockées dans `.git/reftable` au lieu du répertoire `.git/refs.` Les références et les journaux de référence (ou « reflogs ») sont stockés dans des « tables », qui sont les fichiers se terminant par `.ref`, tandis que le fichier `tables.list` contient la liste de toutes les tables actuellement actives. \n\nLe backend « reftable » est censé remplacer le backend « fichiers ». Par conséquent, du point de vue de l'utilisateur, tout devrait fonctionner de la même manière. \n\nCe projet a été mené par [Patrick Steinhardt](https://gitlab.com/pks-gitlab \"Profil GitLab de Patrick Steinhardt\"). Le mérite revient également à Shawn Pearce en tant qu'inventeur original du format et à Han-Wen Nienhuys en tant qu'auteur de la bibliothèque reftable.\n\n## De meilleurs outils pour les références \n\nAlors que le format « reftable » résout de nombreux problèmes existants, il en introduit également de nouveaux. L'un des problèmes les plus importants étant l'accessibilité des données qu'il contient. \n\nAvec le backend « fichiers », vous pouvez, dans le pire des cas, utiliser vos outils Unix habituels pour inspecter l'état des références. Les références « empaquetées » et « libres » contiennent toutes deux des données lisibles par l'homme et faciles à interpréter. Ce qui est différent avec le format « reftable », qui est un format binaire. Par conséquent, Git doit fournir tous les outils nécessaires pour extraire les données du nouveau format « reftable ».\n\n### Répertorier toutes les références\n\nLe premier problème que nous avons rencontré est qu'il est fondamentalement impossible de connaître toutes les références connues d'un dépôt. Cela peut-être quelque peu déroutant au début : comment est-il possible de créer et modifier des références via Git, qui ne peut pas énumérer de manière exhaustive toutes les références dont il a connaissance ?\n\nEn effet, le backend « fichiers » en est incapable. Alors qu'il peut répertorier de manière évidente toutes les références « habituelles » qui commencent par le préfixe `refs/`, Git utilise également des [pseudo refs](https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefpseudorefapseudoref \"Les pseudo refs de Git\"). Ces fichiers se trouvent directement à la racine du répertoire Git et seraient des fichiers comme, par exemple, `.git/MERGE_HEAD`. Le problème ici est que ces pseudo refs se trouvent à côté d'autres fichiers que Git stocke comme, par exemple, `.git/config`.\n\nAlors que certaines pseudo refs sont bien connues et donc faciles à identifier, il n'y a en théorie aucune limite aux références que Git peut écrire. Rien ne vous empêche de créer une référence appelée « foobar ».\n\nPar exemple : \n\n```shell\n$ git update-ref foobar HEAD\n$ cat .git/foobar\nf32633d4d7da32ccc3827e90ecdc10570927c77d\n```\n\nMaintenant, le problème du backend « fichiers » est qu'il ne peut énumérer les références qu'en parcourant les répertoires. Donc, pour déterminer si `.git/foobar` est effectivement une référence, Git devrait ouvrir le fichier et vérifier s'il est formaté ou non comme une référence. \n\nD'autre part, le backend « reftable » connaît de manière évidente toutes les références qu'il contient : elles sont encodées dans ses structures de données, il lui suffit donc de décoder ces références et de les renvoyer. Mais en raison des restrictions du backend « fichiers », il n'existe aucun outil qui vous permettrait de connaître toutes les références existantes. \n\nPour résoudre le problème, nous avons intégré un nouvel élément à `git-for-each-ref(1)` appelé `--include-root-refs`, ce qui lui permettra de répertorier également toutes les références qui existent à la racine de la hiérarchie de nommage des références.\n\nPar exemple : \n\n```shell\n$ git for-each-ref --include-root-refs\nf32633d4d7da32ccc3827e90ecdc10570927c77d commit    HEAD\nf32633d4d7da32ccc3827e90ecdc10570927c77d commit    MERGE_HEAD\nf32633d4d7da32ccc3827e90ecdc10570927c77d commit    refs/heads/main\n```\n\nPour le backend « fichiers », ce nouvel élément est géré au mieux et nous y incluons toutes les références qui correspondent à un nom de pseudo ref connu. Pour le backend « reftable », nous pouvons simplement lister toutes les références qui lui sont connues. \n\nCe projet a été mené par [Karthik Nayak](https://gitlab.com/knayakgl \"Profil GitLab de Karthik Nayak\").\n\n### Répertorier tous les reflogs \n\nChaque fois que vous mettez à jour des branches, Git, par défaut, suit ces mises à jour de branche dans un reflog. Ce reflog vous permet de rétablir les modifications apportées à cette branche au cas où vous auriez effectué une modification involontaire. \n\nAvec le backend « fichiers », ces journaux sont stockés dans votre répertoire `.git/logs` :\n\n```shell\n$ find -type f .git/logs/\n.git/logs/HEAD\n.git/logs/refs/heads/main\n```\n\nLister les fichiers dans ce répertoire est le seul moyen pour vous de savoir quelles références ont un reflog en premier lieu. C'est un problème pour le backend « reftable », qui stocke ces journaux avec les références. Par conséquent, il n'existe plus aucun moyen pour vous de savoir quels reflogs existent dans le dépôt lorsque vous utilisez le format « reftable ». \n\nIl ne s'agit pas d'une faille imputable au format « reftable », mais d'une omission dans les outils fournis par Git. Pour y remédier, nous avons introduit une nouvelle sous-commande `list` à `git-reflog(1)` permettant de répertorier tous les reflogs existants :\n\n```shell\n$ git reflog list\nHEAD\nrefs/heads/main\n```\n\nCe projet a été mené par [Patrick Steinhardt](https://gitlab.com/pks-gitlab \"Profil GitLab de Patrick Steinhardt\").\n\n### Un empaquetage plus efficace des références \n\nPour rester efficaces, les dépôts Git nécessitent une maintenance régulière. Habituellement, cette maintenance est déclenchée par diverses commandes Git qui écrivent des données dans les dépôts Git en exécutant `git maintenance run --auto`. Cette commande optimise uniquement les structures de données qui doivent être optimisées afin que Git ne gaspille pas de ressources de calcul.\n\nUne structure de données optimisée par la maintenance de Git constitue la base de données de référence, obtenue en exécutant `git pack-refs --all`. Pour le backend « fichiers », cela signifie que toutes les références sont à nouveau regroupées dans le fichier « packed-refs » et que les références libres sont supprimées, tandis que pour le backend « reftable », toutes les tables sont fusionnées en une seule table. \n\nPour le backend « fichiers », nous ne pouvons pas faire beaucoup mieux. Étant donné que nous devons de toute façon réécrire l'ensemble du fichier « packed-refs », il est logique que nous souhaitions regrouper toutes les références libres. \n\nMais pour le backend « reftable », cette démarche est sous-optimale, car le backend « reftable » s'optimise automatiquement. Chaque fois que Git ajoute une nouvelle table au backend « reftable », il effectue un compactage automatique et fusionne les tables si nécessaire. Par conséquent, la base de données de référence doit toujours être dans un état optimisé et la fusion de toutes les tables s'avère donc un effort inutile.\n\nDans la version 2.45.0 de Git, nous avons donc introduit un nouveau mode `git pack-refs --auto`, qui demande au backend de référence de s'optimiser si nécessaire. Alors que le backend « fichiers » continue de fonctionner de la même manière même lorsque l'indicateur `--auto` est défini, le backend « reftable » utilise les mêmes heuristiques que celles qu'il utilise pour son auto-compactage. Dans la pratique, cela ne devrait pas poser de problème dans la plupart des cas. \n\nDe plus, `git maintenance run --auto` a été adapté pour transmettre l'indicateur `-tauto` à `git-pack-refs(1)` pour utiliser ce nouveau mode par défaut. \n\nCe projet a été mené par [Patrick Steinhardt](https://gitlab.com/pks-gitlab \"Profil GitLab de Patrick Steinhardt\").\n\n## En conclusion \n\nCet article de blog met l'accent sur le [nouveau backend « reftable »](https://about.gitlab.com/fr-fr/blog/a-beginners-guide-to-the-git-reftable-format/ \"Format reftable de Git \"), qui nous permet de mieux évoluer dans les dépôts volumineux comprenant de multiples références, ainsi que sur les outils connexes que nous avons introduits en parallèle pour le faire fonctionner correctement. Cette version de Git par la communauté Git, au sens large, a bien entendu introduit diverses améliorations de performances, des corrections de bugs et des fonctionnalités plus petites. Vous pouvez en apprendre davantage à ce sujet dans [l'annonce officielle du projet Git](https://lore.kernel.org/git/xmqq8r0ww0sj.fsf@gitster.g/ \"Annonce officielle du projet Git\").","open-source",[23,24],"git","community",{"slug":26,"featured":6,"template":27},"whats-new-in-git-2-45-0","BlogPost","content:fr-fr:blog:whats-new-in-git-2-45-0.yml","yaml","Whats New In Git 2 45 0","content","fr-fr/blog/whats-new-in-git-2-45-0.yml","fr-fr/blog/whats-new-in-git-2-45-0","yml",{"_path":36,"_dir":37,"_draft":6,"_partial":6,"_locale":7,"data":38,"_id":450,"_type":29,"title":451,"_source":31,"_file":452,"_stem":453,"_extension":34},"/shared/fr-fr/main-navigation","fr-fr",{"logo":39,"freeTrial":44,"sales":49,"login":54,"items":59,"search":391,"minimal":427,"duo":441},{"config":40},{"href":41,"dataGaName":42,"dataGaLocation":43},"/fr-fr/","gitlab logo","header",{"text":45,"config":46},"Commencer un essai gratuit",{"href":47,"dataGaName":48,"dataGaLocation":43},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":50,"config":51},"Contacter l'équipe commerciale",{"href":52,"dataGaName":53,"dataGaLocation":43},"/fr-fr/sales/","sales",{"text":55,"config":56},"Connexion",{"href":57,"dataGaName":58,"dataGaLocation":43},"https://gitlab.com/users/sign_in/","sign in",[60,104,203,208,312,372],{"text":61,"config":62,"cards":64,"footer":87},"Plateforme",{"dataNavLevelOne":63},"platform",[65,71,79],{"title":61,"description":66,"link":67},"La plateforme DevSecOps alimentée par l'IA la plus complète",{"text":68,"config":69},"Découvrir notre plateforme",{"href":70,"dataGaName":63,"dataGaLocation":43},"/fr-fr/platform/",{"title":72,"description":73,"link":74},"GitLab Duo (IA)","Créez des logiciels plus rapidement en tirant parti de l'IA à chaque étape du développement",{"text":75,"config":76},"Découvrez GitLab Duo",{"href":77,"dataGaName":78,"dataGaLocation":43},"/fr-fr/gitlab-duo/","gitlab duo ai",{"title":80,"description":81,"link":82},"Choisir GitLab","10 raisons pour lesquelles les entreprises choisissent GitLab",{"text":83,"config":84},"En savoir plus",{"href":85,"dataGaName":86,"dataGaLocation":43},"/fr-fr/why-gitlab/","why gitlab",{"title":88,"items":89},"Démarrer avec",[90,95,100],{"text":91,"config":92},"Ingénierie de plateforme",{"href":93,"dataGaName":94,"dataGaLocation":43},"/fr-fr/solutions/platform-engineering/","platform engineering",{"text":96,"config":97},"Expérience développeur",{"href":98,"dataGaName":99,"dataGaLocation":43},"/fr-fr/developer-experience/","Developer experience",{"text":101,"config":102},"MLOps",{"href":103,"dataGaName":101,"dataGaLocation":43},"/fr-fr/topics/devops/the-role-of-ai-in-devops/",{"text":105,"left":106,"config":107,"link":109,"lists":113,"footer":185},"Produit",true,{"dataNavLevelOne":108},"solutions",{"text":110,"config":111},"Voir toutes les solutions",{"href":112,"dataGaName":108,"dataGaLocation":43},"/fr-fr/solutions/",[114,140,163],{"title":115,"description":116,"link":117,"items":122},"Automatisation","CI/CD et automatisation pour accélérer le déploiement",{"config":118},{"icon":119,"href":120,"dataGaName":121,"dataGaLocation":43},"AutomatedCodeAlt","/fr-fr/solutions/delivery-automation/","automated software delivery",[123,127,131,136],{"text":124,"config":125},"CI/CD",{"href":126,"dataGaLocation":43,"dataGaName":124},"/fr-fr/solutions/continuous-integration/",{"text":128,"config":129},"Développement assisté par l'IA",{"href":77,"dataGaLocation":43,"dataGaName":130},"AI assisted development",{"text":132,"config":133},"Gestion du code source",{"href":134,"dataGaLocation":43,"dataGaName":135},"/fr-fr/solutions/source-code-management/","Source Code Management",{"text":137,"config":138},"Livraison de logiciels automatisée",{"href":120,"dataGaLocation":43,"dataGaName":139},"Automated software delivery",{"title":141,"description":142,"link":143,"items":148},"Securité","Livrez du code plus rapidement sans compromettre la sécurité",{"config":144},{"href":145,"dataGaName":146,"dataGaLocation":43,"icon":147},"/fr-fr/solutions/security-compliance/","security and compliance","ShieldCheckLight",[149,153,158],{"text":150,"config":151},"Sécurité et conformité",{"href":145,"dataGaLocation":43,"dataGaName":152},"Security & Compliance",{"text":154,"config":155},"Sécurité de la chaîne d'approvisionnement logicielle",{"href":156,"dataGaLocation":43,"dataGaName":157},"/fr-fr/solutions/supply-chain/","Software supply chain security",{"text":159,"config":160},"Conformité et gouvernance",{"href":161,"dataGaLocation":43,"dataGaName":162},"/fr-fr/solutions/continuous-software-compliance/","Compliance and governance",{"title":164,"link":165,"items":170},"Mesures",{"config":166},{"icon":167,"href":168,"dataGaName":169,"dataGaLocation":43},"DigitalTransformation","/fr-fr/solutions/visibility-measurement/","visibility and measurement",[171,175,180],{"text":172,"config":173},"Visibilité et mesures",{"href":168,"dataGaLocation":43,"dataGaName":174},"Visibility and Measurement",{"text":176,"config":177},"Gestion de la chaîne de valeur",{"href":178,"dataGaLocation":43,"dataGaName":179},"/fr-fr/solutions/value-stream-management/","Value Stream Management",{"text":181,"config":182},"Données d'analyse et informations clés",{"href":183,"dataGaLocation":43,"dataGaName":184},"/fr-fr/solutions/analytics-and-insights/","Analytics and insights",{"title":186,"items":187},"GitLab pour",[188,193,198],{"text":189,"config":190},"Entreprises",{"href":191,"dataGaLocation":43,"dataGaName":192},"/fr-fr/enterprise/","enterprise",{"text":194,"config":195},"PME",{"href":196,"dataGaLocation":43,"dataGaName":197},"/fr-fr/small-business/","small business",{"text":199,"config":200},"Secteur public",{"href":201,"dataGaLocation":43,"dataGaName":202},"/fr-fr/solutions/public-sector/","public sector",{"text":204,"config":205},"Tarifs",{"href":206,"dataGaName":207,"dataGaLocation":43,"dataNavLevelOne":207},"/fr-fr/pricing/","pricing",{"text":209,"config":210,"link":212,"lists":216,"feature":299},"Ressources",{"dataNavLevelOne":211},"resources",{"text":213,"config":214},"Afficher toutes les ressources",{"href":215,"dataGaName":211,"dataGaLocation":43},"/fr-fr/resources/",[217,250,272],{"title":218,"items":219},"Premiers pas",[220,225,230,235,240,245],{"text":221,"config":222},"Installation",{"href":223,"dataGaName":224,"dataGaLocation":43},"/fr-fr/install/","install",{"text":226,"config":227},"Guides de démarrage rapide",{"href":228,"dataGaName":229,"dataGaLocation":43},"/fr-fr/get-started/","quick setup checklists",{"text":231,"config":232},"Apprentissage",{"href":233,"dataGaLocation":43,"dataGaName":234},"https://university.gitlab.com/","learn",{"text":236,"config":237},"Documentation sur le produit",{"href":238,"dataGaName":239,"dataGaLocation":43},"https://docs.gitlab.com/","product documentation",{"text":241,"config":242},"Vidéos sur les bonnes pratiques",{"href":243,"dataGaName":244,"dataGaLocation":43},"/fr-fr/getting-started-videos/","best practice videos",{"text":246,"config":247},"Intégrations",{"href":248,"dataGaName":249,"dataGaLocation":43},"/fr-fr/integrations/","integrations",{"title":251,"items":252},"Découvrir",[253,258,262,267],{"text":254,"config":255},"Histoires de succès client",{"href":256,"dataGaName":257,"dataGaLocation":43},"/fr-fr/customers/","customer success stories",{"text":259,"config":260},"Blog",{"href":261,"dataGaName":5,"dataGaLocation":43},"/fr-fr/blog/",{"text":263,"config":264},"Travail à distance",{"href":265,"dataGaName":266,"dataGaLocation":43},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"text":268,"config":269},"TeamOps",{"href":270,"dataGaName":271,"dataGaLocation":43},"/fr-fr/teamops/","teamops",{"title":273,"items":274},"Connecter",[275,280,284,289,294],{"text":276,"config":277},"Services GitLab",{"href":278,"dataGaName":279,"dataGaLocation":43},"/fr-fr/services/","services",{"text":281,"config":282},"Communauté",{"href":283,"dataGaName":24,"dataGaLocation":43},"/community/",{"text":285,"config":286},"Forum",{"href":287,"dataGaName":288,"dataGaLocation":43},"https://forum.gitlab.com/","forum",{"text":290,"config":291},"Événements",{"href":292,"dataGaName":293,"dataGaLocation":43},"/events/","events",{"text":295,"config":296},"Partenaires",{"href":297,"dataGaName":298,"dataGaLocation":43},"/fr-fr/partners/","partners",{"backgroundColor":300,"textColor":301,"text":302,"image":303,"link":307},"#2f2a6b","#fff","L'avenir du développement logiciel. Tendances et perspectives.",{"altText":304,"config":305},"carte promo The Source",{"src":306},"/images/navigation/the-source-promo-card.svg",{"text":308,"config":309},"Lire les articles les plus récents",{"href":310,"dataGaName":311,"dataGaLocation":43},"/fr-fr/the-source/","the source",{"text":313,"config":314,"lists":316},"Société",{"dataNavLevelOne":315},"company",[317],{"items":318},[319,324,330,332,337,342,347,352,357,362,367],{"text":320,"config":321},"À propos",{"href":322,"dataGaName":323,"dataGaLocation":43},"/fr-fr/company/","about",{"text":325,"config":326,"footerGa":329},"Emplois",{"href":327,"dataGaName":328,"dataGaLocation":43},"/jobs/","jobs",{"dataGaName":328},{"text":290,"config":331},{"href":292,"dataGaName":293,"dataGaLocation":43},{"text":333,"config":334},"Leadership",{"href":335,"dataGaName":336,"dataGaLocation":43},"/company/team/e-group/","leadership",{"text":338,"config":339},"Équipe",{"href":340,"dataGaName":341,"dataGaLocation":43},"/company/team/","team",{"text":343,"config":344},"Manuel",{"href":345,"dataGaName":346,"dataGaLocation":43},"https://handbook.gitlab.com/","handbook",{"text":348,"config":349},"Relations avec les investisseurs",{"href":350,"dataGaName":351,"dataGaLocation":43},"https://ir.gitlab.com/","investor relations",{"text":353,"config":354},"Centre de confiance",{"href":355,"dataGaName":356,"dataGaLocation":43},"/fr-fr/security/","trust center",{"text":358,"config":359},"Centre pour la transparence de l'IA",{"href":360,"dataGaName":361,"dataGaLocation":43},"/fr-fr/ai-transparency-center/","ai transparency center",{"text":363,"config":364},"Newsletter",{"href":365,"dataGaName":366,"dataGaLocation":43},"/company/contact/","newsletter",{"text":368,"config":369},"Presse",{"href":370,"dataGaName":371,"dataGaLocation":43},"/press/","press",{"text":373,"config":374,"lists":375},"Nous contacter",{"dataNavLevelOne":315},[376],{"items":377},[378,381,386],{"text":50,"config":379},{"href":52,"dataGaName":380,"dataGaLocation":43},"talk to sales",{"text":382,"config":383},"Aide",{"href":384,"dataGaName":385,"dataGaLocation":43},"/support/","get help",{"text":387,"config":388},"Portail clients GitLab",{"href":389,"dataGaName":390,"dataGaLocation":43},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":392,"login":393,"suggestions":400},"Fermer",{"text":394,"link":395},"Pour rechercher des dépôts et des projets, connectez-vous à",{"text":396,"config":397},"gitlab.com",{"href":57,"dataGaName":398,"dataGaLocation":399},"search login","search",{"text":401,"default":402},"Suggestions",[403,406,411,413,418,423],{"text":72,"config":404},{"href":77,"dataGaName":405,"dataGaLocation":399},"GitLab Duo (AI)",{"text":407,"config":408},"Suggestions de code (IA)",{"href":409,"dataGaName":410,"dataGaLocation":399},"/fr-fr/solutions/code-suggestions/","Code Suggestions (AI)",{"text":124,"config":412},{"href":126,"dataGaName":124,"dataGaLocation":399},{"text":414,"config":415},"GitLab sur AWS",{"href":416,"dataGaName":417,"dataGaLocation":399},"/fr-fr/partners/technology-partners/aws/","GitLab on AWS",{"text":419,"config":420},"GitLab sur Google Cloud ",{"href":421,"dataGaName":422,"dataGaLocation":399},"/fr-fr/partners/technology-partners/google-cloud-platform/","GitLab on Google Cloud",{"text":424,"config":425},"Pourquoi utiliser GitLab ?",{"href":85,"dataGaName":426,"dataGaLocation":399},"Why GitLab?",{"freeTrial":428,"mobileIcon":433,"desktopIcon":438},{"text":429,"config":430},"Commencer votre essai gratuit",{"href":431,"dataGaName":48,"dataGaLocation":432},"https://gitlab.com/-/trials/new/","nav",{"altText":434,"config":435},"Icône GitLab",{"src":436,"dataGaName":437,"dataGaLocation":432},"/images/brand/gitlab-logo-tanuki.svg","gitlab icon",{"altText":434,"config":439},{"src":440,"dataGaName":437,"dataGaLocation":432},"/images/brand/gitlab-logo-type.svg",{"freeTrial":442,"mobileIcon":446,"desktopIcon":448},{"text":443,"config":444},"En savoir plus sur GitLab Duo",{"href":77,"dataGaName":445,"dataGaLocation":432},"gitlab duo",{"altText":434,"config":447},{"src":436,"dataGaName":437,"dataGaLocation":432},{"altText":434,"config":449},{"src":440,"dataGaName":437,"dataGaLocation":432},"content:shared:fr-fr:main-navigation.yml","Main Navigation","shared/fr-fr/main-navigation.yml","shared/fr-fr/main-navigation",{"_path":455,"_dir":37,"_draft":6,"_partial":6,"_locale":7,"title":456,"button":457,"config":461,"_id":463,"_type":29,"_source":31,"_file":464,"_stem":465,"_extension":34},"/shared/fr-fr/banner","GitLab Duo Agent Platform est maintenant disponible en version bêta publique !",{"text":83,"config":458},{"href":459,"dataGaName":460,"dataGaLocation":43},"/gitlab-duo/agent-platform/","duo banner",{"layout":462},"release","content:shared:fr-fr:banner.yml","shared/fr-fr/banner.yml","shared/fr-fr/banner",{"_path":467,"_dir":37,"_draft":6,"_partial":6,"_locale":7,"data":468,"_id":674,"_type":29,"title":675,"_source":31,"_file":676,"_stem":677,"_extension":34},"/shared/fr-fr/main-footer",{"text":469,"source":470,"edit":476,"contribute":481,"config":486,"items":491,"minimal":665},"Git est une marque déposée de Software Freedom Conservancy et notre utilisation de « GitLab » est sous licence",{"text":471,"config":472},"Afficher le code source de la page",{"href":473,"dataGaName":474,"dataGaLocation":475},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":477,"config":478},"Modifier cette page",{"href":479,"dataGaName":480,"dataGaLocation":475},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":482,"config":483},"Veuillez contribuer",{"href":484,"dataGaName":485,"dataGaLocation":475},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":487,"facebook":488,"youtube":489,"linkedin":490},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[492,515,569,602,636],{"title":61,"links":493,"subMenu":498},[494],{"text":495,"config":496},"Plateforme DevSecOps",{"href":70,"dataGaName":497,"dataGaLocation":475},"devsecops platform",[499],{"title":204,"links":500},[501,505,510],{"text":502,"config":503},"Voir les forfaits",{"href":206,"dataGaName":504,"dataGaLocation":475},"view plans",{"text":506,"config":507},"Pourquoi choisir GitLab Premium ?",{"href":508,"dataGaName":509,"dataGaLocation":475},"/fr-fr/pricing/premium/","why premium",{"text":511,"config":512},"Pourquoi choisir GitLab Ultimate ?",{"href":513,"dataGaName":514,"dataGaLocation":475},"/fr-fr/pricing/ultimate/","why ultimate",{"title":516,"links":517},"Solutions",[518,523,526,528,533,538,542,545,548,553,555,557,559,564],{"text":519,"config":520},"Transformation digitale",{"href":521,"dataGaName":522,"dataGaLocation":475},"/fr-fr/topics/digital-transformation/","digital transformation",{"text":150,"config":524},{"href":145,"dataGaName":525,"dataGaLocation":475},"security & compliance",{"text":137,"config":527},{"href":120,"dataGaName":121,"dataGaLocation":475},{"text":529,"config":530},"Développement agile",{"href":531,"dataGaName":532,"dataGaLocation":475},"/fr-fr/solutions/agile-delivery/","agile delivery",{"text":534,"config":535},"Transformation cloud",{"href":536,"dataGaName":537,"dataGaLocation":475},"/fr-fr/topics/cloud-native/","cloud transformation",{"text":539,"config":540},"SCM",{"href":134,"dataGaName":541,"dataGaLocation":475},"source code management",{"text":124,"config":543},{"href":126,"dataGaName":544,"dataGaLocation":475},"continuous integration & delivery",{"text":176,"config":546},{"href":178,"dataGaName":547,"dataGaLocation":475},"value stream management",{"text":549,"config":550},"GitOps",{"href":551,"dataGaName":552,"dataGaLocation":475},"/fr-fr/solutions/gitops/","gitops",{"text":189,"config":554},{"href":191,"dataGaName":192,"dataGaLocation":475},{"text":194,"config":556},{"href":196,"dataGaName":197,"dataGaLocation":475},{"text":199,"config":558},{"href":201,"dataGaName":202,"dataGaLocation":475},{"text":560,"config":561},"Formation",{"href":562,"dataGaName":563,"dataGaLocation":475},"/fr-fr/solutions/education/","education",{"text":565,"config":566},"Services financiers",{"href":567,"dataGaName":568,"dataGaLocation":475},"/fr-fr/solutions/finance/","financial services",{"title":209,"links":570},[571,573,575,577,580,582,586,588,590,592,594,596,598,600],{"text":221,"config":572},{"href":223,"dataGaName":224,"dataGaLocation":475},{"text":226,"config":574},{"href":228,"dataGaName":229,"dataGaLocation":475},{"text":231,"config":576},{"href":233,"dataGaName":234,"dataGaLocation":475},{"text":236,"config":578},{"href":238,"dataGaName":579,"dataGaLocation":475},"docs",{"text":259,"config":581},{"href":261,"dataGaName":5},{"text":583,"config":584},"Histoires de réussite client",{"href":585,"dataGaLocation":475},"/customers/",{"text":254,"config":587},{"href":256,"dataGaName":257,"dataGaLocation":475},{"text":263,"config":589},{"href":265,"dataGaName":266,"dataGaLocation":475},{"text":276,"config":591},{"href":278,"dataGaName":279,"dataGaLocation":475},{"text":268,"config":593},{"href":270,"dataGaName":271,"dataGaLocation":475},{"text":281,"config":595},{"href":283,"dataGaName":24,"dataGaLocation":475},{"text":285,"config":597},{"href":287,"dataGaName":288,"dataGaLocation":475},{"text":290,"config":599},{"href":292,"dataGaName":293,"dataGaLocation":475},{"text":295,"config":601},{"href":297,"dataGaName":298,"dataGaLocation":475},{"title":313,"links":603},[604,606,608,610,612,614,616,620,625,627,629,631],{"text":320,"config":605},{"href":322,"dataGaName":315,"dataGaLocation":475},{"text":325,"config":607},{"href":327,"dataGaName":328,"dataGaLocation":475},{"text":333,"config":609},{"href":335,"dataGaName":336,"dataGaLocation":475},{"text":338,"config":611},{"href":340,"dataGaName":341,"dataGaLocation":475},{"text":343,"config":613},{"href":345,"dataGaName":346,"dataGaLocation":475},{"text":348,"config":615},{"href":350,"dataGaName":351,"dataGaLocation":475},{"text":617,"config":618},"Sustainability",{"href":619,"dataGaName":617,"dataGaLocation":475},"/sustainability/",{"text":621,"config":622},"Diversité, inclusion et appartenance (DIB)",{"href":623,"dataGaName":624,"dataGaLocation":475},"/fr-fr/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":353,"config":626},{"href":355,"dataGaName":356,"dataGaLocation":475},{"text":363,"config":628},{"href":365,"dataGaName":366,"dataGaLocation":475},{"text":368,"config":630},{"href":370,"dataGaName":371,"dataGaLocation":475},{"text":632,"config":633},"Déclaration de transparence sur l'esclavage moderne",{"href":634,"dataGaName":635,"dataGaLocation":475},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"title":373,"links":637},[638,641,643,645,650,655,660],{"text":639,"config":640},"Échanger avec un expert",{"href":52,"dataGaName":53,"dataGaLocation":475},{"text":382,"config":642},{"href":384,"dataGaName":385,"dataGaLocation":475},{"text":387,"config":644},{"href":389,"dataGaName":390,"dataGaLocation":475},{"text":646,"config":647},"Statut",{"href":648,"dataGaName":649,"dataGaLocation":475},"https://status.gitlab.com/","status",{"text":651,"config":652},"Conditions d'utilisation",{"href":653,"dataGaName":654},"/terms/","terms of use",{"text":656,"config":657},"Déclaration de confidentialité",{"href":658,"dataGaName":659,"dataGaLocation":475},"/fr-fr/privacy/","privacy statement",{"text":661,"config":662},"Préférences en matière de cookies",{"dataGaName":663,"dataGaLocation":475,"id":664,"isOneTrustButton":106},"cookie preferences","ot-sdk-btn",{"items":666},[667,669,672],{"text":651,"config":668},{"href":653,"dataGaName":654,"dataGaLocation":475},{"text":670,"config":671},"Politique de confidentialité",{"href":658,"dataGaName":659,"dataGaLocation":475},{"text":661,"config":673},{"dataGaName":663,"dataGaLocation":475,"id":664,"isOneTrustButton":106},"content:shared:fr-fr:main-footer.yml","Main Footer","shared/fr-fr/main-footer.yml","shared/fr-fr/main-footer",[679],{"_path":680,"_dir":681,"_draft":6,"_partial":6,"_locale":7,"content":682,"config":686,"_id":688,"_type":29,"title":18,"_source":31,"_file":689,"_stem":690,"_extension":34},"/en-us/blog/authors/patrick-steinhardt","authors",{"name":18,"config":683},{"headshot":684,"ctfId":685},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749661952/Blog/Author%20Headshots/pks-gitlab-headshot.png","pksgitlab",{"template":687},"BlogAuthor","content:en-us:blog:authors:patrick-steinhardt.yml","en-us/blog/authors/patrick-steinhardt.yml","en-us/blog/authors/patrick-steinhardt",{"_path":692,"_dir":37,"_draft":6,"_partial":6,"_locale":7,"header":693,"eyebrow":694,"blurb":695,"button":696,"secondaryButton":700,"_id":702,"_type":29,"title":703,"_source":31,"_file":704,"_stem":705,"_extension":34},"/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":45,"config":697},{"href":698,"dataGaName":48,"dataGaLocation":699},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":50,"config":701},{"href":52,"dataGaName":53,"dataGaLocation":699},"content:shared:fr-fr:next-steps.yml","Next Steps","shared/fr-fr/next-steps.yml","shared/fr-fr/next-steps",1754424543705]