[{"data":1,"prerenderedAt":1059},["ShallowReactive",2],{"/blog/how-to-keep-your-fork-up-to-date-with-its-origin":3,"navigation-en-us":273,"banner-en-us":700,"footer-en-us":710,"blog-post-authors-en-us-Marcia Ramos":954,"blog-related-posts-en-us-how-to-keep-your-fork-up-to-date-with-its-origin":969,"blog-promotions-en-us":995,"next-steps-en-us":1049},{"id":4,"title":5,"authors":6,"body":8,"category":242,"date":243,"description":244,"extension":245,"externalUrl":246,"faq":246,"featured":247,"heroImage":248,"meta":249,"navigation":263,"path":264,"seo":265,"slug":269,"stem":270,"tags":246,"template":271,"updatedDate":246,"__hash__":272},"blogPosts/en-us/blog/how-to-keep-your-fork-up-to-date-with-its-origin.md","How to keep your fork up to date with its origin",[7],"Marcia Ramos",{"type":9,"value":10,"toc":232},"minimark",[11,22,30,33,38,49,52,75,79,87,93,97,105,111,122,129,139,145,155,161,167,170,173,177,191,197,206,209,213,216,220,223],[12,13,14,15,21],"p",{},"This blog post has not been updated since publishing in 2016, so it contains outdated information. For an up-to-date source,\nplease see the documentation on ",[16,17,20],"a",{"href":18,"rel":19},"https://docs.gitlab.com/user/project/repository/mirror/",[],"Repository Mirroring",".",[12,23,24,25,29],{},"Have you ever wondered how to keep a fork automatically up-to-date with its origin (",[26,27,28],"strong",{},"upstream",")?",[12,31,32],{},"In this post we'll show you how to do that on GitLab!",[34,35,37],"h2",{"id":36},"fork","Fork",[12,39,40,41,43,44,48],{},"As you most likely know, a ",[26,42,36],{}," is a copy of a Git repository \"connected\" with the project you forked from (upstream). When you collaborate on code, it's pretty common forking a project, cloning to your local machine, making the changes you're up to, pushing to your fork, and submitting a ",[16,45,47],{"href":46},"/solutions/continuous-integration/","merge request (MR)"," to merge your code into the original project.",[12,50,51],{},"You fork a repository whenever you want to contribute to a project which you don't have access to, as it's not your own or your team's. This is how open source projects hosted by GitLab get so much collaboration from the community.",[12,53,54,55,59,60,64,65,70,71,74],{},"When you are a member of a project (or a group), it's easier using the ",[16,56,58],{"href":57},"/topics/version-control/what-is-gitlab-flow/","GitLab Flow",", or ",[61,62,63],"em",{},"branching strategy",", since anyone in your team can pull your branch and preview your changes locally. By the way, with our brand-new solution for this, called ",[16,66,69],{"href":67,"rel":68},"https://docs.gitlab.com/ci/review_apps/",[],"Review Apps",", you can preview your apps in a per-branch basis, for each MR submitted to GitLab, directly from a link generated by GitLab. Review Apps came to bring the ",[16,72,73],{"href":57},"GitLab Workflow"," up to the next level! 🙌",[34,76,78],{"id":77},"the-problem","The Problem",[12,80,81,82,86],{},"When you fork a project and clone it to your local computer, you'll eventually need to update it with the ",[83,84,85],"code",{},"master"," branch of the upstream project (or whatever the default branch is set to). That way you will be able to checkout an up-to-date branch to work from. If you do not do that, you are very likely to stumble upon merge conflicts in the end, since the copy of the code you're working could be out-of-date.",[12,88,89,90,92],{},"To prevent this, first you'd need to pull the upstream, push to the remote, checkout a new branch from the ",[83,91,85],{}," branch up-to-date, then finally start working on your changes. This takes time, and if you forget to do it, can cause a lot of pain. This process takes some time to complete, and turns out to be annoying if you need to do this multiple times a day. That's why we could use a better solution.",[34,94,96],{"id":95},"the-solution","The Solution",[12,98,99,100,104],{},"GitLab can do that for you with no pain! Yay! What you need to do is very simple: enable ",[16,101,103],{"href":18,"rel":102},[],"GitLab Repository Mirroring","!",[12,106,107,110],{},[26,108,109],{},"First",". Mirror your fork:",[12,112,113,114,117,118,121],{},"Under your forked project's ",[26,115,116],{},"Settings",", navigate to ",[26,119,120],{},"Mirror Repository",":",[12,123,124],{},[125,126],"img",{"alt":127,"src":128},"settings - mirror repository","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398504/blog/Content%20Images/how-to-keep-your-fork-up-to-date-with-its-origin/mirror-repository-settings.png",[12,130,131,134,135,138],{},[26,132,133],{},"Second",". Add the upstream's path to the field ",[26,136,137],{},"Git repository URL",", then enable automatic mirroring:",[12,140,141],{},[125,142],{"alt":143,"src":144},"fork - enable automatic repository update","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398505/blog/Content%20Images/how-to-keep-your-fork-up-to-date-with-its-origin/setup-automatic-mirror.png",[12,146,147,150,151,154],{},[26,148,149],{},"Third",". Set up the ",[26,152,153],{},"mirror user",": it's the user whose new commits to the upstream project will be attributed to in your fork.",[12,156,157,160],{},[26,158,159],{},"Done","! Once an hour, GitLab will pull the upstream for you, and keep your fork up-to-date!",[12,162,163],{},[125,164],{"alt":165,"src":166},"fork - repo successfully mirrored","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398505/blog/Content%20Images/how-to-keep-your-fork-up-to-date-with-its-origin/repository-mirrored.png",[12,168,169],{},"By doing so, you only need to proceed as you usually do for your own projects (pull, checkout a new branch, and push your commits). All the rest GitLab does for you!",[12,171,172],{},"Simple, isn't it?",[34,174,176],{"id":175},"the-secret","The Secret",[12,178,179,180,183,184,187,188,121],{},"In order to pull without authentication from an upstream repository you are contributing to, the project should be public in the first place. Also, the ",[26,181,182],{},"Repository","'s ",[26,185,186],{},"Feature Visibility"," settings of the upstream project needs to be set to ",[26,189,190],{},"Everyone with access",[12,192,193],{},[125,194],{"alt":195,"src":196},"feature visibility settings","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398504/blog/Content%20Images/how-to-keep-your-fork-up-to-date-with-its-origin/feature-visibility-settings.png",[12,198,199,200,202,203,21],{},"You can find them in your project's ",[26,201,116],{}," () > ",[26,204,205],{},"Edit Project",[12,207,208],{},"Note that you can mirror private projects as well, but you'd need to be a member of the project or the group it belongs.",[34,210,212],{"id":211},"what-is-your-solution","What is Your Solution?",[12,214,215],{},"We would love to know how you do that! Do you have a different solution? You can certainly help others. Please share them in the comments, so everyone from the community can decide which solution is the best for them. Thank you!",[34,217,219],{"id":218},"conclusion","Conclusion",[12,221,222],{},"Hopefully, we provided you with an easy solution for keeping your fork up-to-date. Remember, you can even mirror repositories hosted in other Git platforms!",[12,224,225,226,231],{},"Cool! I'm looking forward to hearing from you: feedback, questions, and suggestions are very welcome! Leave your comment below, and/or tweet at us ",[16,227,230],{"href":228,"rel":229},"https://twitter.com/gitlab",[],"@GitLab","! We  our community!",{"title":233,"searchDepth":234,"depth":234,"links":235},"",2,[236,237,238,239,240,241],{"id":36,"depth":234,"text":37},{"id":77,"depth":234,"text":78},{"id":95,"depth":234,"text":96},{"id":175,"depth":234,"text":176},{"id":211,"depth":234,"text":212},{"id":218,"depth":234,"text":219},"engineering","2016-12-01","GitLab Repository Mirroring: the best way to keep your fork up-to-date!","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749666587/Blog/Hero%20Images/fork.png",{"excerpt":250},{"type":9,"value":251},[252,257,261],[12,253,14,254,21],{},[16,255,20],{"href":18,"rel":256},[],[12,258,24,259,29],{},[26,260,28],{},[12,262,32],{},true,"/en-us/blog/how-to-keep-your-fork-up-to-date-with-its-origin",{"title":5,"description":244,"ogTitle":5,"ogDescription":244,"noIndex":247,"ogImage":248,"ogUrl":266,"ogSiteName":267,"ogType":268,"canonicalUrls":266},"https://about.gitlab.com/blog/how-to-keep-your-fork-up-to-date-with-its-origin","https://about.gitlab.com","article","how-to-keep-your-fork-up-to-date-with-its-origin","en-us/blog/how-to-keep-your-fork-up-to-date-with-its-origin","BlogPost","Wmf85n64JMGYf-a549RJuQ-auLEA55hMNiNnGHbT3m8",{"logo":274,"freeTrial":279,"sales":284,"login":289,"items":294,"search":620,"minimal":651,"duo":670,"switchNav":679,"pricingDeployment":690},{"config":275},{"href":276,"dataGaName":277,"dataGaLocation":278},"/","gitlab logo","header",{"text":280,"config":281},"Get free trial",{"href":282,"dataGaName":283,"dataGaLocation":278},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":285,"config":286},"Request a demo",{"href":287,"dataGaName":288,"dataGaLocation":278},"/sales/?contact-topic=request-demo","sales",{"text":290,"config":291},"Sign in",{"href":292,"dataGaName":293,"dataGaLocation":278},"https://gitlab.com/users/sign_in/","sign in",[295,324,423,428,542,598],{"text":296,"config":297,"menu":299},"Platform",{"dataNavLevelOne":298},"platform",{"type":300,"columns":301},"cards",[302,308,316],{"title":296,"description":303,"link":304},"The intelligent orchestration platform for DevSecOps",{"text":305,"config":306},"Explore our Platform",{"href":307,"dataGaName":298,"dataGaLocation":278},"/platform/",{"title":309,"description":310,"link":311},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":312,"config":313},"Meet GitLab Duo",{"href":314,"dataGaName":315,"dataGaLocation":278},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":317,"description":318,"link":319},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":320,"config":321},"Learn more",{"href":322,"dataGaName":323,"dataGaLocation":278},"/why-gitlab/","why gitlab",{"text":325,"left":263,"config":326,"menu":328},"Product",{"dataNavLevelOne":327},"solutions",{"type":329,"link":330,"columns":334,"feature":402},"lists",{"text":331,"config":332},"View all Solutions",{"href":333,"dataGaName":327,"dataGaLocation":278},"/solutions/",[335,358,381],{"title":336,"description":337,"link":338,"items":343},"Automation","CI/CD and automation to accelerate deployment",{"config":339},{"icon":340,"href":341,"dataGaName":342,"dataGaLocation":278},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[344,347,350,354],{"text":345,"config":346},"CI/CD",{"href":46,"dataGaLocation":278,"dataGaName":345},{"text":309,"config":348},{"href":314,"dataGaLocation":278,"dataGaName":349},"gitlab duo agent platform - product menu",{"text":351,"config":352},"Source Code Management",{"href":353,"dataGaLocation":278,"dataGaName":351},"/solutions/source-code-management/",{"text":355,"config":356},"Automated Software Delivery",{"href":341,"dataGaLocation":278,"dataGaName":357},"Automated software delivery",{"title":359,"description":360,"link":361,"items":366},"Security","Deliver code faster without compromising security",{"config":362},{"href":363,"dataGaName":364,"dataGaLocation":278,"icon":365},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[367,371,376],{"text":368,"config":369},"Application Security Testing",{"href":363,"dataGaName":370,"dataGaLocation":278},"Application security testing",{"text":372,"config":373},"Software Supply Chain Security",{"href":374,"dataGaLocation":278,"dataGaName":375},"/solutions/supply-chain/","Software supply chain security",{"text":377,"config":378},"Software Compliance",{"href":379,"dataGaName":380,"dataGaLocation":278},"/solutions/software-compliance/","software compliance",{"title":382,"link":383,"items":388},"Measurement",{"config":384},{"icon":385,"href":386,"dataGaName":387,"dataGaLocation":278},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[389,393,397],{"text":390,"config":391},"Visibility & Measurement",{"href":386,"dataGaLocation":278,"dataGaName":392},"Visibility and Measurement",{"text":394,"config":395},"Value Stream Management",{"href":396,"dataGaLocation":278,"dataGaName":394},"/solutions/value-stream-management/",{"text":398,"config":399},"Analytics & Insights",{"href":400,"dataGaLocation":278,"dataGaName":401},"/solutions/analytics-and-insights/","Analytics and insights",{"title":403,"type":329,"items":404},"GitLab for",[405,411,417],{"text":406,"config":407},"Enterprise",{"icon":408,"href":409,"dataGaLocation":278,"dataGaName":410},"Building","/enterprise/","enterprise",{"text":412,"config":413},"Small Business",{"icon":414,"href":415,"dataGaLocation":278,"dataGaName":416},"Work","/small-business/","small business",{"text":418,"config":419},"Public Sector",{"icon":420,"href":421,"dataGaLocation":278,"dataGaName":422},"Organization","/solutions/public-sector/","public sector",{"text":424,"config":425},"Pricing",{"href":426,"dataGaName":427,"dataGaLocation":278,"dataNavLevelOne":427},"/pricing/","pricing",{"text":429,"config":430,"menu":432},"Resources",{"dataNavLevelOne":431},"resources",{"type":329,"link":433,"columns":437,"feature":531},{"text":434,"config":435},"View all resources",{"href":436,"dataGaName":431,"dataGaLocation":278},"/resources/",[438,471,498],{"title":439,"items":440},"Getting started",[441,446,451,456,461,466],{"text":442,"config":443},"Install",{"href":444,"dataGaName":445,"dataGaLocation":278},"/install/","install",{"text":447,"config":448},"Quick start guides",{"href":449,"dataGaName":450,"dataGaLocation":278},"/get-started/","quick setup checklists",{"text":452,"config":453},"Learn",{"href":454,"dataGaLocation":278,"dataGaName":455},"https://university.gitlab.com/","learn",{"text":457,"config":458},"Product documentation",{"href":459,"dataGaName":460,"dataGaLocation":278},"https://docs.gitlab.com/","product documentation",{"text":462,"config":463},"Best practice videos",{"href":464,"dataGaName":465,"dataGaLocation":278},"/getting-started-videos/","best practice videos",{"text":467,"config":468},"Integrations",{"href":469,"dataGaName":470,"dataGaLocation":278},"/integrations/","integrations",{"title":472,"items":473},"Discover",[474,479,484,489,493],{"text":475,"config":476},"Customer success stories",{"href":477,"dataGaName":478,"dataGaLocation":278},"/customers/","customer success stories",{"text":480,"config":481},"Blog",{"href":482,"dataGaName":483,"dataGaLocation":278},"/blog/","blog",{"text":485,"config":486},"Demo Hub",{"href":487,"dataGaName":488,"dataGaLocation":278},"/demo-hub/","demo hub",{"text":490,"config":491},"The Source",{"href":492,"dataGaName":483,"dataGaLocation":278},"/the-source/",{"text":494,"config":495},"Remote",{"href":496,"dataGaName":497,"dataGaLocation":278},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":499,"items":500},"Connect",[501,506,511,516,521,526],{"text":502,"config":503},"GitLab Services",{"href":504,"dataGaName":505,"dataGaLocation":278},"/services/","services",{"text":507,"config":508},"Contribute",{"href":509,"dataGaName":510,"dataGaLocation":278},"https://contributors.gitlab.com","contribute",{"text":512,"config":513},"Community",{"href":514,"dataGaName":515,"dataGaLocation":278},"/community/","community",{"text":517,"config":518},"Forum",{"href":519,"dataGaName":520,"dataGaLocation":278},"https://forum.gitlab.com/","forum",{"text":522,"config":523},"Events",{"href":524,"dataGaName":525,"dataGaLocation":278},"/events/","events",{"text":527,"config":528},"Partners",{"href":529,"dataGaName":530,"dataGaLocation":278},"/partners/","partners",{"config":532,"title":535,"text":536,"link":537},{"background":533,"textColor":534},"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":538,"config":539},"Read the latest",{"href":540,"dataGaName":541,"dataGaLocation":278},"/whats-new/","whats new",{"text":543,"config":544,"menu":546},"Company",{"dataNavLevelOne":545},"company",{"type":329,"columns":547},[548],{"items":549},[550,555,561,563,568,573,578,583,588,593],{"text":551,"config":552},"About",{"href":553,"dataGaName":554,"dataGaLocation":278},"/company/","about",{"text":556,"config":557,"footerGa":560},"Jobs",{"href":558,"dataGaName":559,"dataGaLocation":278},"/jobs/","jobs",{"dataGaName":559},{"text":522,"config":562},{"href":524,"dataGaName":525,"dataGaLocation":278},{"text":564,"config":565},"Leadership",{"href":566,"dataGaName":567,"dataGaLocation":278},"/company/team/e-group/","leadership",{"text":569,"config":570},"Handbook",{"href":571,"dataGaName":572,"dataGaLocation":278},"https://handbook.gitlab.com/","handbook",{"text":574,"config":575},"Investor relations",{"href":576,"dataGaName":577,"dataGaLocation":278},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":579,"config":580},"Trust Center",{"href":581,"dataGaName":582,"dataGaLocation":278},"/security/","trust center",{"text":584,"config":585},"AI Transparency Center",{"href":586,"dataGaName":587,"dataGaLocation":278},"/ai-transparency-center/","ai transparency center",{"text":589,"config":590},"Newsletter",{"href":591,"dataGaName":592,"dataGaLocation":278},"/company/contact/#contact-forms","newsletter",{"text":594,"config":595},"Press",{"href":596,"dataGaName":597,"dataGaLocation":278},"/press/","press",{"text":599,"config":600,"menu":601},"Contact us",{"dataNavLevelOne":545},{"type":329,"columns":602},[603],{"items":604},[605,610,615],{"text":606,"config":607},"Talk to sales",{"href":608,"dataGaName":609,"dataGaLocation":278},"/sales/","talk to sales",{"text":611,"config":612},"Support portal",{"href":613,"dataGaName":614,"dataGaLocation":278},"https://support.gitlab.com/hc/en-us","support portal",{"text":616,"config":617},"Customer portal",{"href":618,"dataGaName":619,"dataGaLocation":278},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":621,"login":622,"suggestions":629},"Close",{"text":623,"link":624},"To search repositories and projects, login to",{"text":625,"config":626},"gitlab.com",{"href":292,"dataGaName":627,"dataGaLocation":628},"search login","search",{"text":630,"default":631},"Suggestions",[632,634,638,640,644,648],{"text":309,"config":633},{"href":314,"dataGaName":309,"dataGaLocation":628},{"text":635,"config":636},"Code Suggestions (AI)",{"href":637,"dataGaName":635,"dataGaLocation":628},"/solutions/code-suggestions/",{"text":345,"config":639},{"href":46,"dataGaName":345,"dataGaLocation":628},{"text":641,"config":642},"GitLab on AWS",{"href":643,"dataGaName":641,"dataGaLocation":628},"/partners/technology-partners/aws/",{"text":645,"config":646},"GitLab on Google Cloud",{"href":647,"dataGaName":645,"dataGaLocation":628},"/partners/technology-partners/google-cloud-platform/",{"text":649,"config":650},"Why GitLab?",{"href":322,"dataGaName":649,"dataGaLocation":628},{"freeTrial":652,"mobileIcon":657,"desktopIcon":662,"secondaryButton":665},{"text":653,"config":654},"Start free trial",{"href":655,"dataGaName":283,"dataGaLocation":656},"https://gitlab.com/-/trials/new/","nav",{"altText":658,"config":659},"Gitlab Icon",{"src":660,"dataGaName":661,"dataGaLocation":656},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":658,"config":663},{"src":664,"dataGaName":661,"dataGaLocation":656},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":666,"config":667},"Get Started",{"href":668,"dataGaName":669,"dataGaLocation":656},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":671,"mobileIcon":675,"desktopIcon":677},{"text":672,"config":673},"Learn more about GitLab Duo",{"href":314,"dataGaName":674,"dataGaLocation":656},"gitlab duo",{"altText":658,"config":676},{"src":660,"dataGaName":661,"dataGaLocation":656},{"altText":658,"config":678},{"src":664,"dataGaName":661,"dataGaLocation":656},{"button":680,"mobileIcon":685,"desktopIcon":687},{"text":681,"config":682},"/switch",{"href":683,"dataGaName":684,"dataGaLocation":656},"#contact","switch",{"altText":658,"config":686},{"src":660,"dataGaName":661,"dataGaLocation":656},{"altText":658,"config":688},{"src":689,"dataGaName":661,"dataGaLocation":656},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":691,"mobileIcon":696,"desktopIcon":698},{"text":692,"config":693},"Back to pricing",{"href":426,"dataGaName":694,"dataGaLocation":656,"icon":695},"back to pricing","GoBack",{"altText":658,"config":697},{"src":660,"dataGaName":661,"dataGaLocation":656},{"altText":658,"config":699},{"src":664,"dataGaName":661,"dataGaLocation":656},{"title":701,"titleMobile":702,"button":703,"config":708},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":320,"config":704},{"href":705,"dataGaName":706,"dataGaLocation":707},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":709,"disabled":247},"release",{"data":711},{"text":712,"source":713,"edit":719,"contribute":724,"config":729,"items":733,"minimal":943},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":714,"config":715},"View page source",{"href":716,"dataGaName":717,"dataGaLocation":718},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":720,"config":721},"Edit this page",{"href":722,"dataGaName":723,"dataGaLocation":718},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":725,"config":726},"Please contribute",{"href":727,"dataGaName":728,"dataGaLocation":718},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":228,"facebook":730,"youtube":731,"linkedin":732},"https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[734,781,835,879,911],{"title":424,"links":735,"subMenu":750},[736,740,745],{"text":737,"config":738},"View plans",{"href":426,"dataGaName":739,"dataGaLocation":718},"view plans",{"text":741,"config":742},"Why Premium?",{"href":743,"dataGaName":744,"dataGaLocation":718},"/pricing/premium/","why premium",{"text":746,"config":747},"Why Ultimate?",{"href":748,"dataGaName":749,"dataGaLocation":718},"/pricing/ultimate/","why ultimate",[751],{"title":752,"links":753},"Contact Us",[754,757,759,761,766,771,776],{"text":755,"config":756},"Contact sales",{"href":608,"dataGaName":288,"dataGaLocation":718},{"text":611,"config":758},{"href":613,"dataGaName":614,"dataGaLocation":718},{"text":616,"config":760},{"href":618,"dataGaName":619,"dataGaLocation":718},{"text":762,"config":763},"Status",{"href":764,"dataGaName":765,"dataGaLocation":718},"https://status.gitlab.com/","status",{"text":767,"config":768},"Terms of use",{"href":769,"dataGaName":770,"dataGaLocation":718},"/terms/","terms of use",{"text":772,"config":773},"Privacy statement",{"href":774,"dataGaName":775,"dataGaLocation":718},"/privacy/","privacy statement",{"text":777,"config":778},"Cookie preferences",{"dataGaName":779,"dataGaLocation":718,"id":780,"isOneTrustButton":263},"cookie preferences","ot-sdk-btn",{"title":325,"links":782,"subMenu":791},[783,787],{"text":784,"config":785},"DevSecOps platform",{"href":307,"dataGaName":786,"dataGaLocation":718},"devsecops platform",{"text":788,"config":789},"AI-Assisted Development",{"href":314,"dataGaName":790,"dataGaLocation":718},"ai-assisted development",[792],{"title":793,"links":794},"Topics",[795,800,805,810,815,820,825,830],{"text":796,"config":797},"CICD",{"href":798,"dataGaName":799,"dataGaLocation":718},"/topics/ci-cd/","cicd",{"text":801,"config":802},"GitOps",{"href":803,"dataGaName":804,"dataGaLocation":718},"/topics/gitops/","gitops",{"text":806,"config":807},"DevOps",{"href":808,"dataGaName":809,"dataGaLocation":718},"/topics/devops/","devops",{"text":811,"config":812},"Version Control",{"href":813,"dataGaName":814,"dataGaLocation":718},"/topics/version-control/","version control",{"text":816,"config":817},"DevSecOps",{"href":818,"dataGaName":819,"dataGaLocation":718},"/topics/devsecops/","devsecops",{"text":821,"config":822},"Cloud Native",{"href":823,"dataGaName":824,"dataGaLocation":718},"/topics/cloud-native/","cloud native",{"text":826,"config":827},"AI for Coding",{"href":828,"dataGaName":829,"dataGaLocation":718},"/topics/devops/ai-for-coding/","ai for coding",{"text":831,"config":832},"Agentic AI",{"href":833,"dataGaName":834,"dataGaLocation":718},"/topics/agentic-ai/","agentic ai",{"title":836,"links":837},"Solutions",[838,840,842,847,851,854,858,861,863,866,869,874],{"text":368,"config":839},{"href":363,"dataGaName":368,"dataGaLocation":718},{"text":357,"config":841},{"href":341,"dataGaName":342,"dataGaLocation":718},{"text":843,"config":844},"Agile development",{"href":845,"dataGaName":846,"dataGaLocation":718},"/solutions/agile-delivery/","agile delivery",{"text":848,"config":849},"SCM",{"href":353,"dataGaName":850,"dataGaLocation":718},"source code management",{"text":796,"config":852},{"href":46,"dataGaName":853,"dataGaLocation":718},"continuous integration & delivery",{"text":855,"config":856},"Value stream management",{"href":396,"dataGaName":857,"dataGaLocation":718},"value stream management",{"text":801,"config":859},{"href":860,"dataGaName":804,"dataGaLocation":718},"/solutions/gitops/",{"text":406,"config":862},{"href":409,"dataGaName":410,"dataGaLocation":718},{"text":864,"config":865},"Small business",{"href":415,"dataGaName":416,"dataGaLocation":718},{"text":867,"config":868},"Public sector",{"href":421,"dataGaName":422,"dataGaLocation":718},{"text":870,"config":871},"Education",{"href":872,"dataGaName":873,"dataGaLocation":718},"/solutions/education/","education",{"text":875,"config":876},"Financial services",{"href":877,"dataGaName":878,"dataGaLocation":718},"/solutions/finance/","financial services",{"title":429,"links":880},[881,883,885,887,890,892,895,897,899,901,903,905,907,909],{"text":442,"config":882},{"href":444,"dataGaName":445,"dataGaLocation":718},{"text":447,"config":884},{"href":449,"dataGaName":450,"dataGaLocation":718},{"text":452,"config":886},{"href":454,"dataGaName":455,"dataGaLocation":718},{"text":457,"config":888},{"href":459,"dataGaName":889,"dataGaLocation":718},"docs",{"text":480,"config":891},{"href":482,"dataGaName":483,"dataGaLocation":718},{"text":893,"config":894},"What's new",{"href":540,"dataGaName":541,"dataGaLocation":718},{"text":475,"config":896},{"href":477,"dataGaName":478,"dataGaLocation":718},{"text":494,"config":898},{"href":496,"dataGaName":497,"dataGaLocation":718},{"text":502,"config":900},{"href":504,"dataGaName":505,"dataGaLocation":718},{"text":507,"config":902},{"href":509,"dataGaName":510,"dataGaLocation":718},{"text":512,"config":904},{"href":514,"dataGaName":515,"dataGaLocation":718},{"text":517,"config":906},{"href":519,"dataGaName":520,"dataGaLocation":718},{"text":522,"config":908},{"href":524,"dataGaName":525,"dataGaLocation":718},{"text":527,"config":910},{"href":529,"dataGaName":530,"dataGaLocation":718},{"title":543,"links":912},[913,915,917,919,921,923,927,932,934,936,938],{"text":551,"config":914},{"href":553,"dataGaName":545,"dataGaLocation":718},{"text":556,"config":916},{"href":558,"dataGaName":559,"dataGaLocation":718},{"text":564,"config":918},{"href":566,"dataGaName":567,"dataGaLocation":718},{"text":569,"config":920},{"href":571,"dataGaName":572,"dataGaLocation":718},{"text":574,"config":922},{"href":576,"dataGaName":577,"dataGaLocation":718},{"text":924,"config":925},"Sustainability",{"href":926,"dataGaName":924,"dataGaLocation":718},"/sustainability/",{"text":928,"config":929},"Diversity, inclusion and belonging (DIB)",{"href":930,"dataGaName":931,"dataGaLocation":718},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":579,"config":933},{"href":581,"dataGaName":582,"dataGaLocation":718},{"text":589,"config":935},{"href":591,"dataGaName":592,"dataGaLocation":718},{"text":594,"config":937},{"href":596,"dataGaName":597,"dataGaLocation":718},{"text":939,"config":940},"Modern Slavery Transparency Statement",{"href":941,"dataGaName":942,"dataGaLocation":718},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":944},[945,948,951],{"text":946,"config":947},"Terms",{"href":769,"dataGaName":770,"dataGaLocation":718},{"text":949,"config":950},"Cookies",{"dataGaName":779,"dataGaLocation":718,"id":780,"isOneTrustButton":263},{"text":952,"config":953},"Privacy",{"href":774,"dataGaName":775,"dataGaLocation":718},[955],{"id":956,"title":7,"body":246,"config":957,"content":959,"description":246,"extension":963,"meta":964,"navigation":263,"path":965,"seo":966,"stem":967,"__hash__":968},"blogAuthors/en-us/blog/authors/marcia-ramos.yml",{"template":958},"BlogAuthor",{"name":7,"config":960},{"headshot":961,"ctfId":962},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659488/Blog/Author%20Headshots/gitlab-logo-extra-whitespace.png","Marcia-Ramos","yml",{},"/en-us/blog/authors/marcia-ramos",{},"en-us/blog/authors/marcia-ramos","UrFu-iLS1mEkxVCheaz27cAjfZXeLI9U1n5dGSOHXY4",[970,979,987],{"title":971,"description":972,"heroImage":973,"category":242,"date":974,"authors":975,"slug":978,"externalUrl":246},"Confidential AI for GitLab Self-Hosted","Give developers AI coding agents in GitLab Duo without source code leaving a hardware-encrypted boundary — no GPUs needed.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1773866173/vte9qh8rriznvyclhkes.png","2026-08-06",[976,977],"Mathias Ewald","Martin Paloncy, Edgeless Systems","confidential-ai-for-gitlab-self-hosted",{"title":980,"description":981,"heroImage":982,"category":242,"date":983,"authors":984,"slug":986,"externalUrl":246},"Green DevOps: Why carbon measurement belongs in your CI/CD pipeline","CI/CD pipelines have a hidden carbon cost. Here's why measuring it matters, and how you can get started with Eco CI and Carmen in GitLab.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1765809212/noh0mdfn9o94ry9ykura.png","2026-07-09",[985],"Lysanne Pinto","green-devops-carbon-measurement-cicd-pipeline",{"title":988,"description":989,"heroImage":990,"category":242,"date":991,"authors":992,"slug":994,"externalUrl":246},"How to build CI/CD observability at scale","This practical guide to GitLab pipeline analytics helps self-managed users gain operational insights using Prometheus and Grafana.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1774465167/n5hlvrsrheadeccyr1oz.png","2026-04-28",[993],"Paul Meresanu","how-to-build-ci-cd-observability-at-scale",{"promotions":996},[997,1011,1023,1035],{"id":998,"categories":999,"header":1001,"text":1002,"button":1003,"image":1008},"ai-modernization",[1000],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":1004,"config":1005},"Get your AI maturity score",{"href":1006,"dataGaName":1007,"dataGaLocation":483},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":1009},{"src":1010},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1012,"categories":1013,"header":1015,"text":1002,"button":1016,"image":1020},"devops-modernization",[1014,819],"product","Are you just managing tools or shipping innovation?",{"text":1017,"config":1018},"Get your DevOps maturity score",{"href":1019,"dataGaName":1007,"dataGaLocation":483},"/assessments/devops-modernization-assessment/",{"config":1021},{"src":1022},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1024,"categories":1025,"header":1027,"text":1002,"button":1028,"image":1032},"security-modernization",[1026],"security","Are you trading speed for security?",{"text":1029,"config":1030},"Get your security maturity score",{"href":1031,"dataGaName":1007,"dataGaLocation":483},"/assessments/security-modernization-assessment/",{"config":1033},{"src":1034},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1036,"paths":1037,"header":1040,"text":1041,"button":1042,"image":1047},"github-azure-migration",[1038,1039],"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":1043,"config":1044},"See how GitLab compares to GitHub",{"href":1045,"dataGaName":1046,"dataGaLocation":483},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1048},{"src":1022},{"header":1050,"blurb":1051,"button":1052,"secondaryButton":1057},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1053,"config":1054},"Get your free trial",{"href":1055,"dataGaName":283,"dataGaLocation":1056},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":755,"config":1058},{"href":608,"dataGaName":288,"dataGaLocation":1056},1786803751830]