[{"data":1,"prerenderedAt":1403},["ShallowReactive",2],{"/blog/vscode-workflows-for-working-with-gitlab":3,"navigation-en-us":617,"banner-en-us":1043,"footer-en-us":1053,"blog-post-authors-en-us-Tomas Vik":1298,"blog-related-posts-en-us-vscode-workflows-for-working-with-gitlab":1313,"blog-promotions-en-us":1339,"next-steps-en-us":1393},{"id":4,"title":5,"authors":6,"body":8,"category":596,"date":597,"description":598,"extension":599,"externalUrl":600,"faq":600,"featured":601,"heroImage":602,"meta":603,"navigation":604,"path":605,"seo":606,"slug":610,"stem":611,"tags":612,"template":615,"updatedDate":600,"__hash__":616},"blogPosts/en-us/blog/vscode-workflows-for-working-with-gitlab.md","Visual Studio code editor: Eight tips for using GitLab VS Code",[7],"Tomas Vik",{"type":9,"value":10,"toc":578},"minimark",[11,22,27,35,43,46,51,79,82,90,94,103,110,124,128,135,145,148,155,170,177,184,188,195,218,225,235,239,242,259,266,271,275,284,291,298,310,315,335,344,347,350,354,362,427,435,452,460,468,471,474,477,481,493,497,500,507,511,521,530,537,541,549,553],[12,13,14,15,21],"p",{},"As a software engineer, I spend a significant portion of my day in the Visual Studio code editor. Since I started maintaining the officially supported ",[16,17,20],"a",{"href":18,"rel":19},"https://marketplace.visualstudio.com/items?itemName=GitLab.gitlab-workflow",[],"GitLab VS Code extension",", I've developed a few tricks that make me a productive GitLab user. Below, I share eight tips that make my work more efficient and productive, while also introducing you to some of the GitLab contributors who made this tooling happen.",[23,24,26],"h2",{"id":25},"what-is-visual-studio-code","What is Visual Studio Code?",[12,28,29,34],{},[16,30,33],{"href":31,"rel":32},"https://en.wikipedia.org/wiki/Visual_Studio_Code",[],"Visual Studio Code",", developed by Microsoft, lets a user debug source code in various languages from the editor. It is also used for syntax highlighting, intelligent code completion, code refactoring, embedded Git and autocomplete. VS Code, as it is commonly known, can be launched or attached to running apps.",[12,36,37,38,42],{},"It is designed for Windows, Linux, and MacOS. VS Code can be used with several programming languages such as Java, JavaScript, Node.js, Python, C++ and Fortran. Support for additional languages is provided by freely available extensions on the ",[16,39,41],{"href":18,"rel":40},[],"VS Code Marketplace",".",[12,44,45],{},"Below are eight tips for using GitLab VS Code.",[47,48,50],"h3",{"id":49},"how-to-clone-any-gitlab-project","How to clone any GitLab project",[12,52,53,54,59,60,65,66,70,71,73,74,42],{},"GitLab contributor ",[16,55,58],{"href":56,"rel":57},"https://gitlab.com/haasef",[],"Felix Haase"," recently ",[16,61,64],{"href":62,"rel":63},"https://gitlab.com/gitlab-org/gitlab-vscode-extension/-/merge_requests/172",[],"implemented a feature that lets you clone any GitLab project where you are a member",". To clone the project, use the official ",[67,68,69],"code",{},"Git: Clone"," command and select your GitLab instance. Use the ",[67,72,69],{}," command by selecting the command from the ",[16,75,78],{"href":76,"rel":77},"https://code.visualstudio.com/docs/getstarted/userinterface#_command-palette",[],"Command Palette",[12,80,81],{},"This feature can save you time if you already know the name of the project you want to clone.",[12,83,84,89],{},[85,86],"img",{"alt":87,"src":88},"VS Code clone dialogue","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782399302/blog/Content%20Images/vscode-workflows-for-working-with-gitlab/clone.png","\nVS Code lets you filter which project to clone.",[47,91,93],{"id":92},"how-to-view-mrs-and-issues","How to view MRs and issues",[12,95,96,97,102],{},"It is easy to look through issues and MRs that you created, are assigned to, or are reviewing using GitLab. The lesser-known feature of the GitLab Workflow extension is ",[16,98,101],{"href":99,"rel":100},"https://gitlab.com/gitlab-org/gitlab-vscode-extension/-/blob/main/docs/user/custom-queries.md",[],"custom queries",". Custom search queries allow you to refine the search expressions for issues and MRs that appear in the VS Code side panel. You can apply all the advanced search terms you are used to from the GitLab web search: Labels, full-text search expression, milestones, authors, assignees, and more.",[12,104,105,109],{},[85,106],{"alt":107,"src":108},"GitLab extension sidebar","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782399303/blog/Content%20Images/vscode-workflows-for-working-with-gitlab/issues-and-mrs.png","\nSee your issues and MRs in the VS Code sidebar.",[12,111,112,113,117,118,123],{},"Another option is ",[16,114,116],{"href":115},"/blog/mr-reviews-with-vs-code/","reviewing the MRs in VS Code",". The final functionality that is missing in MR review is ",[16,119,122],{"href":120,"rel":121},"https://gitlab.com/gitlab-org/gitlab-vscode-extension/-/issues/342",[],"creating new comments on the MR diff",", which we plan to ship by July 2021.",[47,125,127],{"id":126},"how-to-create-an-mr-with-two-clicks","How to create an MR with two clicks",[12,129,130,131,134],{},"If you use the ",[67,132,133],{},"git"," command in a terminal, you might have noticed that pushing your branch to GitLab produces the following output:",[136,137,143],"pre",{"className":138,"code":140,"language":141,"meta":142},[139],"language-text","remote: To create a merge request for my-new-branch, visit:\nremote: https://gitlab-instance.com/my-group/my-project/merge_requests/new?merge_request%5Bsource_branch%5D=my-new-branch\n","text","",[67,144,140],{"__ignoreMap":142},[12,146,147],{},"After clicking the link, the terminal will open your browser on a new MR page where you can create an MR from the branch you just pushed.",[12,149,150,151,154],{},"When I started pushing my branches through VS Code, I missed this feature. To the point that I searched through the VS Code Git Extension logs to find the create MR link (command ",[67,152,153],{},"Git: Show Git Output",").",[12,156,157,158,163,164,169],{},"Luckily, GitLab contributor ",[16,159,162],{"href":160,"rel":161},"https://gitlab.com/jotoho",[],"Jonas Tobias Hopusch"," implemented a ",[16,165,168],{"href":166,"rel":167},"https://gitlab.com/gitlab-org/gitlab-vscode-extension/-/merge_requests/155",[],"status bar button"," that lets you create MRs just as easily.",[12,171,172,173,176],{},"To create an MR from your changes, push them to your remote repository (the cloud icon next to the branch name) and then click on the ",[67,174,175],{},"GitLab: Create MR."," button.",[12,178,179,183],{},[85,180],{"alt":181,"src":182},"VS Code status bar","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782399304/blog/Content%20Images/vscode-workflows-for-working-with-gitlab/status-bar-create-mr.png","\nVS Code status bar with buttons from GitLab extension.",[47,185,187],{"id":186},"how-to-configure-your-gitlab-ci","How to configure your GitLab CI",[12,189,190,191,194],{},"The GitLab extension helps you edit your ",[67,192,193],{},".gitlab-ci.yml"," configuration file in two ways: Autocompleting environment variables and validating the configuration.",[12,196,197,198,203,204,209,210,214,215,217],{},"Thanks to ",[16,199,202],{"href":200,"rel":201},"https://gitlab.com/KevSlashNull",[],"Kev's"," fantastic ",[16,205,208],{"href":206,"rel":207},"https://gitlab.com/gitlab-org/gitlab-vscode-extension/-/merge_requests/140",[],"contribution",", you can ",[16,211,213],{"href":212},"/solutions/continuous-integration/","use CI"," variable autocompletion anywhere in your ",[67,216,193],{},". The hints even include variable descriptions and explain supported GitLab versions.",[12,219,220,224],{},[85,221],{"alt":222,"src":223},"CI variables autocomlete dialogue","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782399302/blog/Content%20Images/vscode-workflows-for-working-with-gitlab/ci-autocomplete.png","\nCI variables autocomplete dialogue.",[12,226,227,228,230,231,234],{},"When you finish writing your ",[67,229,193],{}," CI configuration, you can use the ",[67,232,233],{},"GitLab: Validate GitLab CI config"," command to surface any problems before committing the CI config to your repository.",[47,236,238],{"id":237},"how-to-create-and-paste-project-snippets","How to create and paste project snippets",[12,240,241],{},"Is there a piece of text that you and your teammates often use? Maybe it is a license header for a file or a test scenario template. You can use GitLab snippets in combination with Visual studio code editor to save you a few keystrokes.",[12,243,244,245,250,251,254,255,258],{},"For example, you can create a ",[16,246,249],{"href":247,"rel":248},"https://gitlab.com/gitlab-org/gitlab-vscode-extension/-/snippets/2110322",[],"test file snippet"," with the ",[67,252,253],{},"GitLab: Create snippet"," command and then paste it into every new test file you create with the ",[67,256,257],{},"GitLab: Insert snippet"," command.",[12,260,261,265],{},[85,262],{"alt":263,"src":264},"Paste Snippet dialogue","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782399304/blog/Content%20Images/vscode-workflows-for-working-with-gitlab/paste-snippet.png","\nPaste Snippet dialogue.",[12,267,268,269,258],{},"I mostly use snippets when I want to share a big blob of text. I select the text and then create the snippet with the ",[67,270,253],{},[47,272,274],{"id":273},"how-to-copy-web-url-for-a-project-file","How to copy web URL for a project file",[12,276,277,278,283],{},"Most of the ",[16,279,282],{"href":280,"rel":281},"https://handbook.gitlab.com/handbook/values/#bias-towards-asynchronous-communication",[],"communication at GitLab happens asynchronously",". So instead of being able to show your colleague an open file in your editor, you'll need to be able to create a textual pointer to the file.",[12,285,286,287,290],{},"A straightforward way to do that is to use the ",[67,288,289],{},"GitLab: Copy link to active file on GitLab"," command, which will copy the web URL of the open file into your clipboard. It even includes the line number or a range of lines based on your cursor or selection in the Visual studio code editor.",[12,292,293,294,297],{},"You might also consider using the ",[67,295,296],{},"GitLens: Copy Remote File URL",", which even includes the commit SHA in the URL, making it a permalink. The permalink will always point to the same version of the file regardless of further commits to your branch. We'll look at the GitLens extension in tip number 7 a bit later on.",[12,299,300,301],{},"For the GitLab Enterprise/Community Edition you can use:\n\"gitweblinks.gitLabEnterprise\": ",[302,303,304,305,309],"span",{},"\n{\n\"http\": \"",[16,306,307],{"href":307,"rel":308},"https://local-gitlab",[],"\",\n\"ssh\": \"git@local-gitlab\"\n}\n",[311,312,314],"h4",{"id":313},"what-to-do-if-vs-code-source-control-is-not-working","What to do if VS Code source control is not working",[12,316,317,318,321,322,327,328,331,332,42],{},"A ",[67,319,320],{},"SourceControl"," is the entity responsible for populating the ",[16,323,326],{"href":324,"rel":325},"https://code.visualstudio.com/api/extension-guides/scm-provider",[],"Source Control model"," with resource states, instances of ",[67,329,330],{},"SourceControlResourceState",". Resource states are organized in groups, instances of ",[67,333,334],{},"SourceControlResourceGroup",[12,336,337,338,343],{},"Linking to issues in source code is a normal part of the VS Code workflow, especially when there's some logic that's difficult to understand or when there's a //TODO comment that needs action. ",[16,339,342],{"href":340,"rel":341},"https://stackoverflow.com/questions/60232215/visual-studio-code-source-control-not-showing-changes",[],"Users report experiencing issues"," with changes in the file not appearing to the source code, unless inputted manually.",[12,345,346],{},"One user offered a 7-step solution that worked for them. Another said that all they had to do was disable and then reenable the build in Git extension, which fixed it. Yet another said they went to their “code” folder where they keep all their repos, right-clicked on the folder containing the repo they wanted and opening that folder with VS code.",[12,348,349],{},"An often-used approach to look at issues is to pick one to work on, create a branch to work in, make some commits, then merge your changes back into the main or default branch with a pull request. You can do that from the new Issues view.",[311,351,353],{"id":352},"gitlab-workflow-extensions-for-vs-code","GitLab Workflow extensions for VS Code",[12,355,356,357,361],{},"The ",[16,358,360],{"href":18,"rel":359},[],"GitLab Workflow extension"," integrates GitLab with VS Code. You can decrease context switching and do more day-to-day tasks in VS Code, such as:",[363,364,365,373,386,395,403,411,419],"ul",{},[366,367,368,42],"li",{},[16,369,372],{"href":370,"rel":371},"https://marketplace.visualstudio.com/items?itemName=GitLab.gitlab-workflow#browse-issues-review-mrs",[],"View issues",[366,374,375,376,381,382,42],{},"Run ",[16,377,380],{"href":378,"rel":379},"https://marketplace.visualstudio.com/items?itemName=GitLab.gitlab-workflow#commands",[],"common commands"," from the Visual Studio Code ",[16,383,385],{"href":76,"rel":384},[],"command palette",[366,387,388,389,394],{},"Create and ",[16,390,393],{"href":391,"rel":392},"https://marketplace.visualstudio.com/items?itemName=GitLab.gitlab-workflow#merge-request-reviews",[],"review"," merge requests directly from Visual Studio Code.",[366,396,397,402],{},[16,398,401],{"href":399,"rel":400},"https://marketplace.visualstudio.com/items?itemName=GitLab.gitlab-workflow#validate-gitlab-ci-configuration",[],"Validate"," your GitLab CI configuration.",[366,404,405,410],{},[16,406,409],{"href":407,"rel":408},"https://marketplace.visualstudio.com/items?itemName=GitLab.gitlab-workflow#information-about-your-branch-pipelines-mr-closing-issue",[],"View the status"," of your current pipeline.",[366,412,413,418],{},[16,414,417],{"href":415,"rel":416},"https://marketplace.visualstudio.com/items?itemName=GitLab.gitlab-workflow#create-snippet",[],"Create"," and paste snippets to, and from, your editor.",[366,420,421,426],{},[16,422,425],{"href":423,"rel":424},"https://marketplace.visualstudio.com/items?itemName=GitLab.gitlab-workflow#browse-a-repository-without-cloning",[],"Browse repositories"," without cloning them",[12,428,429,430,434],{},"Download the extension from the ",[16,431,433],{"href":18,"rel":432},[],"Visual Studio Code Marketplace",". Then you can configure:",[363,436,437,444],{},[366,438,439,42],{},[16,440,443],{"href":441,"rel":442},"https://gitlab.com/gitlab-org/gitlab-vscode-extension#extension-settings",[],"Features to display or hide",[366,445,446,451],{},[16,447,450],{"href":448,"rel":449},"https://marketplace.visualstudio.com/items?itemName=GitLab.gitlab-workflow#self-signed-certificates",[],"Self-signed certificate"," information",[12,453,454,455,42],{},"Report any issues, bugs, or feature requests in the ",[16,456,459],{"href":457,"rel":458},"https://gitlab.com/gitlab-org/gitlab-vscode-extension/-/issues",[],"gitlab-vscode-extension issue queue",[12,461,462,463,42],{},"This extension supports GitLab Version 13.0 and later. To find your GitLab version, visit ",[16,464,467],{"href":465,"rel":466},"https://gitlab.com/help",[],"help",[12,469,470],{},"You can also see pipeline status, open MR and closing issue links in the status bar. The pipeline status is updated automatically so you don’t need to open GitLab to see your pipeline status.",[12,472,473],{},"Within the marketplace you can also use the command palette to run the commands and create a GitLab personal access token (required) and assign it to the extension.",[12,475,476],{},"You can also set set the token in an environment variable and learn how to change the VS Code settings. There are instructions for several other in-depth features as well.",[23,478,480],{"id":479},"how-gitlens-simplifies-working-with-vs-code-editor","How GitLens simplifies working with VS Code editor",[12,482,483,484,487,488,42],{},"Up until now, the tips were centered around the ",[16,485,360],{"href":18,"rel":486},[],", but there is a fantastic extension that's improving VS Code git integration regardless of where you host your repository: ",[16,489,492],{"href":490,"rel":491},"https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens",[],"GitLens",[47,494,496],{"id":495},"walking-file-history","Walking file history",[12,498,499],{},"GitLens makes it easy to browse the history of changes to the current file. Each versioned file will have three new editor icons, which provides quick access to all previous revisions of the file. The middle button seen in the image below provides series of actions on the current version (e.g., opening the commit in GitLab web).",[12,501,502,506],{},[85,503],{"alt":504,"src":505},"GitLens history browsing buttons","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782399302/blog/Content%20Images/vscode-workflows-for-working-with-gitlab/gitlens-history.png","\nGitLens history browsing buttons",[47,508,510],{"id":509},"how-to-compare-current-head-against-branch-or-tag","How to compare current HEAD against branch or tag",[12,512,513,514,517,518,42],{},"One of my habits was inspecting ",[67,515,516],{},"git diff"," between my feature branch and the main branch before creating an MR. More often than not, I forgot to write a test or remove some pesky ",[67,519,520],{},"console.log()",[12,522,523,524,529],{},"GitLens adds multiple sections to your ",[16,525,528],{"href":526,"rel":527},"https://code.visualstudio.com/docs/editor/versioncontrol#_scm-providers",[],"\"Source Control\" tab",". For each branch, tag, and commit, click a \"Compare\" icon which will show you changes between your current HEAD and the reference. Seeing the local diff is great for previewing changes before pushing the new branch to the remote.",[12,531,532,536],{},[85,533],{"alt":534,"src":535},"GitLens - compare with branch","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782399302/blog/Content%20Images/vscode-workflows-for-working-with-gitlab/gitlens-compare.png","\nHow to compare with a branch using GitLens.",[23,538,540],{"id":539},"everyone-can-contribute","Everyone can contribute",[12,542,543,544,548],{},"New features and fixes to the GitLab Visual Studio Code editor extension are added every month. If you find any issues or have a feature request, please go to our ",[16,545,547],{"href":457,"rel":546},[],"GitLab VSCode issues tracker"," and if your request isn't already present in the tracker, create one. Everyone can contribute to GitLab, and we welcome your ideas on how to improve our Visual Studio Code editor.",[23,550,552],{"id":551},"read-more-on-visual-studio-and-gitlab","Read more on Visual Studio and GitLab:",[363,554,555,561,567,572],{},[366,556,557],{},[16,558,560],{"href":559},"/blog/vscode-workflow-new-features/","Four new tools for your Visual Studio Code and GitLab tool belt",[366,562,563],{},[16,564,566],{"href":565},"/blog/vscode-extension-development-with-gitlab/","VS Code extension development with GitLab",[366,568,569],{},[16,570,571],{"href":115},"How to do GitLab merge request reviews in VS Code",[366,573,574],{},[16,575,577],{"href":576},"/blog/use-gitlab-with-vscode/","How we created a GitLab Workflow Extension for VS Code",{"title":142,"searchDepth":579,"depth":579,"links":580},2,[581,590,594,595],{"id":25,"depth":579,"text":26,"children":582},[583,585,586,587,588,589],{"id":49,"depth":584,"text":50},3,{"id":92,"depth":584,"text":93},{"id":126,"depth":584,"text":127},{"id":186,"depth":584,"text":187},{"id":237,"depth":584,"text":238},{"id":273,"depth":584,"text":274},{"id":479,"depth":579,"text":480,"children":591},[592,593],{"id":495,"depth":584,"text":496},{"id":509,"depth":584,"text":510},{"id":539,"depth":579,"text":540},{"id":551,"depth":579,"text":552},"engineering","2021-05-20","Learn how to use the Visual Studio code editor more efficiently and meet some of the GitLab contributors that made these new features happen.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749666775/Blog/Hero%20Images/cover.jpg",{},true,"/en-us/blog/vscode-workflows-for-working-with-gitlab",{"title":5,"description":598,"ogTitle":5,"ogDescription":598,"noIndex":601,"ogImage":602,"ogUrl":607,"ogSiteName":608,"ogType":609,"canonicalUrls":607},"https://about.gitlab.com/blog/vscode-workflows-for-working-with-gitlab","https://about.gitlab.com","article","vscode-workflows-for-working-with-gitlab","en-us/blog/vscode-workflows-for-working-with-gitlab",[613,614],"integrations","tutorial","BlogPost","BIoEF7ZUAMTS9ranxvdh3YowjJTdaYfVwAx_roKI1xA",{"logo":618,"freeTrial":623,"sales":628,"login":633,"items":638,"search":963,"minimal":994,"duo":1013,"switchNav":1022,"pricingDeployment":1033},{"config":619},{"href":620,"dataGaName":621,"dataGaLocation":622},"/","gitlab logo","header",{"text":624,"config":625},"Get free trial",{"href":626,"dataGaName":627,"dataGaLocation":622},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":629,"config":630},"Request a demo",{"href":631,"dataGaName":632,"dataGaLocation":622},"/sales/?contact-topic=request-demo","sales",{"text":634,"config":635},"Sign in",{"href":636,"dataGaName":637,"dataGaLocation":622},"https://gitlab.com/users/sign_in/","sign in",[639,668,767,772,885,941],{"text":640,"config":641,"menu":643},"Platform",{"dataNavLevelOne":642},"platform",{"type":644,"columns":645},"cards",[646,652,660],{"title":640,"description":647,"link":648},"The intelligent orchestration platform for DevSecOps",{"text":649,"config":650},"Explore our Platform",{"href":651,"dataGaName":642,"dataGaLocation":622},"/platform/",{"title":653,"description":654,"link":655},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":656,"config":657},"Meet GitLab Duo",{"href":658,"dataGaName":659,"dataGaLocation":622},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":661,"description":662,"link":663},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":664,"config":665},"Learn more",{"href":666,"dataGaName":667,"dataGaLocation":622},"/why-gitlab/","why gitlab",{"text":669,"left":604,"config":670,"menu":672},"Product",{"dataNavLevelOne":671},"solutions",{"type":673,"link":674,"columns":678,"feature":746},"lists",{"text":675,"config":676},"View all Solutions",{"href":677,"dataGaName":671,"dataGaLocation":622},"/solutions/",[679,702,725],{"title":680,"description":681,"link":682,"items":687},"Automation","CI/CD and automation to accelerate deployment",{"config":683},{"icon":684,"href":685,"dataGaName":686,"dataGaLocation":622},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[688,691,694,698],{"text":689,"config":690},"CI/CD",{"href":212,"dataGaLocation":622,"dataGaName":689},{"text":653,"config":692},{"href":658,"dataGaLocation":622,"dataGaName":693},"gitlab duo agent platform - product menu",{"text":695,"config":696},"Source Code Management",{"href":697,"dataGaLocation":622,"dataGaName":695},"/solutions/source-code-management/",{"text":699,"config":700},"Automated Software Delivery",{"href":685,"dataGaLocation":622,"dataGaName":701},"Automated software delivery",{"title":703,"description":704,"link":705,"items":710},"Security","Deliver code faster without compromising security",{"config":706},{"href":707,"dataGaName":708,"dataGaLocation":622,"icon":709},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[711,715,720],{"text":712,"config":713},"Application Security Testing",{"href":707,"dataGaName":714,"dataGaLocation":622},"Application security testing",{"text":716,"config":717},"Software Supply Chain Security",{"href":718,"dataGaLocation":622,"dataGaName":719},"/solutions/supply-chain/","Software supply chain security",{"text":721,"config":722},"Software Compliance",{"href":723,"dataGaName":724,"dataGaLocation":622},"/solutions/software-compliance/","software compliance",{"title":726,"link":727,"items":732},"Measurement",{"config":728},{"icon":729,"href":730,"dataGaName":731,"dataGaLocation":622},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[733,737,741],{"text":734,"config":735},"Visibility & Measurement",{"href":730,"dataGaLocation":622,"dataGaName":736},"Visibility and Measurement",{"text":738,"config":739},"Value Stream Management",{"href":740,"dataGaLocation":622,"dataGaName":738},"/solutions/value-stream-management/",{"text":742,"config":743},"Analytics & Insights",{"href":744,"dataGaLocation":622,"dataGaName":745},"/solutions/analytics-and-insights/","Analytics and insights",{"title":747,"type":673,"items":748},"GitLab for",[749,755,761],{"text":750,"config":751},"Enterprise",{"icon":752,"href":753,"dataGaLocation":622,"dataGaName":754},"Building","/enterprise/","enterprise",{"text":756,"config":757},"Small Business",{"icon":758,"href":759,"dataGaLocation":622,"dataGaName":760},"Work","/small-business/","small business",{"text":762,"config":763},"Public Sector",{"icon":764,"href":765,"dataGaLocation":622,"dataGaName":766},"Organization","/solutions/public-sector/","public sector",{"text":768,"config":769},"Pricing",{"href":770,"dataGaName":771,"dataGaLocation":622,"dataNavLevelOne":771},"/pricing/","pricing",{"text":773,"config":774,"menu":776},"Resources",{"dataNavLevelOne":775},"resources",{"type":673,"link":777,"columns":781,"feature":874},{"text":778,"config":779},"View all resources",{"href":780,"dataGaName":775,"dataGaLocation":622},"/resources/",[782,814,841],{"title":783,"items":784},"Getting started",[785,790,795,800,805,810],{"text":786,"config":787},"Install",{"href":788,"dataGaName":789,"dataGaLocation":622},"/install/","install",{"text":791,"config":792},"Quick start guides",{"href":793,"dataGaName":794,"dataGaLocation":622},"/get-started/","quick setup checklists",{"text":796,"config":797},"Learn",{"href":798,"dataGaLocation":622,"dataGaName":799},"https://university.gitlab.com/","learn",{"text":801,"config":802},"Product documentation",{"href":803,"dataGaName":804,"dataGaLocation":622},"https://docs.gitlab.com/","product documentation",{"text":806,"config":807},"Best practice videos",{"href":808,"dataGaName":809,"dataGaLocation":622},"/getting-started-videos/","best practice videos",{"text":811,"config":812},"Integrations",{"href":813,"dataGaName":613,"dataGaLocation":622},"/integrations/",{"title":815,"items":816},"Discover",[817,822,827,832,836],{"text":818,"config":819},"Customer success stories",{"href":820,"dataGaName":821,"dataGaLocation":622},"/customers/","customer success stories",{"text":823,"config":824},"Blog",{"href":825,"dataGaName":826,"dataGaLocation":622},"/blog/","blog",{"text":828,"config":829},"Demo Hub",{"href":830,"dataGaName":831,"dataGaLocation":622},"/demo-hub/","demo hub",{"text":833,"config":834},"The Source",{"href":835,"dataGaName":826,"dataGaLocation":622},"/the-source/",{"text":837,"config":838},"Remote",{"href":839,"dataGaName":840,"dataGaLocation":622},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":842,"items":843},"Connect",[844,849,854,859,864,869],{"text":845,"config":846},"GitLab Services",{"href":847,"dataGaName":848,"dataGaLocation":622},"/services/","services",{"text":850,"config":851},"Contribute",{"href":852,"dataGaName":853,"dataGaLocation":622},"https://contributors.gitlab.com","contribute",{"text":855,"config":856},"Community",{"href":857,"dataGaName":858,"dataGaLocation":622},"/community/","community",{"text":860,"config":861},"Forum",{"href":862,"dataGaName":863,"dataGaLocation":622},"https://forum.gitlab.com/","forum",{"text":865,"config":866},"Events",{"href":867,"dataGaName":868,"dataGaLocation":622},"/events/","events",{"text":870,"config":871},"Partners",{"href":872,"dataGaName":873,"dataGaLocation":622},"/partners/","partners",{"config":875,"title":878,"text":879,"link":880},{"background":876,"textColor":877},"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":881,"config":882},"Read the latest",{"href":883,"dataGaName":884,"dataGaLocation":622},"/whats-new/","whats new",{"text":886,"config":887,"menu":889},"Company",{"dataNavLevelOne":888},"company",{"type":673,"columns":890},[891],{"items":892},[893,898,904,906,911,916,921,926,931,936],{"text":894,"config":895},"About",{"href":896,"dataGaName":897,"dataGaLocation":622},"/company/","about",{"text":899,"config":900,"footerGa":903},"Jobs",{"href":901,"dataGaName":902,"dataGaLocation":622},"/jobs/","jobs",{"dataGaName":902},{"text":865,"config":905},{"href":867,"dataGaName":868,"dataGaLocation":622},{"text":907,"config":908},"Leadership",{"href":909,"dataGaName":910,"dataGaLocation":622},"/company/team/e-group/","leadership",{"text":912,"config":913},"Handbook",{"href":914,"dataGaName":915,"dataGaLocation":622},"https://handbook.gitlab.com/","handbook",{"text":917,"config":918},"Investor relations",{"href":919,"dataGaName":920,"dataGaLocation":622},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":922,"config":923},"Trust Center",{"href":924,"dataGaName":925,"dataGaLocation":622},"/security/","trust center",{"text":927,"config":928},"AI Transparency Center",{"href":929,"dataGaName":930,"dataGaLocation":622},"/ai-transparency-center/","ai transparency center",{"text":932,"config":933},"Newsletter",{"href":934,"dataGaName":935,"dataGaLocation":622},"/company/contact/#contact-forms","newsletter",{"text":937,"config":938},"Press",{"href":939,"dataGaName":940,"dataGaLocation":622},"/press/","press",{"text":942,"config":943,"menu":944},"Contact us",{"dataNavLevelOne":888},{"type":673,"columns":945},[946],{"items":947},[948,953,958],{"text":949,"config":950},"Talk to sales",{"href":951,"dataGaName":952,"dataGaLocation":622},"/sales/","talk to sales",{"text":954,"config":955},"Support portal",{"href":956,"dataGaName":957,"dataGaLocation":622},"https://support.gitlab.com/hc/en-us","support portal",{"text":959,"config":960},"Customer portal",{"href":961,"dataGaName":962,"dataGaLocation":622},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":964,"login":965,"suggestions":972},"Close",{"text":966,"link":967},"To search repositories and projects, login to",{"text":968,"config":969},"gitlab.com",{"href":636,"dataGaName":970,"dataGaLocation":971},"search login","search",{"text":973,"default":974},"Suggestions",[975,977,981,983,987,991],{"text":653,"config":976},{"href":658,"dataGaName":653,"dataGaLocation":971},{"text":978,"config":979},"Code Suggestions (AI)",{"href":980,"dataGaName":978,"dataGaLocation":971},"/solutions/code-suggestions/",{"text":689,"config":982},{"href":212,"dataGaName":689,"dataGaLocation":971},{"text":984,"config":985},"GitLab on AWS",{"href":986,"dataGaName":984,"dataGaLocation":971},"/partners/technology-partners/aws/",{"text":988,"config":989},"GitLab on Google Cloud",{"href":990,"dataGaName":988,"dataGaLocation":971},"/partners/technology-partners/google-cloud-platform/",{"text":992,"config":993},"Why GitLab?",{"href":666,"dataGaName":992,"dataGaLocation":971},{"freeTrial":995,"mobileIcon":1000,"desktopIcon":1005,"secondaryButton":1008},{"text":996,"config":997},"Start free trial",{"href":998,"dataGaName":627,"dataGaLocation":999},"https://gitlab.com/-/trials/new/","nav",{"altText":1001,"config":1002},"Gitlab Icon",{"src":1003,"dataGaName":1004,"dataGaLocation":999},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":1001,"config":1006},{"src":1007,"dataGaName":1004,"dataGaLocation":999},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":1009,"config":1010},"Get Started",{"href":1011,"dataGaName":1012,"dataGaLocation":999},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":1014,"mobileIcon":1018,"desktopIcon":1020},{"text":1015,"config":1016},"Learn more about GitLab Duo",{"href":658,"dataGaName":1017,"dataGaLocation":999},"gitlab duo",{"altText":1001,"config":1019},{"src":1003,"dataGaName":1004,"dataGaLocation":999},{"altText":1001,"config":1021},{"src":1007,"dataGaName":1004,"dataGaLocation":999},{"button":1023,"mobileIcon":1028,"desktopIcon":1030},{"text":1024,"config":1025},"/switch",{"href":1026,"dataGaName":1027,"dataGaLocation":999},"#contact","switch",{"altText":1001,"config":1029},{"src":1003,"dataGaName":1004,"dataGaLocation":999},{"altText":1001,"config":1031},{"src":1032,"dataGaName":1004,"dataGaLocation":999},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":1034,"mobileIcon":1039,"desktopIcon":1041},{"text":1035,"config":1036},"Back to pricing",{"href":770,"dataGaName":1037,"dataGaLocation":999,"icon":1038},"back to pricing","GoBack",{"altText":1001,"config":1040},{"src":1003,"dataGaName":1004,"dataGaLocation":999},{"altText":1001,"config":1042},{"src":1007,"dataGaName":1004,"dataGaLocation":999},{"title":1044,"titleMobile":1045,"button":1046,"config":1051},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":664,"config":1047},{"href":1048,"dataGaName":1049,"dataGaLocation":1050},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":1052,"disabled":601},"release",{"data":1054},{"text":1055,"source":1056,"edit":1062,"contribute":1067,"config":1072,"items":1077,"minimal":1287},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":1057,"config":1058},"View page source",{"href":1059,"dataGaName":1060,"dataGaLocation":1061},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":1063,"config":1064},"Edit this page",{"href":1065,"dataGaName":1066,"dataGaLocation":1061},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":1068,"config":1069},"Please contribute",{"href":1070,"dataGaName":1071,"dataGaLocation":1061},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":1073,"facebook":1074,"youtube":1075,"linkedin":1076},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[1078,1125,1179,1223,1255],{"title":768,"links":1079,"subMenu":1094},[1080,1084,1089],{"text":1081,"config":1082},"View plans",{"href":770,"dataGaName":1083,"dataGaLocation":1061},"view plans",{"text":1085,"config":1086},"Why Premium?",{"href":1087,"dataGaName":1088,"dataGaLocation":1061},"/pricing/premium/","why premium",{"text":1090,"config":1091},"Why Ultimate?",{"href":1092,"dataGaName":1093,"dataGaLocation":1061},"/pricing/ultimate/","why ultimate",[1095],{"title":1096,"links":1097},"Contact Us",[1098,1101,1103,1105,1110,1115,1120],{"text":1099,"config":1100},"Contact sales",{"href":951,"dataGaName":632,"dataGaLocation":1061},{"text":954,"config":1102},{"href":956,"dataGaName":957,"dataGaLocation":1061},{"text":959,"config":1104},{"href":961,"dataGaName":962,"dataGaLocation":1061},{"text":1106,"config":1107},"Status",{"href":1108,"dataGaName":1109,"dataGaLocation":1061},"https://status.gitlab.com/","status",{"text":1111,"config":1112},"Terms of use",{"href":1113,"dataGaName":1114,"dataGaLocation":1061},"/terms/","terms of use",{"text":1116,"config":1117},"Privacy statement",{"href":1118,"dataGaName":1119,"dataGaLocation":1061},"/privacy/","privacy statement",{"text":1121,"config":1122},"Cookie preferences",{"dataGaName":1123,"dataGaLocation":1061,"id":1124,"isOneTrustButton":604},"cookie preferences","ot-sdk-btn",{"title":669,"links":1126,"subMenu":1135},[1127,1131],{"text":1128,"config":1129},"DevSecOps platform",{"href":651,"dataGaName":1130,"dataGaLocation":1061},"devsecops platform",{"text":1132,"config":1133},"AI-Assisted Development",{"href":658,"dataGaName":1134,"dataGaLocation":1061},"ai-assisted development",[1136],{"title":1137,"links":1138},"Topics",[1139,1144,1149,1154,1159,1164,1169,1174],{"text":1140,"config":1141},"CICD",{"href":1142,"dataGaName":1143,"dataGaLocation":1061},"/topics/ci-cd/","cicd",{"text":1145,"config":1146},"GitOps",{"href":1147,"dataGaName":1148,"dataGaLocation":1061},"/topics/gitops/","gitops",{"text":1150,"config":1151},"DevOps",{"href":1152,"dataGaName":1153,"dataGaLocation":1061},"/topics/devops/","devops",{"text":1155,"config":1156},"Version Control",{"href":1157,"dataGaName":1158,"dataGaLocation":1061},"/topics/version-control/","version control",{"text":1160,"config":1161},"DevSecOps",{"href":1162,"dataGaName":1163,"dataGaLocation":1061},"/topics/devsecops/","devsecops",{"text":1165,"config":1166},"Cloud Native",{"href":1167,"dataGaName":1168,"dataGaLocation":1061},"/topics/cloud-native/","cloud native",{"text":1170,"config":1171},"AI for Coding",{"href":1172,"dataGaName":1173,"dataGaLocation":1061},"/topics/devops/ai-for-coding/","ai for coding",{"text":1175,"config":1176},"Agentic AI",{"href":1177,"dataGaName":1178,"dataGaLocation":1061},"/topics/agentic-ai/","agentic ai",{"title":1180,"links":1181},"Solutions",[1182,1184,1186,1191,1195,1198,1202,1205,1207,1210,1213,1218],{"text":712,"config":1183},{"href":707,"dataGaName":712,"dataGaLocation":1061},{"text":701,"config":1185},{"href":685,"dataGaName":686,"dataGaLocation":1061},{"text":1187,"config":1188},"Agile development",{"href":1189,"dataGaName":1190,"dataGaLocation":1061},"/solutions/agile-delivery/","agile delivery",{"text":1192,"config":1193},"SCM",{"href":697,"dataGaName":1194,"dataGaLocation":1061},"source code management",{"text":1140,"config":1196},{"href":212,"dataGaName":1197,"dataGaLocation":1061},"continuous integration & delivery",{"text":1199,"config":1200},"Value stream management",{"href":740,"dataGaName":1201,"dataGaLocation":1061},"value stream management",{"text":1145,"config":1203},{"href":1204,"dataGaName":1148,"dataGaLocation":1061},"/solutions/gitops/",{"text":750,"config":1206},{"href":753,"dataGaName":754,"dataGaLocation":1061},{"text":1208,"config":1209},"Small business",{"href":759,"dataGaName":760,"dataGaLocation":1061},{"text":1211,"config":1212},"Public sector",{"href":765,"dataGaName":766,"dataGaLocation":1061},{"text":1214,"config":1215},"Education",{"href":1216,"dataGaName":1217,"dataGaLocation":1061},"/solutions/education/","education",{"text":1219,"config":1220},"Financial services",{"href":1221,"dataGaName":1222,"dataGaLocation":1061},"/solutions/finance/","financial services",{"title":773,"links":1224},[1225,1227,1229,1231,1234,1236,1239,1241,1243,1245,1247,1249,1251,1253],{"text":786,"config":1226},{"href":788,"dataGaName":789,"dataGaLocation":1061},{"text":791,"config":1228},{"href":793,"dataGaName":794,"dataGaLocation":1061},{"text":796,"config":1230},{"href":798,"dataGaName":799,"dataGaLocation":1061},{"text":801,"config":1232},{"href":803,"dataGaName":1233,"dataGaLocation":1061},"docs",{"text":823,"config":1235},{"href":825,"dataGaName":826,"dataGaLocation":1061},{"text":1237,"config":1238},"What's new",{"href":883,"dataGaName":884,"dataGaLocation":1061},{"text":818,"config":1240},{"href":820,"dataGaName":821,"dataGaLocation":1061},{"text":837,"config":1242},{"href":839,"dataGaName":840,"dataGaLocation":1061},{"text":845,"config":1244},{"href":847,"dataGaName":848,"dataGaLocation":1061},{"text":850,"config":1246},{"href":852,"dataGaName":853,"dataGaLocation":1061},{"text":855,"config":1248},{"href":857,"dataGaName":858,"dataGaLocation":1061},{"text":860,"config":1250},{"href":862,"dataGaName":863,"dataGaLocation":1061},{"text":865,"config":1252},{"href":867,"dataGaName":868,"dataGaLocation":1061},{"text":870,"config":1254},{"href":872,"dataGaName":873,"dataGaLocation":1061},{"title":886,"links":1256},[1257,1259,1261,1263,1265,1267,1271,1276,1278,1280,1282],{"text":894,"config":1258},{"href":896,"dataGaName":888,"dataGaLocation":1061},{"text":899,"config":1260},{"href":901,"dataGaName":902,"dataGaLocation":1061},{"text":907,"config":1262},{"href":909,"dataGaName":910,"dataGaLocation":1061},{"text":912,"config":1264},{"href":914,"dataGaName":915,"dataGaLocation":1061},{"text":917,"config":1266},{"href":919,"dataGaName":920,"dataGaLocation":1061},{"text":1268,"config":1269},"Sustainability",{"href":1270,"dataGaName":1268,"dataGaLocation":1061},"/sustainability/",{"text":1272,"config":1273},"Diversity, inclusion and belonging (DIB)",{"href":1274,"dataGaName":1275,"dataGaLocation":1061},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":922,"config":1277},{"href":924,"dataGaName":925,"dataGaLocation":1061},{"text":932,"config":1279},{"href":934,"dataGaName":935,"dataGaLocation":1061},{"text":937,"config":1281},{"href":939,"dataGaName":940,"dataGaLocation":1061},{"text":1283,"config":1284},"Modern Slavery Transparency Statement",{"href":1285,"dataGaName":1286,"dataGaLocation":1061},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1288},[1289,1292,1295],{"text":1290,"config":1291},"Terms",{"href":1113,"dataGaName":1114,"dataGaLocation":1061},{"text":1293,"config":1294},"Cookies",{"dataGaName":1123,"dataGaLocation":1061,"id":1124,"isOneTrustButton":604},{"text":1296,"config":1297},"Privacy",{"href":1118,"dataGaName":1119,"dataGaLocation":1061},[1299],{"id":1300,"title":7,"body":600,"config":1301,"content":1303,"description":600,"extension":1307,"meta":1308,"navigation":604,"path":1309,"seo":1310,"stem":1311,"__hash__":1312},"blogAuthors/en-us/blog/authors/tomas-vik.yml",{"template":1302},"BlogAuthor",{"name":7,"config":1304},{"headshot":1305,"ctfId":1306},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749681785/Blog/Author%20Headshots/viktomas-headshot.jpg","viktomas","yml",{},"/en-us/blog/authors/tomas-vik",{},"en-us/blog/authors/tomas-vik","xMgrgX8trHq0ptpdbhdKrT_9Rld39Gvh3CZcZ3x0MqU",[1314,1323,1331],{"title":1315,"description":1316,"heroImage":1317,"category":596,"date":1318,"authors":1319,"slug":1322,"externalUrl":600},"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",[1320,1321],"Mathias Ewald","Martin Paloncy, Edgeless Systems","confidential-ai-for-gitlab-self-hosted",{"title":1324,"description":1325,"heroImage":1326,"category":596,"date":1327,"authors":1328,"slug":1330,"externalUrl":600},"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",[1329],"Lysanne Pinto","green-devops-carbon-measurement-cicd-pipeline",{"title":1332,"description":1333,"heroImage":1334,"category":596,"date":1335,"authors":1336,"slug":1338,"externalUrl":600},"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",[1337],"Paul Meresanu","how-to-build-ci-cd-observability-at-scale",{"promotions":1340},[1341,1355,1367,1379],{"id":1342,"categories":1343,"header":1345,"text":1346,"button":1347,"image":1352},"ai-modernization",[1344],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":1348,"config":1349},"Get your AI maturity score",{"href":1350,"dataGaName":1351,"dataGaLocation":826},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":1353},{"src":1354},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1356,"categories":1357,"header":1359,"text":1346,"button":1360,"image":1364},"devops-modernization",[1358,1163],"product","Are you just managing tools or shipping innovation?",{"text":1361,"config":1362},"Get your DevOps maturity score",{"href":1363,"dataGaName":1351,"dataGaLocation":826},"/assessments/devops-modernization-assessment/",{"config":1365},{"src":1366},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1368,"categories":1369,"header":1371,"text":1346,"button":1372,"image":1376},"security-modernization",[1370],"security","Are you trading speed for security?",{"text":1373,"config":1374},"Get your security maturity score",{"href":1375,"dataGaName":1351,"dataGaLocation":826},"/assessments/security-modernization-assessment/",{"config":1377},{"src":1378},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1380,"paths":1381,"header":1384,"text":1385,"button":1386,"image":1391},"github-azure-migration",[1382,1383],"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":1387,"config":1388},"See how GitLab compares to GitHub",{"href":1389,"dataGaName":1390,"dataGaLocation":826},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1392},{"src":1366},{"header":1394,"blurb":1395,"button":1396,"secondaryButton":1401},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1397,"config":1398},"Get your free trial",{"href":1399,"dataGaName":627,"dataGaLocation":1400},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":1099,"config":1402},{"href":951,"dataGaName":632,"dataGaLocation":1400},1786803756292]