[{"data":1,"prerenderedAt":1025},["ShallowReactive",2],{"/blog/feature-highlight-move-issues":3,"navigation-en-us":238,"banner-en-us":666,"footer-en-us":676,"blog-post-authors-en-us-Grzegorz Bizon":921,"blog-related-posts-en-us-feature-highlight-move-issues":936,"blog-promotions-en-us":961,"next-steps-en-us":1015},{"id":4,"title":5,"authors":6,"body":8,"category":212,"date":213,"description":214,"extension":215,"externalUrl":216,"faq":216,"featured":217,"heroImage":218,"meta":219,"navigation":127,"path":229,"seo":230,"slug":234,"stem":235,"tags":216,"template":236,"updatedDate":216,"__hash__":237},"blogPosts/en-us/blog/feature-highlight-move-issues.md","Feature highlight: Move issues between projects",[7],"Grzegorz Bizon",{"type":9,"value":10,"toc":209},"minimark",[11,22,25,32,35,38,44,53,58,61,64,82,85,95,106,135,143,156,159,162,199,202,205],[12,13,14,15,21],"p",{},"In ",[16,17,20],"a",{"href":18,"rel":19},"https://docs.gitlab.com/releases/",[],"8.6"," we added a feature allowing you to move issues between projects.",[12,23,24],{},"If you work on multiple projects, it's possible to accidentally create an issue\nin the wrong issue tracker. It's a seemingly simple mistake that is easy to miss.\nLet's say you don't catch it right away and you do a decent amount of work\non the wrong project. Now, your \"seemingly simple\" mistake just became a bigger one.\nWe've all been in this position before. With our 8.6 release, we want to avoid the\npanic that can come from creating an issue in the wrong project. Now, if you\ncreate an issue in the wrong project, you can easily move it to the right one.",[12,26,27],{},[28,29],"img",{"alt":30,"src":31},"Move issues between projects","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782405566/site/Content%20Images/8_6/move-issue.png",[12,33,34],{},"When you move the issue, the original issue will be copied, closed, and then referenced.\nThis process makes sure nothing is lost in the move.",[12,36,37],{},"Additionally, anyone who is subscribed to the issue will get a notification that the\nissue was moved, with a link to the new location. This will, of course,\ndepend on your notification settings.",[12,39,40],{},[28,41],{"alt":42,"src":43},"Moved issue email","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398728/blog/Content%20Images/moved-issue-email.png",[12,45,46,47,52],{},"It's a relatively simple feature, but it was\n",[16,48,51],{"href":49,"rel":50},"https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/2831",[],"tricky to implement",".",[54,55,57],"h2",{"id":56},"behind-the-scenes-moving-issues-between-projects","Behind the scenes: Moving issues between projects",[12,59,60],{},"At first, moving issue between projects seemed like an easy task. However,\nwe encountered a tricky problem with references in the issue description or\ncomments.",[12,62,63],{},"Suppose we have a project called Alice, and we created an issue inside it:",[65,66,71],"pre",{"className":67,"code":68,"language":69,"meta":70,"style":70},"language-markdown shiki shiki-themes github-light","Hey, this issue is related to #123 and the solution is implemented in !456.\n","markdown","",[72,73,74],"code",{"__ignoreMap":70},[75,76,79],"span",{"class":77,"line":78},"line",1,[75,80,68],{"class":81},"sgsFI",[12,83,84],{},"Now let's suppose we want to move this issue to Bob. The reference #123 points\nto an issue in Alice. Similarly, !456 points to a merge request in Alice as well.\nIf a user moves an issue to Bob, these references need to be updated so that they\ncontinue pointing to Alice, not Bob. Otherwise, the resulting references would\nlink to the wrong project. The same goes for snippets, labels, commits, etc.",[12,86,87,88,91,92,52],{},"We knew that we needed to fix these references by using GitLab's Markdown\ncross-project reference notation. However, at the time, not everything in GitLab\nsupported this notation. For example, labels (e.g. ",[72,89,90],{},"~\"My Label\"",") could not be\nshared across projects. We had to fix that, so we did via ",[75,93,94],{},"Merge request !2996",[12,96,97,98,101,102,105],{},"Another step was simply substituting ",[72,99,100],{},"#123"," with ",[72,103,104],{},"gitlab-org/gitlab-ce#123",".\nBut it is possible you could have text like this:",[65,107,109],{"className":67,"code":108,"language":69,"meta":70,"style":70},"Hi, this is a duplicate of http://gitlab.com/gitlab-org/gitlab-ce/issues/123.\nAlso see documentation https://docs.gitlab.com/some-page/#123. Also take a look at this code:\n\n    puts 'some code' #123 is a comment\n\n",[72,110,111,116,122,129],{"__ignoreMap":70},[75,112,113],{"class":77,"line":78},[75,114,115],{"class":81},"Hi, this is a duplicate of http://gitlab.com/gitlab-org/gitlab-ce/issues/123.\n",[75,117,119],{"class":77,"line":118},2,[75,120,121],{"class":81},"Also see documentation https://docs.gitlab.com/some-page/#123. Also take a look at this code:\n",[75,123,125],{"class":77,"line":124},3,[75,126,128],{"emptyLinePlaceholder":127},true,"\n",[75,130,132],{"class":77,"line":131},4,[75,133,134],{"class":81},"    puts 'some code' #123 is a comment\n",[12,136,137,138,142],{},"So we know that this description holds a reference to issue 123 but we do not\nknow ",[139,140,141],"em",{},"where it is",", or how to substitute it in the right place. We needed to modify\nthe source text. However, changing the source text would interfere with Markdown.\nTo solve this, I tried some prototypes but couldn't find a better solution than\nwriting yet another parser for Markdown that would support the full Abstract\nSyntax Tree of Markdown. This would add support for mutable nodes in a tree,\nallowing us to modify text where needed.",[12,144,145,146,151,152,155],{},"However, once I started this work, I felt that this was a complicated solution so\nI decided to look for a ",[16,147,150],{"href":148,"rel":149},"https://handbook.gitlab.com/handbook/values/",[],"boring solution",". I reached out to my fellow\ndevelopers on the team to find a better boring solution. After sometime,\n",[75,153,154],{},"Kamil"," helped me and we came with different solution.",[12,157,158],{},"We decided to use existing mechanisms to verify if we can substitute reference\nin place it has been detected at. We knew that resulting HTML should not change,\nso we could try substituting local reference with cross-project variation and\nsee if generated HTML is different than the original one. If it didn't change,\nthen substitution is valid.",[12,160,161],{},"Below you can find some implementation details of current solution.",[163,164,165,180,190,196],"ol",{},[166,167,168,169,172,173,175,176,179],"li",{},"Match all local references to project, issue, merge request and all other\nentities using Regexp.",[170,171],"br",{},"References like ",[72,174,100],{}," for issue, ",[72,177,178],{},"!456"," for merge request are being\nmatched.",[166,181,182,183,185,186,101,188,52],{},"Substitute each subsequent match with fully-expanded cross-project\nreference.",[170,184],{},"This substitutes reference like ",[72,187,100],{},[72,189,104],{},[166,191,192,193,195],{},"For each substitution generate HTML twice, using a new content and using an\nold content.",[170,194],{},"Because of the fact that cross-project reference, when used in a context\nof the project it refers to is rendered as a local reference, both resulting\nHTMLs should be the same.",[166,197,198],{},"If resulting HTMLs are the same, we permanently alter original text to\ncontain cross-project reference instead of local reference.",[12,200,201],{},"This solution is not the most optimal one because of performance reasons, but\nit allowed us to ship this feature quickly and in the future we can improve it\nby using Abstract Syntax Tree implementation for Markdown.",[12,203,204],{},"With this approach, we are also sure that modifications to issue/comments\ncontent are correct and don't break your issue which can hold valuable\ninformation.",[206,207,208],"style",{},"html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}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":70,"searchDepth":118,"depth":118,"links":210},[211],{"id":56,"depth":118,"text":57},"insights","2016-04-20","In GitLab 8.6 we added a feature allowing you to move issues between projects.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749684674/Blog/Hero%20Images/truck.jpg",{"excerpt":220},{"type":9,"value":221},[222,227],[12,223,14,224,21],{},[16,225,20],{"href":18,"rel":226},[],[12,228,24],{},"/en-us/blog/feature-highlight-move-issues",{"title":5,"description":214,"ogTitle":5,"ogDescription":214,"noIndex":217,"ogImage":218,"ogUrl":231,"ogSiteName":232,"ogType":233,"canonicalUrls":231},"https://about.gitlab.com/blog/feature-highlight-move-issues","https://about.gitlab.com","article","feature-highlight-move-issues","en-us/blog/feature-highlight-move-issues","BlogPost","TlUIicGxE5SkEY40U0rx5n-SeLLr-7fcRwL43_0Sq-A",{"logo":239,"freeTrial":244,"sales":249,"login":254,"items":259,"search":586,"minimal":617,"duo":636,"switchNav":645,"pricingDeployment":656},{"config":240},{"href":241,"dataGaName":242,"dataGaLocation":243},"/","gitlab logo","header",{"text":245,"config":246},"Get free trial",{"href":247,"dataGaName":248,"dataGaLocation":243},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":250,"config":251},"Request a demo",{"href":252,"dataGaName":253,"dataGaLocation":243},"/sales/?contact-topic=request-demo","sales",{"text":255,"config":256},"Sign in",{"href":257,"dataGaName":258,"dataGaLocation":243},"https://gitlab.com/users/sign_in/","sign in",[260,289,389,394,508,564],{"text":261,"config":262,"menu":264},"Platform",{"dataNavLevelOne":263},"platform",{"type":265,"columns":266},"cards",[267,273,281],{"title":261,"description":268,"link":269},"The intelligent orchestration platform for DevSecOps",{"text":270,"config":271},"Explore our Platform",{"href":272,"dataGaName":263,"dataGaLocation":243},"/platform/",{"title":274,"description":275,"link":276},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":277,"config":278},"Meet GitLab Duo",{"href":279,"dataGaName":280,"dataGaLocation":243},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":282,"description":283,"link":284},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":285,"config":286},"Learn more",{"href":287,"dataGaName":288,"dataGaLocation":243},"/why-gitlab/","why gitlab",{"text":290,"left":127,"config":291,"menu":293},"Product",{"dataNavLevelOne":292},"solutions",{"type":294,"link":295,"columns":299,"feature":368},"lists",{"text":296,"config":297},"View all Solutions",{"href":298,"dataGaName":292,"dataGaLocation":243},"/solutions/",[300,324,347],{"title":301,"description":302,"link":303,"items":308},"Automation","CI/CD and automation to accelerate deployment",{"config":304},{"icon":305,"href":306,"dataGaName":307,"dataGaLocation":243},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[309,313,316,320],{"text":310,"config":311},"CI/CD",{"href":312,"dataGaLocation":243,"dataGaName":310},"/solutions/continuous-integration/",{"text":274,"config":314},{"href":279,"dataGaLocation":243,"dataGaName":315},"gitlab duo agent platform - product menu",{"text":317,"config":318},"Source Code Management",{"href":319,"dataGaLocation":243,"dataGaName":317},"/solutions/source-code-management/",{"text":321,"config":322},"Automated Software Delivery",{"href":306,"dataGaLocation":243,"dataGaName":323},"Automated software delivery",{"title":325,"description":326,"link":327,"items":332},"Security","Deliver code faster without compromising security",{"config":328},{"href":329,"dataGaName":330,"dataGaLocation":243,"icon":331},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[333,337,342],{"text":334,"config":335},"Application Security Testing",{"href":329,"dataGaName":336,"dataGaLocation":243},"Application security testing",{"text":338,"config":339},"Software Supply Chain Security",{"href":340,"dataGaLocation":243,"dataGaName":341},"/solutions/supply-chain/","Software supply chain security",{"text":343,"config":344},"Software Compliance",{"href":345,"dataGaName":346,"dataGaLocation":243},"/solutions/software-compliance/","software compliance",{"title":348,"link":349,"items":354},"Measurement",{"config":350},{"icon":351,"href":352,"dataGaName":353,"dataGaLocation":243},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[355,359,363],{"text":356,"config":357},"Visibility & Measurement",{"href":352,"dataGaLocation":243,"dataGaName":358},"Visibility and Measurement",{"text":360,"config":361},"Value Stream Management",{"href":362,"dataGaLocation":243,"dataGaName":360},"/solutions/value-stream-management/",{"text":364,"config":365},"Analytics & Insights",{"href":366,"dataGaLocation":243,"dataGaName":367},"/solutions/analytics-and-insights/","Analytics and insights",{"title":369,"type":294,"items":370},"GitLab for",[371,377,383],{"text":372,"config":373},"Enterprise",{"icon":374,"href":375,"dataGaLocation":243,"dataGaName":376},"Building","/enterprise/","enterprise",{"text":378,"config":379},"Small Business",{"icon":380,"href":381,"dataGaLocation":243,"dataGaName":382},"Work","/small-business/","small business",{"text":384,"config":385},"Public Sector",{"icon":386,"href":387,"dataGaLocation":243,"dataGaName":388},"Organization","/solutions/public-sector/","public sector",{"text":390,"config":391},"Pricing",{"href":392,"dataGaName":393,"dataGaLocation":243,"dataNavLevelOne":393},"/pricing/","pricing",{"text":395,"config":396,"menu":398},"Resources",{"dataNavLevelOne":397},"resources",{"type":294,"link":399,"columns":403,"feature":497},{"text":400,"config":401},"View all resources",{"href":402,"dataGaName":397,"dataGaLocation":243},"/resources/",[404,437,464],{"title":405,"items":406},"Getting started",[407,412,417,422,427,432],{"text":408,"config":409},"Install",{"href":410,"dataGaName":411,"dataGaLocation":243},"/install/","install",{"text":413,"config":414},"Quick start guides",{"href":415,"dataGaName":416,"dataGaLocation":243},"/get-started/","quick setup checklists",{"text":418,"config":419},"Learn",{"href":420,"dataGaLocation":243,"dataGaName":421},"https://university.gitlab.com/","learn",{"text":423,"config":424},"Product documentation",{"href":425,"dataGaName":426,"dataGaLocation":243},"https://docs.gitlab.com/","product documentation",{"text":428,"config":429},"Best practice videos",{"href":430,"dataGaName":431,"dataGaLocation":243},"/getting-started-videos/","best practice videos",{"text":433,"config":434},"Integrations",{"href":435,"dataGaName":436,"dataGaLocation":243},"/integrations/","integrations",{"title":438,"items":439},"Discover",[440,445,450,455,459],{"text":441,"config":442},"Customer success stories",{"href":443,"dataGaName":444,"dataGaLocation":243},"/customers/","customer success stories",{"text":446,"config":447},"Blog",{"href":448,"dataGaName":449,"dataGaLocation":243},"/blog/","blog",{"text":451,"config":452},"Demo Hub",{"href":453,"dataGaName":454,"dataGaLocation":243},"/demo-hub/","demo hub",{"text":456,"config":457},"The Source",{"href":458,"dataGaName":449,"dataGaLocation":243},"/the-source/",{"text":460,"config":461},"Remote",{"href":462,"dataGaName":463,"dataGaLocation":243},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":465,"items":466},"Connect",[467,472,477,482,487,492],{"text":468,"config":469},"GitLab Services",{"href":470,"dataGaName":471,"dataGaLocation":243},"/services/","services",{"text":473,"config":474},"Contribute",{"href":475,"dataGaName":476,"dataGaLocation":243},"https://contributors.gitlab.com","contribute",{"text":478,"config":479},"Community",{"href":480,"dataGaName":481,"dataGaLocation":243},"/community/","community",{"text":483,"config":484},"Forum",{"href":485,"dataGaName":486,"dataGaLocation":243},"https://forum.gitlab.com/","forum",{"text":488,"config":489},"Events",{"href":490,"dataGaName":491,"dataGaLocation":243},"/events/","events",{"text":493,"config":494},"Partners",{"href":495,"dataGaName":496,"dataGaLocation":243},"/partners/","partners",{"config":498,"title":501,"text":502,"link":503},{"background":499,"textColor":500},"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":504,"config":505},"Read the latest",{"href":506,"dataGaName":507,"dataGaLocation":243},"/whats-new/","whats new",{"text":509,"config":510,"menu":512},"Company",{"dataNavLevelOne":511},"company",{"type":294,"columns":513},[514],{"items":515},[516,521,527,529,534,539,544,549,554,559],{"text":517,"config":518},"About",{"href":519,"dataGaName":520,"dataGaLocation":243},"/company/","about",{"text":522,"config":523,"footerGa":526},"Jobs",{"href":524,"dataGaName":525,"dataGaLocation":243},"/jobs/","jobs",{"dataGaName":525},{"text":488,"config":528},{"href":490,"dataGaName":491,"dataGaLocation":243},{"text":530,"config":531},"Leadership",{"href":532,"dataGaName":533,"dataGaLocation":243},"/company/team/e-group/","leadership",{"text":535,"config":536},"Handbook",{"href":537,"dataGaName":538,"dataGaLocation":243},"https://handbook.gitlab.com/","handbook",{"text":540,"config":541},"Investor relations",{"href":542,"dataGaName":543,"dataGaLocation":243},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":545,"config":546},"Trust Center",{"href":547,"dataGaName":548,"dataGaLocation":243},"/security/","trust center",{"text":550,"config":551},"AI Transparency Center",{"href":552,"dataGaName":553,"dataGaLocation":243},"/ai-transparency-center/","ai transparency center",{"text":555,"config":556},"Newsletter",{"href":557,"dataGaName":558,"dataGaLocation":243},"/company/contact/#contact-forms","newsletter",{"text":560,"config":561},"Press",{"href":562,"dataGaName":563,"dataGaLocation":243},"/press/","press",{"text":565,"config":566,"menu":567},"Contact us",{"dataNavLevelOne":511},{"type":294,"columns":568},[569],{"items":570},[571,576,581],{"text":572,"config":573},"Talk to sales",{"href":574,"dataGaName":575,"dataGaLocation":243},"/sales/","talk to sales",{"text":577,"config":578},"Support portal",{"href":579,"dataGaName":580,"dataGaLocation":243},"https://support.gitlab.com/hc/en-us","support portal",{"text":582,"config":583},"Customer portal",{"href":584,"dataGaName":585,"dataGaLocation":243},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":587,"login":588,"suggestions":595},"Close",{"text":589,"link":590},"To search repositories and projects, login to",{"text":591,"config":592},"gitlab.com",{"href":257,"dataGaName":593,"dataGaLocation":594},"search login","search",{"text":596,"default":597},"Suggestions",[598,600,604,606,610,614],{"text":274,"config":599},{"href":279,"dataGaName":274,"dataGaLocation":594},{"text":601,"config":602},"Code Suggestions (AI)",{"href":603,"dataGaName":601,"dataGaLocation":594},"/solutions/code-suggestions/",{"text":310,"config":605},{"href":312,"dataGaName":310,"dataGaLocation":594},{"text":607,"config":608},"GitLab on AWS",{"href":609,"dataGaName":607,"dataGaLocation":594},"/partners/technology-partners/aws/",{"text":611,"config":612},"GitLab on Google Cloud",{"href":613,"dataGaName":611,"dataGaLocation":594},"/partners/technology-partners/google-cloud-platform/",{"text":615,"config":616},"Why GitLab?",{"href":287,"dataGaName":615,"dataGaLocation":594},{"freeTrial":618,"mobileIcon":623,"desktopIcon":628,"secondaryButton":631},{"text":619,"config":620},"Start free trial",{"href":621,"dataGaName":248,"dataGaLocation":622},"https://gitlab.com/-/trials/new/","nav",{"altText":624,"config":625},"Gitlab Icon",{"src":626,"dataGaName":627,"dataGaLocation":622},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":624,"config":629},{"src":630,"dataGaName":627,"dataGaLocation":622},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":632,"config":633},"Get Started",{"href":634,"dataGaName":635,"dataGaLocation":622},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":637,"mobileIcon":641,"desktopIcon":643},{"text":638,"config":639},"Learn more about GitLab Duo",{"href":279,"dataGaName":640,"dataGaLocation":622},"gitlab duo",{"altText":624,"config":642},{"src":626,"dataGaName":627,"dataGaLocation":622},{"altText":624,"config":644},{"src":630,"dataGaName":627,"dataGaLocation":622},{"button":646,"mobileIcon":651,"desktopIcon":653},{"text":647,"config":648},"/switch",{"href":649,"dataGaName":650,"dataGaLocation":622},"#contact","switch",{"altText":624,"config":652},{"src":626,"dataGaName":627,"dataGaLocation":622},{"altText":624,"config":654},{"src":655,"dataGaName":627,"dataGaLocation":622},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":657,"mobileIcon":662,"desktopIcon":664},{"text":658,"config":659},"Back to pricing",{"href":392,"dataGaName":660,"dataGaLocation":622,"icon":661},"back to pricing","GoBack",{"altText":624,"config":663},{"src":626,"dataGaName":627,"dataGaLocation":622},{"altText":624,"config":665},{"src":630,"dataGaName":627,"dataGaLocation":622},{"title":667,"titleMobile":668,"button":669,"config":674},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":285,"config":670},{"href":671,"dataGaName":672,"dataGaLocation":673},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":675,"disabled":217},"release",{"data":677},{"text":678,"source":679,"edit":685,"contribute":690,"config":695,"items":700,"minimal":910},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":680,"config":681},"View page source",{"href":682,"dataGaName":683,"dataGaLocation":684},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":686,"config":687},"Edit this page",{"href":688,"dataGaName":689,"dataGaLocation":684},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":691,"config":692},"Please contribute",{"href":693,"dataGaName":694,"dataGaLocation":684},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":696,"facebook":697,"youtube":698,"linkedin":699},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[701,748,802,846,878],{"title":390,"links":702,"subMenu":717},[703,707,712],{"text":704,"config":705},"View plans",{"href":392,"dataGaName":706,"dataGaLocation":684},"view plans",{"text":708,"config":709},"Why Premium?",{"href":710,"dataGaName":711,"dataGaLocation":684},"/pricing/premium/","why premium",{"text":713,"config":714},"Why Ultimate?",{"href":715,"dataGaName":716,"dataGaLocation":684},"/pricing/ultimate/","why ultimate",[718],{"title":719,"links":720},"Contact Us",[721,724,726,728,733,738,743],{"text":722,"config":723},"Contact sales",{"href":574,"dataGaName":253,"dataGaLocation":684},{"text":577,"config":725},{"href":579,"dataGaName":580,"dataGaLocation":684},{"text":582,"config":727},{"href":584,"dataGaName":585,"dataGaLocation":684},{"text":729,"config":730},"Status",{"href":731,"dataGaName":732,"dataGaLocation":684},"https://status.gitlab.com/","status",{"text":734,"config":735},"Terms of use",{"href":736,"dataGaName":737,"dataGaLocation":684},"/terms/","terms of use",{"text":739,"config":740},"Privacy statement",{"href":741,"dataGaName":742,"dataGaLocation":684},"/privacy/","privacy statement",{"text":744,"config":745},"Cookie preferences",{"dataGaName":746,"dataGaLocation":684,"id":747,"isOneTrustButton":127},"cookie preferences","ot-sdk-btn",{"title":290,"links":749,"subMenu":758},[750,754],{"text":751,"config":752},"DevSecOps platform",{"href":272,"dataGaName":753,"dataGaLocation":684},"devsecops platform",{"text":755,"config":756},"AI-Assisted Development",{"href":279,"dataGaName":757,"dataGaLocation":684},"ai-assisted development",[759],{"title":760,"links":761},"Topics",[762,767,772,777,782,787,792,797],{"text":763,"config":764},"CICD",{"href":765,"dataGaName":766,"dataGaLocation":684},"/topics/ci-cd/","cicd",{"text":768,"config":769},"GitOps",{"href":770,"dataGaName":771,"dataGaLocation":684},"/topics/gitops/","gitops",{"text":773,"config":774},"DevOps",{"href":775,"dataGaName":776,"dataGaLocation":684},"/topics/devops/","devops",{"text":778,"config":779},"Version Control",{"href":780,"dataGaName":781,"dataGaLocation":684},"/topics/version-control/","version control",{"text":783,"config":784},"DevSecOps",{"href":785,"dataGaName":786,"dataGaLocation":684},"/topics/devsecops/","devsecops",{"text":788,"config":789},"Cloud Native",{"href":790,"dataGaName":791,"dataGaLocation":684},"/topics/cloud-native/","cloud native",{"text":793,"config":794},"AI for Coding",{"href":795,"dataGaName":796,"dataGaLocation":684},"/topics/devops/ai-for-coding/","ai for coding",{"text":798,"config":799},"Agentic AI",{"href":800,"dataGaName":801,"dataGaLocation":684},"/topics/agentic-ai/","agentic ai",{"title":803,"links":804},"Solutions",[805,807,809,814,818,821,825,828,830,833,836,841],{"text":334,"config":806},{"href":329,"dataGaName":334,"dataGaLocation":684},{"text":323,"config":808},{"href":306,"dataGaName":307,"dataGaLocation":684},{"text":810,"config":811},"Agile development",{"href":812,"dataGaName":813,"dataGaLocation":684},"/solutions/agile-delivery/","agile delivery",{"text":815,"config":816},"SCM",{"href":319,"dataGaName":817,"dataGaLocation":684},"source code management",{"text":763,"config":819},{"href":312,"dataGaName":820,"dataGaLocation":684},"continuous integration & delivery",{"text":822,"config":823},"Value stream management",{"href":362,"dataGaName":824,"dataGaLocation":684},"value stream management",{"text":768,"config":826},{"href":827,"dataGaName":771,"dataGaLocation":684},"/solutions/gitops/",{"text":372,"config":829},{"href":375,"dataGaName":376,"dataGaLocation":684},{"text":831,"config":832},"Small business",{"href":381,"dataGaName":382,"dataGaLocation":684},{"text":834,"config":835},"Public sector",{"href":387,"dataGaName":388,"dataGaLocation":684},{"text":837,"config":838},"Education",{"href":839,"dataGaName":840,"dataGaLocation":684},"/solutions/education/","education",{"text":842,"config":843},"Financial services",{"href":844,"dataGaName":845,"dataGaLocation":684},"/solutions/finance/","financial services",{"title":395,"links":847},[848,850,852,854,857,859,862,864,866,868,870,872,874,876],{"text":408,"config":849},{"href":410,"dataGaName":411,"dataGaLocation":684},{"text":413,"config":851},{"href":415,"dataGaName":416,"dataGaLocation":684},{"text":418,"config":853},{"href":420,"dataGaName":421,"dataGaLocation":684},{"text":423,"config":855},{"href":425,"dataGaName":856,"dataGaLocation":684},"docs",{"text":446,"config":858},{"href":448,"dataGaName":449,"dataGaLocation":684},{"text":860,"config":861},"What's new",{"href":506,"dataGaName":507,"dataGaLocation":684},{"text":441,"config":863},{"href":443,"dataGaName":444,"dataGaLocation":684},{"text":460,"config":865},{"href":462,"dataGaName":463,"dataGaLocation":684},{"text":468,"config":867},{"href":470,"dataGaName":471,"dataGaLocation":684},{"text":473,"config":869},{"href":475,"dataGaName":476,"dataGaLocation":684},{"text":478,"config":871},{"href":480,"dataGaName":481,"dataGaLocation":684},{"text":483,"config":873},{"href":485,"dataGaName":486,"dataGaLocation":684},{"text":488,"config":875},{"href":490,"dataGaName":491,"dataGaLocation":684},{"text":493,"config":877},{"href":495,"dataGaName":496,"dataGaLocation":684},{"title":509,"links":879},[880,882,884,886,888,890,894,899,901,903,905],{"text":517,"config":881},{"href":519,"dataGaName":511,"dataGaLocation":684},{"text":522,"config":883},{"href":524,"dataGaName":525,"dataGaLocation":684},{"text":530,"config":885},{"href":532,"dataGaName":533,"dataGaLocation":684},{"text":535,"config":887},{"href":537,"dataGaName":538,"dataGaLocation":684},{"text":540,"config":889},{"href":542,"dataGaName":543,"dataGaLocation":684},{"text":891,"config":892},"Sustainability",{"href":893,"dataGaName":891,"dataGaLocation":684},"/sustainability/",{"text":895,"config":896},"Diversity, inclusion and belonging (DIB)",{"href":897,"dataGaName":898,"dataGaLocation":684},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":545,"config":900},{"href":547,"dataGaName":548,"dataGaLocation":684},{"text":555,"config":902},{"href":557,"dataGaName":558,"dataGaLocation":684},{"text":560,"config":904},{"href":562,"dataGaName":563,"dataGaLocation":684},{"text":906,"config":907},"Modern Slavery Transparency Statement",{"href":908,"dataGaName":909,"dataGaLocation":684},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":911},[912,915,918],{"text":913,"config":914},"Terms",{"href":736,"dataGaName":737,"dataGaLocation":684},{"text":916,"config":917},"Cookies",{"dataGaName":746,"dataGaLocation":684,"id":747,"isOneTrustButton":127},{"text":919,"config":920},"Privacy",{"href":741,"dataGaName":742,"dataGaLocation":684},[922],{"id":923,"title":7,"body":216,"config":924,"content":926,"description":216,"extension":930,"meta":931,"navigation":127,"path":932,"seo":933,"stem":934,"__hash__":935},"blogAuthors/en-us/blog/authors/grzegorz-bizon.yml",{"template":925},"BlogAuthor",{"name":7,"config":927},{"headshot":928,"ctfId":929},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659488/Blog/Author%20Headshots/gitlab-logo-extra-whitespace.png","Grzegorz-Bizon","yml",{},"/en-us/blog/authors/grzegorz-bizon",{},"en-us/blog/authors/grzegorz-bizon","Z1aKSWxubaVpieVMM-H8afTapWLnKt0xl0AyT32DmJE",[937,945,953],{"title":938,"description":939,"heroImage":940,"category":212,"date":941,"authors":942,"slug":944,"externalUrl":216},"How we overhauled GitLab navigation","Users weren't getting what they needed from our navigation. Here are the steps we took to turn that experience around.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682884/Blog/Hero%20Images/navigation.jpg","2023-08-15",[943],"Ashley Knobloch","navigation-research-blog-post",{"title":946,"description":947,"heroImage":948,"category":212,"date":949,"authors":950,"slug":952,"externalUrl":216},"Beautifying our UI: Giving GitLab build features a fresh look","Get an inside look at how we are improving the usability of GitLab build features with multiple visual design improvements.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682807/Blog/Hero%20Images/beautify.jpg","2023-07-05",[951],"Veethika Mishra","beautifying-of-our-ui",{"title":954,"description":955,"heroImage":956,"category":212,"date":957,"authors":958,"slug":960,"externalUrl":216},"4 best practices leading orgs to release software faster","GitLab's 2023 Global DevSecOps Survey illuminates the strategies that organizations deploying more frequently have in common.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663908/Blog/Hero%20Images/2023-devsecops-report-blog-banner2.png","2023-06-08",[959],"Kristina Weis","best-practices-leading-orgs-to-release-software-faster",{"promotions":962},[963,977,989,1001],{"id":964,"categories":965,"header":967,"text":968,"button":969,"image":974},"ai-modernization",[966],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":970,"config":971},"Get your AI maturity score",{"href":972,"dataGaName":973,"dataGaLocation":449},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":975},{"src":976},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":978,"categories":979,"header":981,"text":968,"button":982,"image":986},"devops-modernization",[980,786],"product","Are you just managing tools or shipping innovation?",{"text":983,"config":984},"Get your DevOps maturity score",{"href":985,"dataGaName":973,"dataGaLocation":449},"/assessments/devops-modernization-assessment/",{"config":987},{"src":988},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":990,"categories":991,"header":993,"text":968,"button":994,"image":998},"security-modernization",[992],"security","Are you trading speed for security?",{"text":995,"config":996},"Get your security maturity score",{"href":997,"dataGaName":973,"dataGaLocation":449},"/assessments/security-modernization-assessment/",{"config":999},{"src":1000},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1002,"paths":1003,"header":1006,"text":1007,"button":1008,"image":1013},"github-azure-migration",[1004,1005],"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":1009,"config":1010},"See how GitLab compares to GitHub",{"href":1011,"dataGaName":1012,"dataGaLocation":449},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1014},{"src":988},{"header":1016,"blurb":1017,"button":1018,"secondaryButton":1023},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1019,"config":1020},"Get your free trial",{"href":1021,"dataGaName":248,"dataGaLocation":1022},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":722,"config":1024},{"href":574,"dataGaName":253,"dataGaLocation":1022},1786803749370]