[{"data":1,"prerenderedAt":1086},["ShallowReactive",2],{"/blog/how-to-scan-a-full-commit-history-to-detect-sensitive-secrets":3,"navigation-en-us":289,"banner-en-us":717,"footer-en-us":727,"blog-post-authors-en-us-Noah Ing|Jerez Solis":971,"blog-related-posts-en-us-how-to-scan-a-full-commit-history-to-detect-sensitive-secrets":998,"blog-promotions-en-us":1023,"next-steps-en-us":1076},{"id":4,"title":5,"authors":6,"body":9,"category":266,"date":267,"description":268,"extension":269,"externalUrl":270,"faq":270,"featured":271,"heroImage":272,"meta":273,"navigation":274,"path":275,"seo":276,"slug":280,"stem":281,"tags":282,"template":287,"updatedDate":270,"__hash__":288},"blogPosts/en-us/blog/how-to-scan-a-full-commit-history-to-detect-sensitive-secrets.md","How to scan a full commit history to detect sensitive secrets",[7,8],"Noah Ing","Jerez Solis",{"type":10,"value":11,"toc":260},"minimark",[12,16,30,35,42,49,52,64,70,135,143,147,154,160,163,167,170,173,207,215,219,240,243,256],[13,14,15],"p",{},"Secrets left exposed in outdated repositories pose significant risk for data breaches. For example, a still-active secret key can be exposed, leaving it vulnerable to exploitation. Secrets include access keys, API tokens, private keys, and other sensitive values.",[13,17,18,19,24,25,29],{},"In this article, you'll learn ",[20,21,23],"a",{"href":22},"/blog/best-practices-to-keep-secrets-out-of-gitlab-repositories/","how to use GitLab Secret Detection"," to scan a repository’s full commit history, including all branches, to detect sensitive secrets. In addition, you will discover how to view the results directly within the GitLab UI without the need for any integration. All it takes is just a couple of lines of code in your ",[26,27,28],"code",{},".gitlab-ci.yml"," pipeline file.",[31,32,34],"h2",{"id":33},"scan-every-corner-of-your-repository","Scan every corner of your repository",[13,36,37,38,41],{},"We will use the sample repository shown in the screenshot below as an example. To keep things simple, there is only a ",[26,39,40],{},"README.md"," file present in the default branch of this repository.",[13,43,44],{},[45,46],"img",{"alt":47,"src":48},"Sample repository to scan","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097956/Blog/Content%20Images/Blog/Content%20Images/image1_aHR0cHM6_1750097955851.png",[13,50,51],{},"At first glance, it may seem like the repository is empty and that there are probably no sensitive secrets in this repository. But what we are looking at is only the state of the default branch, which is the main branch in this example. There could be feature branches in this repository created weeks, months, or years ago with sensitive secrets. It is also possible that a file with a secret was accidentally pushed to the repo and then deleted right after. However, it likely was not deleted correctly and is still in the commit history.",[13,53,54,55,58,59,63],{},"We are going to enable GitLab Secret Detection scanner and set the ",[26,56,57],{},"SECRET_DETECTION_HISTORIC_SCAN"," variable to ",[60,61,62],"strong",{},"true"," so that the content of all branches in the repository is scanned.",[13,65,66],{},[45,67],{"alt":68,"src":69},"Enable GitLab Secret Detection variable to true","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097956/Blog/Content%20Images/Blog/Content%20Images/image3_aHR0cHM6_1750097955853.png",[71,72,77],"pre",{"className":73,"code":74,"language":75,"meta":76,"style":76},"language-yaml shiki shiki-themes github-light","include:\n  - template: Jobs/Secret-Detection.gitlab-ci.yml\nsecret_detection:\n  variables:\n    SECRET_DETECTION_HISTORIC_SCAN: \"true\"\n\n","yaml","",[26,78,79,92,108,116,124],{"__ignoreMap":76},[80,81,84,88],"span",{"class":82,"line":83},"line",1,[80,85,87],{"class":86},"shJU0","include",[80,89,91],{"class":90},"sgsFI",":\n",[80,93,95,98,101,104],{"class":82,"line":94},2,[80,96,97],{"class":90},"  - ",[80,99,100],{"class":86},"template",[80,102,103],{"class":90},": ",[80,105,107],{"class":106},"sYBdl","Jobs/Secret-Detection.gitlab-ci.yml\n",[80,109,111,114],{"class":82,"line":110},3,[80,112,113],{"class":86},"secret_detection",[80,115,91],{"class":90},[80,117,119,122],{"class":82,"line":118},4,[80,120,121],{"class":86},"  variables",[80,123,91],{"class":90},[80,125,127,130,132],{"class":82,"line":126},5,[80,128,129],{"class":86},"    SECRET_DETECTION_HISTORIC_SCAN",[80,131,103],{"class":90},[80,133,134],{"class":106},"\"true\"\n",[13,136,137,138,58,140,142],{},"By setting the ",[26,139,57],{},[60,141,62],{},", GitLab Secret Detection looks into every branch and commit of your repository. It ensures that no sensitive information — whether from a feature branch or an old commit — is left unchecked.",[31,144,146],{"id":145},"results-of-the-scan","Results of the scan",[13,148,149,150,153],{},"Two sensitive secrets were identified in the repository. One is a password in a ",[26,151,152],{},".env"," file that was deleted from the repository, but the commit containing it was not removed from the git history. The other is an AWS Access Token found in a feature branch. These exposed secrets could compromise the organization’s security.",[13,155,156],{},[45,157],{"alt":158,"src":159},"AWS Access Token screen","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097956/Blog/Content%20Images/Blog/Content%20Images/image2_aHR0cHM6_1750097955855.png",[13,161,162],{},"You can click on the AWS Access Token result to see more details, including the file location. You can also create a GitLab issue to triage the vulnerability with one click. If you’re using the Jira integration, you can create a Jira ticket directly from the vulnerability page as well.",[31,164,166],{"id":165},"why-scanning-for-secrets-matters","Why scanning for secrets matters",[13,168,169],{},"Anyone with access to the repository can misuse the secret to gain unauthorized access to private resources and sensitive data.",[13,171,172],{},"In addition to scanning a repository’s full commit history across all branches, GitLab Secret Detection also helps you take a multilayered approach to detecting secrets:",[174,175,176,185,193],"ul",{},[177,178,179,184],"li",{},[20,180,183],{"href":181,"rel":182},"https://docs.gitlab.com/user/application_security/secret_detection/secret_push_protection/",[],"Secret push protection"," - scans commits for secrets during a push and blocks it if secrets are detected, unless skipped, reducing the risk of leaks.",[177,186,187,192],{},[20,188,191],{"href":189,"rel":190},"https://docs.gitlab.com/user/application_security/secret_detection/pipeline/",[],"Pipeline secret detection"," - scans files after they’ve been committed and pushed to a GitLab repository.",[177,194,195,200,201,206],{},[20,196,199],{"href":197,"rel":198},"https://docs.gitlab.com/user/application_security/secret_detection/client/",[],"Client-side secret detection"," - scans comments and descriptions in issues and merge requests for secrets before they're saved to GitLab.  * ",[20,202,205],{"href":203,"rel":204},"https://docs.gitlab.com/user/application_security/secret_detection/automatic_response/",[],"Automatic response to leaked secrets"," - automatically revokes certain types of leaked secrets and notifies the partner that issued the secret.",[13,208,209,210,214],{},"You can adjust pipeline secret detection to suit your needs by modifying, extending, or replacing the default ruleset. For instance, you can define ",[20,211,213],{"href":212},"/blog/enhance-data-security-with-custom-pii-detection-rulesets/","custom rules"," using regex patterns to detect sensitive data like credit card numbers, phone numbers, or other information specific to your organization.",[31,216,218],{"id":217},"try-gitlab-secret-detection","Try GitLab Secret Detection",[220,221,222,230,237],"ol",{},[177,223,224,229],{},[20,225,228],{"href":226,"rel":227},"https://docs.gitlab.com/user/application_security/secret_detection/pipeline/#enable-the-analyzer",[],"Enable"," Secret Detection in your GitLab pipeline.",[177,231,232,233,236],{},"Set ",[26,234,235],{},"SECRET_DETECTION_HISTORIC_SCAN: true",".",[177,238,239],{},"Push and trigger a pipeline to scan all branches and commits.",[13,241,242],{},"GitLab makes securing your code simple and comprehensive. Don’t let an old branch or commit compromise your security — give historical scans a try today!",[244,245,246],"blockquote",{},[247,248,250,255],"h4",{"id":249},"sign-up-for-a-free-trial-of-gitlab-ultimate-to-get-started-with-security-scanners-like-secret-detection",[20,251,254],{"href":252,"rel":253},"https://about.gitlab.com/free-trial/",[],"Sign up for a free trial of GitLab Ultimate"," to get started with security scanners like Secret Detection.",[257,258,259],"style",{},"html pre.shiki code .shJU0, html code.shiki .shJU0{--shiki-default:#22863A}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":76,"searchDepth":94,"depth":94,"links":261},[262,263,264,265],{"id":33,"depth":94,"text":34},{"id":145,"depth":94,"text":146},{"id":165,"depth":94,"text":166},{"id":217,"depth":94,"text":218},"security","2025-02-06","Use GitLab Secret Detection to scan a repository's commit history, including branches. View results within the GitLab UI with just a few lines of code added to a pipeline file.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097948/Blog/Hero%20Images/Blog/Hero%20Images/REFERENCE%20-%20display%20preview%20for%20blog%20images%20%281%29_2XDPsbkjQ3o6tcdom6IGxI_1750097948673.png",{},true,"/en-us/blog/how-to-scan-a-full-commit-history-to-detect-sensitive-secrets",{"title":5,"description":268,"ogTitle":5,"ogDescription":268,"noIndex":271,"ogImage":272,"ogUrl":277,"ogSiteName":278,"ogType":279,"canonicalUrls":277},"https://about.gitlab.com/blog/how-to-scan-a-full-commit-history-to-detect-sensitive-secrets","https://about.gitlab.com","article","how-to-scan-a-full-commit-history-to-detect-sensitive-secrets","en-us/blog/how-to-scan-a-full-commit-history-to-detect-sensitive-secrets",[283,284,285,286],"solutions architecture","tutorial","DevSecOps platform","features","BlogPost","_1uA82EuAjP6JxB7kvx6SxbN09OvBM4O6XEsVvUv_jc",{"logo":290,"freeTrial":295,"sales":300,"login":305,"items":310,"search":637,"minimal":668,"duo":687,"switchNav":696,"pricingDeployment":707},{"config":291},{"href":292,"dataGaName":293,"dataGaLocation":294},"/","gitlab logo","header",{"text":296,"config":297},"Get free trial",{"href":298,"dataGaName":299,"dataGaLocation":294},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":301,"config":302},"Request a demo",{"href":303,"dataGaName":304,"dataGaLocation":294},"/sales/?contact-topic=request-demo","sales",{"text":306,"config":307},"Sign in",{"href":308,"dataGaName":309,"dataGaLocation":294},"https://gitlab.com/users/sign_in/","sign in",[311,340,440,445,559,615],{"text":312,"config":313,"menu":315},"Platform",{"dataNavLevelOne":314},"platform",{"type":316,"columns":317},"cards",[318,324,332],{"title":312,"description":319,"link":320},"The intelligent orchestration platform for DevSecOps",{"text":321,"config":322},"Explore our Platform",{"href":323,"dataGaName":314,"dataGaLocation":294},"/platform/",{"title":325,"description":326,"link":327},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":328,"config":329},"Meet GitLab Duo",{"href":330,"dataGaName":331,"dataGaLocation":294},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":333,"description":334,"link":335},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":336,"config":337},"Learn more",{"href":338,"dataGaName":339,"dataGaLocation":294},"/why-gitlab/","why gitlab",{"text":341,"left":274,"config":342,"menu":344},"Product",{"dataNavLevelOne":343},"solutions",{"type":345,"link":346,"columns":350,"feature":419},"lists",{"text":347,"config":348},"View all Solutions",{"href":349,"dataGaName":343,"dataGaLocation":294},"/solutions/",[351,375,398],{"title":352,"description":353,"link":354,"items":359},"Automation","CI/CD and automation to accelerate deployment",{"config":355},{"icon":356,"href":357,"dataGaName":358,"dataGaLocation":294},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[360,364,367,371],{"text":361,"config":362},"CI/CD",{"href":363,"dataGaLocation":294,"dataGaName":361},"/solutions/continuous-integration/",{"text":325,"config":365},{"href":330,"dataGaLocation":294,"dataGaName":366},"gitlab duo agent platform - product menu",{"text":368,"config":369},"Source Code Management",{"href":370,"dataGaLocation":294,"dataGaName":368},"/solutions/source-code-management/",{"text":372,"config":373},"Automated Software Delivery",{"href":357,"dataGaLocation":294,"dataGaName":374},"Automated software delivery",{"title":376,"description":377,"link":378,"items":383},"Security","Deliver code faster without compromising security",{"config":379},{"href":380,"dataGaName":381,"dataGaLocation":294,"icon":382},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[384,388,393],{"text":385,"config":386},"Application Security Testing",{"href":380,"dataGaName":387,"dataGaLocation":294},"Application security testing",{"text":389,"config":390},"Software Supply Chain Security",{"href":391,"dataGaLocation":294,"dataGaName":392},"/solutions/supply-chain/","Software supply chain security",{"text":394,"config":395},"Software Compliance",{"href":396,"dataGaName":397,"dataGaLocation":294},"/solutions/software-compliance/","software compliance",{"title":399,"link":400,"items":405},"Measurement",{"config":401},{"icon":402,"href":403,"dataGaName":404,"dataGaLocation":294},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[406,410,414],{"text":407,"config":408},"Visibility & Measurement",{"href":403,"dataGaLocation":294,"dataGaName":409},"Visibility and Measurement",{"text":411,"config":412},"Value Stream Management",{"href":413,"dataGaLocation":294,"dataGaName":411},"/solutions/value-stream-management/",{"text":415,"config":416},"Analytics & Insights",{"href":417,"dataGaLocation":294,"dataGaName":418},"/solutions/analytics-and-insights/","Analytics and insights",{"title":420,"type":345,"items":421},"GitLab for",[422,428,434],{"text":423,"config":424},"Enterprise",{"icon":425,"href":426,"dataGaLocation":294,"dataGaName":427},"Building","/enterprise/","enterprise",{"text":429,"config":430},"Small Business",{"icon":431,"href":432,"dataGaLocation":294,"dataGaName":433},"Work","/small-business/","small business",{"text":435,"config":436},"Public Sector",{"icon":437,"href":438,"dataGaLocation":294,"dataGaName":439},"Organization","/solutions/public-sector/","public sector",{"text":441,"config":442},"Pricing",{"href":443,"dataGaName":444,"dataGaLocation":294,"dataNavLevelOne":444},"/pricing/","pricing",{"text":446,"config":447,"menu":449},"Resources",{"dataNavLevelOne":448},"resources",{"type":345,"link":450,"columns":454,"feature":548},{"text":451,"config":452},"View all resources",{"href":453,"dataGaName":448,"dataGaLocation":294},"/resources/",[455,488,515],{"title":456,"items":457},"Getting started",[458,463,468,473,478,483],{"text":459,"config":460},"Install",{"href":461,"dataGaName":462,"dataGaLocation":294},"/install/","install",{"text":464,"config":465},"Quick start guides",{"href":466,"dataGaName":467,"dataGaLocation":294},"/get-started/","quick setup checklists",{"text":469,"config":470},"Learn",{"href":471,"dataGaLocation":294,"dataGaName":472},"https://university.gitlab.com/","learn",{"text":474,"config":475},"Product documentation",{"href":476,"dataGaName":477,"dataGaLocation":294},"https://docs.gitlab.com/","product documentation",{"text":479,"config":480},"Best practice videos",{"href":481,"dataGaName":482,"dataGaLocation":294},"/getting-started-videos/","best practice videos",{"text":484,"config":485},"Integrations",{"href":486,"dataGaName":487,"dataGaLocation":294},"/integrations/","integrations",{"title":489,"items":490},"Discover",[491,496,501,506,510],{"text":492,"config":493},"Customer success stories",{"href":494,"dataGaName":495,"dataGaLocation":294},"/customers/","customer success stories",{"text":497,"config":498},"Blog",{"href":499,"dataGaName":500,"dataGaLocation":294},"/blog/","blog",{"text":502,"config":503},"Demo Hub",{"href":504,"dataGaName":505,"dataGaLocation":294},"/demo-hub/","demo hub",{"text":507,"config":508},"The Source",{"href":509,"dataGaName":500,"dataGaLocation":294},"/the-source/",{"text":511,"config":512},"Remote",{"href":513,"dataGaName":514,"dataGaLocation":294},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":516,"items":517},"Connect",[518,523,528,533,538,543],{"text":519,"config":520},"GitLab Services",{"href":521,"dataGaName":522,"dataGaLocation":294},"/services/","services",{"text":524,"config":525},"Contribute",{"href":526,"dataGaName":527,"dataGaLocation":294},"https://contributors.gitlab.com","contribute",{"text":529,"config":530},"Community",{"href":531,"dataGaName":532,"dataGaLocation":294},"/community/","community",{"text":534,"config":535},"Forum",{"href":536,"dataGaName":537,"dataGaLocation":294},"https://forum.gitlab.com/","forum",{"text":539,"config":540},"Events",{"href":541,"dataGaName":542,"dataGaLocation":294},"/events/","events",{"text":544,"config":545},"Partners",{"href":546,"dataGaName":547,"dataGaLocation":294},"/partners/","partners",{"config":549,"title":552,"text":553,"link":554},{"background":550,"textColor":551},"url('https://res.cloudinary.com/about-gitlab-com/image/upload/v1777322348/qpq8yrgn8knii57omj0c.png')","#000","What’s new in GitLab","Stay updated with our latest features and improvements.",{"text":555,"config":556},"Read the latest",{"href":557,"dataGaName":558,"dataGaLocation":294},"/whats-new/","whats new",{"text":560,"config":561,"menu":563},"Company",{"dataNavLevelOne":562},"company",{"type":345,"columns":564},[565],{"items":566},[567,572,578,580,585,590,595,600,605,610],{"text":568,"config":569},"About",{"href":570,"dataGaName":571,"dataGaLocation":294},"/company/","about",{"text":573,"config":574,"footerGa":577},"Jobs",{"href":575,"dataGaName":576,"dataGaLocation":294},"/jobs/","jobs",{"dataGaName":576},{"text":539,"config":579},{"href":541,"dataGaName":542,"dataGaLocation":294},{"text":581,"config":582},"Leadership",{"href":583,"dataGaName":584,"dataGaLocation":294},"/company/team/e-group/","leadership",{"text":586,"config":587},"Handbook",{"href":588,"dataGaName":589,"dataGaLocation":294},"https://handbook.gitlab.com/","handbook",{"text":591,"config":592},"Investor relations",{"href":593,"dataGaName":594,"dataGaLocation":294},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":596,"config":597},"Trust Center",{"href":598,"dataGaName":599,"dataGaLocation":294},"/security/","trust center",{"text":601,"config":602},"AI Transparency Center",{"href":603,"dataGaName":604,"dataGaLocation":294},"/ai-transparency-center/","ai transparency center",{"text":606,"config":607},"Newsletter",{"href":608,"dataGaName":609,"dataGaLocation":294},"/company/contact/#contact-forms","newsletter",{"text":611,"config":612},"Press",{"href":613,"dataGaName":614,"dataGaLocation":294},"/press/","press",{"text":616,"config":617,"menu":618},"Contact us",{"dataNavLevelOne":562},{"type":345,"columns":619},[620],{"items":621},[622,627,632],{"text":623,"config":624},"Talk to sales",{"href":625,"dataGaName":626,"dataGaLocation":294},"/sales/","talk to sales",{"text":628,"config":629},"Support portal",{"href":630,"dataGaName":631,"dataGaLocation":294},"https://support.gitlab.com/hc/en-us","support portal",{"text":633,"config":634},"Customer portal",{"href":635,"dataGaName":636,"dataGaLocation":294},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":638,"login":639,"suggestions":646},"Close",{"text":640,"link":641},"To search repositories and projects, login to",{"text":642,"config":643},"gitlab.com",{"href":308,"dataGaName":644,"dataGaLocation":645},"search login","search",{"text":647,"default":648},"Suggestions",[649,651,655,657,661,665],{"text":325,"config":650},{"href":330,"dataGaName":325,"dataGaLocation":645},{"text":652,"config":653},"Code Suggestions (AI)",{"href":654,"dataGaName":652,"dataGaLocation":645},"/solutions/code-suggestions/",{"text":361,"config":656},{"href":363,"dataGaName":361,"dataGaLocation":645},{"text":658,"config":659},"GitLab on AWS",{"href":660,"dataGaName":658,"dataGaLocation":645},"/partners/technology-partners/aws/",{"text":662,"config":663},"GitLab on Google Cloud",{"href":664,"dataGaName":662,"dataGaLocation":645},"/partners/technology-partners/google-cloud-platform/",{"text":666,"config":667},"Why GitLab?",{"href":338,"dataGaName":666,"dataGaLocation":645},{"freeTrial":669,"mobileIcon":674,"desktopIcon":679,"secondaryButton":682},{"text":670,"config":671},"Start free trial",{"href":672,"dataGaName":299,"dataGaLocation":673},"https://gitlab.com/-/trials/new/","nav",{"altText":675,"config":676},"Gitlab Icon",{"src":677,"dataGaName":678,"dataGaLocation":673},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":675,"config":680},{"src":681,"dataGaName":678,"dataGaLocation":673},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":683,"config":684},"Get Started",{"href":685,"dataGaName":686,"dataGaLocation":673},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":688,"mobileIcon":692,"desktopIcon":694},{"text":689,"config":690},"Learn more about GitLab Duo",{"href":330,"dataGaName":691,"dataGaLocation":673},"gitlab duo",{"altText":675,"config":693},{"src":677,"dataGaName":678,"dataGaLocation":673},{"altText":675,"config":695},{"src":681,"dataGaName":678,"dataGaLocation":673},{"button":697,"mobileIcon":702,"desktopIcon":704},{"text":698,"config":699},"/switch",{"href":700,"dataGaName":701,"dataGaLocation":673},"#contact","switch",{"altText":675,"config":703},{"src":677,"dataGaName":678,"dataGaLocation":673},{"altText":675,"config":705},{"src":706,"dataGaName":678,"dataGaLocation":673},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":708,"mobileIcon":713,"desktopIcon":715},{"text":709,"config":710},"Back to pricing",{"href":443,"dataGaName":711,"dataGaLocation":673,"icon":712},"back to pricing","GoBack",{"altText":675,"config":714},{"src":677,"dataGaName":678,"dataGaLocation":673},{"altText":675,"config":716},{"src":681,"dataGaName":678,"dataGaLocation":673},{"title":718,"titleMobile":719,"button":720,"config":725},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":336,"config":721},{"href":722,"dataGaName":723,"dataGaLocation":724},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":726,"disabled":271},"release",{"data":728},{"text":729,"source":730,"edit":736,"contribute":741,"config":746,"items":751,"minimal":960},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":731,"config":732},"View page source",{"href":733,"dataGaName":734,"dataGaLocation":735},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":737,"config":738},"Edit this page",{"href":739,"dataGaName":740,"dataGaLocation":735},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":742,"config":743},"Please contribute",{"href":744,"dataGaName":745,"dataGaLocation":735},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":747,"facebook":748,"youtube":749,"linkedin":750},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[752,799,852,896,928],{"title":441,"links":753,"subMenu":768},[754,758,763],{"text":755,"config":756},"View plans",{"href":443,"dataGaName":757,"dataGaLocation":735},"view plans",{"text":759,"config":760},"Why Premium?",{"href":761,"dataGaName":762,"dataGaLocation":735},"/pricing/premium/","why premium",{"text":764,"config":765},"Why Ultimate?",{"href":766,"dataGaName":767,"dataGaLocation":735},"/pricing/ultimate/","why ultimate",[769],{"title":770,"links":771},"Contact Us",[772,775,777,779,784,789,794],{"text":773,"config":774},"Contact sales",{"href":625,"dataGaName":304,"dataGaLocation":735},{"text":628,"config":776},{"href":630,"dataGaName":631,"dataGaLocation":735},{"text":633,"config":778},{"href":635,"dataGaName":636,"dataGaLocation":735},{"text":780,"config":781},"Status",{"href":782,"dataGaName":783,"dataGaLocation":735},"https://status.gitlab.com/","status",{"text":785,"config":786},"Terms of use",{"href":787,"dataGaName":788,"dataGaLocation":735},"/terms/","terms of use",{"text":790,"config":791},"Privacy statement",{"href":792,"dataGaName":793,"dataGaLocation":735},"/privacy/","privacy statement",{"text":795,"config":796},"Cookie preferences",{"dataGaName":797,"dataGaLocation":735,"id":798,"isOneTrustButton":274},"cookie preferences","ot-sdk-btn",{"title":341,"links":800,"subMenu":808},[801,804],{"text":285,"config":802},{"href":323,"dataGaName":803,"dataGaLocation":735},"devsecops platform",{"text":805,"config":806},"AI-Assisted Development",{"href":330,"dataGaName":807,"dataGaLocation":735},"ai-assisted development",[809],{"title":810,"links":811},"Topics",[812,817,822,827,832,837,842,847],{"text":813,"config":814},"CICD",{"href":815,"dataGaName":816,"dataGaLocation":735},"/topics/ci-cd/","cicd",{"text":818,"config":819},"GitOps",{"href":820,"dataGaName":821,"dataGaLocation":735},"/topics/gitops/","gitops",{"text":823,"config":824},"DevOps",{"href":825,"dataGaName":826,"dataGaLocation":735},"/topics/devops/","devops",{"text":828,"config":829},"Version Control",{"href":830,"dataGaName":831,"dataGaLocation":735},"/topics/version-control/","version control",{"text":833,"config":834},"DevSecOps",{"href":835,"dataGaName":836,"dataGaLocation":735},"/topics/devsecops/","devsecops",{"text":838,"config":839},"Cloud Native",{"href":840,"dataGaName":841,"dataGaLocation":735},"/topics/cloud-native/","cloud native",{"text":843,"config":844},"AI for Coding",{"href":845,"dataGaName":846,"dataGaLocation":735},"/topics/devops/ai-for-coding/","ai for coding",{"text":848,"config":849},"Agentic AI",{"href":850,"dataGaName":851,"dataGaLocation":735},"/topics/agentic-ai/","agentic ai",{"title":853,"links":854},"Solutions",[855,857,859,864,868,871,875,878,880,883,886,891],{"text":385,"config":856},{"href":380,"dataGaName":385,"dataGaLocation":735},{"text":374,"config":858},{"href":357,"dataGaName":358,"dataGaLocation":735},{"text":860,"config":861},"Agile development",{"href":862,"dataGaName":863,"dataGaLocation":735},"/solutions/agile-delivery/","agile delivery",{"text":865,"config":866},"SCM",{"href":370,"dataGaName":867,"dataGaLocation":735},"source code management",{"text":813,"config":869},{"href":363,"dataGaName":870,"dataGaLocation":735},"continuous integration & delivery",{"text":872,"config":873},"Value stream management",{"href":413,"dataGaName":874,"dataGaLocation":735},"value stream management",{"text":818,"config":876},{"href":877,"dataGaName":821,"dataGaLocation":735},"/solutions/gitops/",{"text":423,"config":879},{"href":426,"dataGaName":427,"dataGaLocation":735},{"text":881,"config":882},"Small business",{"href":432,"dataGaName":433,"dataGaLocation":735},{"text":884,"config":885},"Public sector",{"href":438,"dataGaName":439,"dataGaLocation":735},{"text":887,"config":888},"Education",{"href":889,"dataGaName":890,"dataGaLocation":735},"/solutions/education/","education",{"text":892,"config":893},"Financial services",{"href":894,"dataGaName":895,"dataGaLocation":735},"/solutions/finance/","financial services",{"title":446,"links":897},[898,900,902,904,907,909,912,914,916,918,920,922,924,926],{"text":459,"config":899},{"href":461,"dataGaName":462,"dataGaLocation":735},{"text":464,"config":901},{"href":466,"dataGaName":467,"dataGaLocation":735},{"text":469,"config":903},{"href":471,"dataGaName":472,"dataGaLocation":735},{"text":474,"config":905},{"href":476,"dataGaName":906,"dataGaLocation":735},"docs",{"text":497,"config":908},{"href":499,"dataGaName":500,"dataGaLocation":735},{"text":910,"config":911},"What's new",{"href":557,"dataGaName":558,"dataGaLocation":735},{"text":492,"config":913},{"href":494,"dataGaName":495,"dataGaLocation":735},{"text":511,"config":915},{"href":513,"dataGaName":514,"dataGaLocation":735},{"text":519,"config":917},{"href":521,"dataGaName":522,"dataGaLocation":735},{"text":524,"config":919},{"href":526,"dataGaName":527,"dataGaLocation":735},{"text":529,"config":921},{"href":531,"dataGaName":532,"dataGaLocation":735},{"text":534,"config":923},{"href":536,"dataGaName":537,"dataGaLocation":735},{"text":539,"config":925},{"href":541,"dataGaName":542,"dataGaLocation":735},{"text":544,"config":927},{"href":546,"dataGaName":547,"dataGaLocation":735},{"title":560,"links":929},[930,932,934,936,938,940,944,949,951,953,955],{"text":568,"config":931},{"href":570,"dataGaName":562,"dataGaLocation":735},{"text":573,"config":933},{"href":575,"dataGaName":576,"dataGaLocation":735},{"text":581,"config":935},{"href":583,"dataGaName":584,"dataGaLocation":735},{"text":586,"config":937},{"href":588,"dataGaName":589,"dataGaLocation":735},{"text":591,"config":939},{"href":593,"dataGaName":594,"dataGaLocation":735},{"text":941,"config":942},"Sustainability",{"href":943,"dataGaName":941,"dataGaLocation":735},"/sustainability/",{"text":945,"config":946},"Diversity, inclusion and belonging (DIB)",{"href":947,"dataGaName":948,"dataGaLocation":735},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":596,"config":950},{"href":598,"dataGaName":599,"dataGaLocation":735},{"text":606,"config":952},{"href":608,"dataGaName":609,"dataGaLocation":735},{"text":611,"config":954},{"href":613,"dataGaName":614,"dataGaLocation":735},{"text":956,"config":957},"Modern Slavery Transparency Statement",{"href":958,"dataGaName":959,"dataGaLocation":735},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":961},[962,965,968],{"text":963,"config":964},"Terms",{"href":787,"dataGaName":788,"dataGaLocation":735},{"text":966,"config":967},"Cookies",{"dataGaName":797,"dataGaLocation":735,"id":798,"isOneTrustButton":274},{"text":969,"config":970},"Privacy",{"href":792,"dataGaName":793,"dataGaLocation":735},[972,986],{"id":973,"title":7,"body":270,"config":974,"content":976,"description":270,"extension":980,"meta":981,"navigation":274,"path":982,"seo":983,"stem":984,"__hash__":985},"blogAuthors/en-us/blog/authors/noah-ing.yml",{"template":975},"BlogAuthor",{"name":7,"config":977},{"headshot":978,"ctfId":979},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664410/Blog/Author%20Headshots/noahing.png","noahing","yml",{},"/en-us/blog/authors/noah-ing",{},"en-us/blog/authors/noah-ing","NHgV_yTX8kHX01mE2SSxC6hcOMw3BCWiblr8m6csLkw",{"id":987,"title":8,"body":270,"config":988,"content":989,"description":270,"extension":980,"meta":993,"navigation":274,"path":994,"seo":995,"stem":996,"__hash__":997},"blogAuthors/en-us/blog/authors/jerez-solis.yml",{"template":975},{"name":8,"config":990},{"headshot":991,"ctfId":992},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664494/Blog/Author%20Headshots/jerezsolis.jpg","1Tx8fzD6QQglwxBTAlwAOZ",{},"/en-us/blog/authors/jerez-solis",{},"en-us/blog/authors/jerez-solis","-x7IzIDKZG8xtdxpjEmuoJA1HZ0LJh8mza79ibYm1Cw",[999,1007,1015],{"title":1000,"description":1001,"heroImage":1002,"category":266,"date":1003,"authors":1004,"slug":1006,"externalUrl":270},"How GitLab tracks vulnerabilities through refactors and reformatting","Learn how GitLab's improved Scope+Offset fingerprinting keeps vulnerability tracking stable across comments, blank lines, and reformatting.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1759320418/xjmqcozxzt4frx0hori3.png","2026-08-12",[1005],"Julian Thome","improved-scope-offset-fingerprinting",{"title":1008,"description":1009,"heroImage":1002,"category":266,"date":1010,"authors":1011,"slug":1014,"externalUrl":270},"GitLab Secrets Manager adds ESO, Terraform, API support","Simplify credential management across your stack. GitLab Secrets Manager provides secure retrieval in Kubernetes, Terraform, and external workflows.","2026-08-06",[1012,1013],"Erick Bajao","Joe Randazzo","gitlab-secrets-manager-add-eso-terraform-api-support",{"title":1016,"description":1017,"heroImage":1018,"category":266,"date":1019,"authors":1020,"slug":1022,"externalUrl":270},"Secure every commit to production with Claude and GitLab","Claude Security catches vulnerabilities inside a coding session. GitLab picks up from there, scanning, enforcing policy, and producing audit evidence for the software lifecycle. ","https://res.cloudinary.com/about-gitlab-com/image/upload/v1756122536/akivvcnafog9c4dhhzkp.png","2026-08-03",[1021],"Alisa Ho","claude-security-and-gitlab",{"promotions":1024},[1025,1039,1051,1062],{"id":1026,"categories":1027,"header":1029,"text":1030,"button":1031,"image":1036},"ai-modernization",[1028],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":1032,"config":1033},"Get your AI maturity score",{"href":1034,"dataGaName":1035,"dataGaLocation":500},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":1037},{"src":1038},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1040,"categories":1041,"header":1043,"text":1030,"button":1044,"image":1048},"devops-modernization",[1042,836],"product","Are you just managing tools or shipping innovation?",{"text":1045,"config":1046},"Get your DevOps maturity score",{"href":1047,"dataGaName":1035,"dataGaLocation":500},"/assessments/devops-modernization-assessment/",{"config":1049},{"src":1050},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1052,"categories":1053,"header":1054,"text":1030,"button":1055,"image":1059},"security-modernization",[266],"Are you trading speed for security?",{"text":1056,"config":1057},"Get your security maturity score",{"href":1058,"dataGaName":1035,"dataGaLocation":500},"/assessments/security-modernization-assessment/",{"config":1060},{"src":1061},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1063,"paths":1064,"header":1067,"text":1068,"button":1069,"image":1074},"github-azure-migration",[1065,1066],"migration-from-azure-devops-to-gitlab","integrating-azure-devops-scm-and-gitlab","Is your team ready for GitHub's Azure move?","GitHub is already rebuilding around Azure. Find out what it means for you.",{"text":1070,"config":1071},"See how GitLab compares to GitHub",{"href":1072,"dataGaName":1073,"dataGaLocation":500},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1075},{"src":1050},{"header":1077,"blurb":1078,"button":1079,"secondaryButton":1084},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1080,"config":1081},"Get your free trial",{"href":1082,"dataGaName":299,"dataGaLocation":1083},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":773,"config":1085},{"href":625,"dataGaName":304,"dataGaLocation":1083},1786803770072]