[{"data":1,"prerenderedAt":1398},["ShallowReactive",2],{"/blog/improve-your-gitlab-productivity-with-these-10-tips":3,"navigation-en-us":602,"banner-en-us":1027,"footer-en-us":1037,"blog-post-authors-en-us-Michael Friedrich|Roman Kuba":1282,"blog-related-posts-en-us-improve-your-gitlab-productivity-with-these-10-tips":1308,"blog-promotions-en-us":1334,"next-steps-en-us":1388},{"id":4,"title":5,"authors":6,"body":9,"category":580,"date":581,"description":582,"extension":583,"externalUrl":584,"faq":584,"featured":585,"heroImage":586,"meta":587,"navigation":588,"path":589,"seo":590,"slug":594,"stem":595,"tags":596,"template":600,"updatedDate":584,"__hash__":601},"blogPosts/en-us/blog/improve-your-gitlab-productivity-with-these-10-tips.md","10 tips to make you a productive GitLab user",[7,8],"Michael Friedrich","Roman Kuba",{"type":10,"value":11,"toc":573},"minimark",[12,16,26,31,57,60,83,90,103,106,124,132,135,148,155,162,165,176,200,203,218,224,230,248,251,255,264,273,282,293,301,313,337,344,347,356,359,368,371,378,385,394,401,404,413,421,428,437,446,450,458,465,473,480,483,487,490,506,527,545,548,555,569],[13,14,15],"p",{},"Most people know GitLab is a solid tool in today's DevOps workflows, with code reviews, CI/CD, and project management all available for users in a single application. But there are always ways to be more efficient. Since we use GitLab to develop GitLab, everyone has their own habits and hidden gems to speed things up.",[13,17,18,19,25],{},"We chatted about GitLab efficiency tips after seeing new ",[20,21,24],"a",{"href":22,"rel":23},"https://docs.gitlab.com/releases/#display-all-available-quick-actions-in-autocomplete",[],"quick actions releases in GitLab 13.8",", and decided to share some of our favorite tips with GitLab users. We share our typical day-to-day workflows as an engineering manager (Roman) and a developer (Michael) to show how quick actions make teams more productive and efficient.",[27,28,30],"h3",{"id":29},"roman-engineering-manager-starts-planning","Roman: Engineering manager starts planning",[13,32,33,34,39,40,44,45,50,51,56],{},"I am an engineering manager on the ",[20,35,38],{"href":36,"rel":37},"https://handbook.gitlab.com/handbook/product/categories/features/#createeditor-group",[],"Create: Editor team"," at GitLab. One of my responsibilities is capacity planning with product managers. Planning happens every month for the next ",[20,41,43],{"href":42},"/whats-new/","GitLab release",". GitLab uses the ",[20,46,49],{"href":47,"rel":48},"https://docs.gitlab.com/user/project/milestones/",[],"milestone feature"," to keep everything organized for the release. As planning goes on, I need to create a new issue for a new feature in the Web IDE. The issue description uses a ",[20,52,55],{"href":53,"rel":54},"https://docs.gitlab.com/user/project/description_templates/",[],"description template"," which gets filled with the right context.",[13,58,59],{},"But instead of searching for the assignee in the dropdown, I just add a new line:",[61,62,67],"pre",{"className":63,"code":64,"language":65,"meta":66,"style":66},"language-shell shiki shiki-themes github-light","/assign @dnsmichi\n","shell","",[68,69,70],"code",{"__ignoreMap":66},[71,72,75,79],"span",{"class":73,"line":74},"line",1,[71,76,78],{"class":77},"s7eDp","/assign",[71,80,82],{"class":81},"sYBdl"," @dnsmichi\n",[13,84,85,86,89],{},"All quick actions start with a ",[68,87,88],{},"/"," character and will be interpreted by GitLab when the issue gets created. In addition to an assignee, issue labels need to be applied as well.",[61,91,93],{"className":63,"code":92,"language":65,"meta":66,"style":66},"/label ~\"type::feature\"\n",[68,94,95],{"__ignoreMap":66},[71,96,97,100],{"class":73,"line":74},[71,98,99],{"class":77},"/label",[71,101,102],{"class":81}," ~\"type::feature\"\n",[13,104,105],{},"You can also assign multiple labels at once:",[61,107,109],{"className":63,"code":108,"language":65,"meta":66,"style":66},"/label ~devops::create ~group::editor ~\"Category::Web IDE\"\n",[68,110,111],{"__ignoreMap":66},[71,112,113,115,118,121],{"class":73,"line":74},[71,114,99],{"class":77},[71,116,117],{"class":81}," ~devops::create",[71,119,120],{"class":81}," ~group::editor",[71,122,123],{"class":81}," ~\"Category::Web IDE\"\n",[13,125,126,131],{},[127,128],"img",{"alt":129,"src":130},"GitLab Quick Actions: Multiple labels","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398562/blog/Content%20Images/improve-your-gitlab-productivity-10-tips/quick_action_label_multiple.png","\nHow to apply multiple labels using GitLab quick actions.",[13,133,134],{},"The issue needs to be assigned to the next milestone. This can be done with another quick action:",[61,136,138],{"className":63,"code":137,"language":65,"meta":66,"style":66},"/milestone %13.10\n",[68,139,140],{"__ignoreMap":66},[71,141,142,145],{"class":73,"line":74},[71,143,144],{"class":77},"/milestone",[71,146,147],{"class":81}," %13.10\n",[13,149,150,151,154],{},"Note that 13.9 release planning already happened last month. The ",[20,152,153],{"href":42},"product kickoff"," highlights the planned features.",[13,156,157,158,161],{},"The keyboard shortcut ",[68,159,160],{},"cmd + enter"," now creates the issue without clicking a button.",[13,163,164],{},"So far, we were able to complete a lot of the necessary workflows around issues in one go, and without ever leaving the text box.",[13,166,167,168,171,172,175],{},"After reviewing the issue I created, I remembered that this issue should be assigned to the ",[68,169,170],{},"FY22Q1 Performance OKRs"," epic. Again, we can use a quick action. It’s important to note here that referencing an epic works with the ",[68,173,174],{},"&"," character. When we type this character, we can start to search for the epic by typing its name.",[61,177,179],{"className":63,"code":178,"language":65,"meta":66,"style":66},"/epic & \u003Csearch>\n",[68,180,181],{"__ignoreMap":66},[71,182,183,186,190,194,197],{"class":73,"line":74},[71,184,185],{"class":77},"/epic",[71,187,189],{"class":188},"sgsFI"," & ",[71,191,193],{"class":192},"sD7c4","\u003C",[71,195,196],{"class":77},"search",[71,198,199],{"class":188},">\n",[13,201,202],{},"This will turn into something like this:",[61,204,206],{"className":63,"code":205,"language":65,"meta":66,"style":66},"/epic &123\n",[68,207,208],{"__ignoreMap":66},[71,209,210,212,215],{"class":73,"line":74},[71,211,185],{"class":77},[71,213,214],{"class":188}," &",[71,216,217],{"class":77},"123\n",[13,219,220,221,223],{},"All quick actions can be used in a new comment and again using ",[68,222,160],{}," to save it.",[13,225,226,227,229],{},"The ",[68,228,170],{}," epic still needs to be added to a parent engineering OKR epic. So I'll navigate to the now-linked epic and use another quick action to set the parent epic.",[61,231,233],{"className":63,"code":232,"language":65,"meta":66,"style":66},"/parent_epic & \u003Csearch>\n",[68,234,235],{"__ignoreMap":66},[71,236,237,240,242,244,246],{"class":73,"line":74},[71,238,239],{"class":77},"/parent_epic",[71,241,189],{"class":188},[71,243,193],{"class":192},[71,245,196],{"class":77},[71,247,199],{"class":188},[13,249,250],{},"When working with multiple levels of epics, remember to keep practicing quick actions to create visual epic trees quickly. That’s all for now from my manager's side.",[27,252,254],{"id":253},"michael-a-developer-starts-with-code","Michael: A developer starts with code",[13,256,257,258,263],{},"I work on the ",[20,259,262],{"href":260,"rel":261},"https://handbook.gitlab.com/handbook/marketing/developer-relations/developer-advocacy/",[],"Developer Evangelism team"," at GitLab, and although I'm not technically a developer in the typical sense I still work with code on a daily basis. The average day starts with a new to-do. Today's to-do points me to the new issue that Roman created. After reviewing the issue requirements and defining the changes to be implemented, I start work: I'll clean up the work environment, pull the latest changes from the default branch (main/master), and create a new Git branch in my local terminal.",[13,265,266,267,272],{},"After a few commits, my work day nears its end. I decide to publish the local Git branch and create a new Merge Request (MR). After creating the MR, the triage workflow kicks off. I mark the ",[20,268,271],{"href":269,"rel":270},"https://docs.gitlab.com/user/project/merge_requests/drafts/",[],"MR as draft"," to prevent the workflow from starting before the MR is ready:",[61,274,276],{"className":63,"code":275,"language":65,"meta":66,"style":66},"/draft\n",[68,277,278],{"__ignoreMap":66},[71,279,280],{"class":73,"line":74},[71,281,275],{"class":77},[13,283,284,285,288,289,292],{},"The next day, I continue working on the MR and finish everything that was planned, so I need to remove the draft designation. The ",[68,286,287],{},"draft"," quick action is a toggle, so I can use it to assign and remove the ",[68,290,291],{},"Draft"," marker.",[61,294,295],{"className":63,"code":275,"language":65,"meta":66,"style":66},[68,296,297],{"__ignoreMap":66},[71,298,299],{"class":73,"line":74},[71,300,275],{"class":77},[13,302,303,304,308,309,312],{},"The next step is to assign a reviewer for the MR. GitLab 13.7 added ",[20,305,307],{"href":306},"/blog/merge-request-reviewers/","merge request reviewers",", which means we can leave the MR assignee untouched. I'll use the livesearch to assign the right reviewer with a leading ",[68,310,311],{},"@"," character.",[61,314,316],{"className":63,"code":315,"language":65,"meta":66,"style":66},"/assign_reviewer @ \u003Csearch>\n",[68,317,318],{"__ignoreMap":66},[71,319,320,323,326,329,332,335],{"class":73,"line":74},[71,321,322],{"class":77},"/assign_reviewer",[71,324,325],{"class":81}," @",[71,327,328],{"class":192}," \u003C",[71,330,331],{"class":81},"searc",[71,333,334],{"class":188},"h",[71,336,199],{"class":192},[13,338,339,343],{},[127,340],{"alt":341,"src":342},"GitLab Quick Actions: Remove draft and assign reviewer","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398565/blog/Content%20Images/improve-your-gitlab-productivity-10-tips/quick_action_toggle_draft_assign_reviewer.png","\nHow to remove the draft and add a reviewer using GitLab quick actions.",[13,345,346],{},"After the first round of review, I get feedback and items for follow-up. Since I am in the middle of a different tasks, I create a new to-do to remind myself of an open task to follow up on when I'm ready.",[61,348,350],{"className":63,"code":349,"language":65,"meta":66,"style":66},"/todo\n",[68,351,352],{"__ignoreMap":66},[71,353,354],{"class":73,"line":74},[71,355,349],{"class":77},[13,357,358],{},"Since my work as a developer evanglist includes many topics and areas, I get distracted with other high priority tasks throughout the day. Later in the week, I'll come back to the MR. The review items have been addressed by team member suggestions and all threads are resolved now. The reviewer approves the MR with the quick action:",[61,360,362],{"className":63,"code":361,"language":65,"meta":66,"style":66},"/approve\n",[68,363,364],{"__ignoreMap":66},[71,365,366],{"class":73,"line":74},[71,367,361],{"class":77},[13,369,370],{},"The review process took a little while to complete, and because GitLab is a fast-changing project, the Git branch is outdated. I need to rebase against the default branch.",[13,372,373,374,377],{},"But since I am already working on something else, I do not want to stop what I am doing currently to rebase. Then I remember: GitLab 13.8 added the ",[68,375,376],{},"/rebase"," quick action. This schedules a new background job that attempts to rebase the branch, and stops operations if it fails.",[13,379,380,381,384],{},"I open the MR and create a new comment. I start typing the rebase quick action, followed by ",[68,382,383],{},"cmd+enter"," to send it:",[61,386,388],{"className":63,"code":387,"language":65,"meta":66,"style":66},"/rebase\n",[68,389,390],{"__ignoreMap":66},[71,391,392],{"class":73,"line":74},[71,393,387],{"class":77},[13,395,396,400],{},[127,397],{"alt":398,"src":399},"GitLab Quick Actions: Rebase","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398563/blog/Content%20Images/improve-your-gitlab-productivity-10-tips/quick_action_rebase.png","\nHow to rebase with GitLab quick actions.",[13,402,403],{},"Phew. It worked. The CI/CD pipeline is running, and I believe that the rebase did not break anything. I go to click the \"Merge after pipeline succeeds\" button, and remember there's a quick action for that.",[61,405,407],{"className":63,"code":406,"language":65,"meta":66,"style":66},"/merge\n",[68,408,409],{"__ignoreMap":66},[71,410,411],{"class":73,"line":74},[71,412,406],{"class":77},[13,414,415,416,420],{},"The quick action takes into account what is configured for the project: Either merge when the pipeline succeeds or add it to the ",[20,417,419],{"href":418},"/blog/merge-trains-explained/","Merge Train",".",[13,422,423,424,427],{},"Everything happens automatically and I can continue working on other tasks. The manager (in this case, Roman) sees the issue being closed automatically using the ",[68,425,426],{},"Closes"," keyword. That's all from my developer's side.",[13,429,430,431,436],{},"Tip: ",[20,432,435],{"href":433,"rel":434},"https://docs.gitlab.com/user/project/issues/managing_issues/#closing-issues-automatically",[],"Automatically closing issues"," after the MR has been merged is an amazing workflow for everyone, assuming the manager has set the milestone accordingly.",[13,438,439,440,445],{},"At GitLab, we have documented our ",[20,441,444],{"href":442,"rel":443},"https://handbook.gitlab.com/handbook/engineering/workflow/",[],"engineering workflows"," which can be followed more efficiently with the quick actions shown in this blog post.",[27,447,449],{"id":448},"quick-actions-description-templates-️","Quick actions + description templates = ❤️",[13,451,452,453,457],{},"We demonstrated different ways quick actions can be used to complete common tasks more efficiently. But they do not always have to be applied manually. One shortcut is to just add them to ",[20,454,456],{"href":53,"rel":455},[],"description templates"," so you do not have to worry about remembering them all. This way, you can also automatically assign users, add labels, and much more based on the template you apply. Using description templates helps with project contributions and allows everyone to focus on the feature proposal or bug report.",[13,459,460,461,464],{},"Let’s try it! Create a new project, navigate into \"Issues > Labels\" and generate a default set of labels. Next, open the Web IDE and add a new file in ",[68,462,463],{},".gitlab/issue_templates/bug.md",". Add the following content:",[61,466,471],{"className":467,"code":469,"language":470,"meta":66},[468],"language-text","# Summary\n\n# Steps to reproduce\n\n1.\n1.\n1.\n\n\u003C!-- Do not edit the section below -->\n/label ~\"type::bug\"\n/assign @YOURUSER\n","text",[68,472,469],{"__ignoreMap":66},[13,474,475,476,479],{},"First, replace YOURUSER with your username (make sure you're logged in). Commit the new file to the default branch, and navigate into the issue list. Next, create a new issue and select ",[68,477,478],{},"bug"," from the dropdown. Add some content, and submit the issue. Finally, verify that the label and assignee are both set.",[13,481,482],{},"Tip: This is not limited to issue templates, it also works with MRs and epics. At GitLab we also often use this function to dynamically assign people based on reports created automatically. There are many opportunities to use description templates.",[27,484,486],{"id":485},"more-tips-and-insights","More tips and insights",[13,488,489],{},"We have not yet tried the following quick actions - can you help us out? :-)",[61,491,493],{"className":63,"code":492,"language":65,"meta":66,"style":66},"/shrug\n/tableflip\n",[68,494,495,500],{"__ignoreMap":66},[71,496,497],{"class":73,"line":74},[71,498,499],{"class":77},"/shrug\n",[71,501,503],{"class":73,"line":502},2,[71,504,505],{"class":77},"/tableflip\n",[13,507,508,509,514,515,520,521,526],{},"There are more ",[20,510,513],{"href":511,"rel":512},"https://docs.gitlab.com/user/project/quick_actions/",[],"quick actions"," and ",[20,516,519],{"href":517,"rel":518},"https://docs.gitlab.com/user/shortcuts/",[],"keyboard shortcuts"," available. In fact, GitLab user ",[20,522,525],{"href":523,"rel":524},"https://gitlab.com/garybell",[],"Gary Bell"," shared great insights on quick actions in his \"Tanuki Tuesday\" blog series:",[528,529,530,538],"ul",{},[531,532,533],"li",{},[20,534,537],{"href":535,"rel":536},"https://www.garybell.co.uk/quick-actions-in-gitlab/",[],"Quick Actions",[531,539,540],{},[20,541,544],{"href":542,"rel":543},"https://www.garybell.co.uk/using-keyboard-shortcuts-in-gitlab/",[],"Keyboard Shortcuts",[13,546,547],{},"Let us know in the comments below which quick actions most helped your productivity and if you have other creative ways of using quick actions.",[13,549,550,551,554],{},"PS: We also support shortcuts at GitLab, and the most loved shortcut is ",[68,552,553],{},"cmd + k"," for inserting a Markdown URL.",[13,556,557,558,563,564],{},"Cover image by ",[20,559,562],{"href":560,"rel":561},"https://unsplash.com/@nosoylasonia",[],"Juan Gomez"," on ",[20,565,568],{"href":566,"rel":567},"https://unsplash.com/photos/kt-wA0GDFq8",[],"Unsplash",[570,571,572],"style",{},"html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}",{"title":66,"searchDepth":502,"depth":502,"links":574},[575,577,578,579],{"id":29,"depth":576,"text":30},3,{"id":253,"depth":576,"text":254},{"id":448,"depth":576,"text":449},{"id":485,"depth":576,"text":486},"engineering","2021-02-18","Learn how quick actions can make you a more efficient GitLab user.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749666717/Blog/Hero%20Images/cover-image.jpg",{},true,"/en-us/blog/improve-your-gitlab-productivity-with-these-10-tips",{"title":5,"description":582,"ogTitle":5,"ogDescription":582,"noIndex":585,"ogImage":586,"ogUrl":591,"ogSiteName":592,"ogType":593,"canonicalUrls":591},"https://about.gitlab.com/blog/improve-your-gitlab-productivity-with-these-10-tips","https://about.gitlab.com","article","improve-your-gitlab-productivity-with-these-10-tips","en-us/blog/improve-your-gitlab-productivity-with-these-10-tips",[597,598,599],"workflow","collaboration","inside GitLab","BlogPost","pb1GQc7gXIXSceK_wqc8YdZS9r5GRZpqUpuaT_1k_Es",{"logo":603,"freeTrial":607,"sales":612,"login":617,"items":622,"search":948,"minimal":978,"duo":997,"switchNav":1006,"pricingDeployment":1017},{"config":604},{"href":88,"dataGaName":605,"dataGaLocation":606},"gitlab logo","header",{"text":608,"config":609},"Get free trial",{"href":610,"dataGaName":611,"dataGaLocation":606},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":613,"config":614},"Request a demo",{"href":615,"dataGaName":616,"dataGaLocation":606},"/sales/?contact-topic=request-demo","sales",{"text":618,"config":619},"Sign in",{"href":620,"dataGaName":621,"dataGaLocation":606},"https://gitlab.com/users/sign_in/","sign in",[623,652,752,757,870,926],{"text":624,"config":625,"menu":627},"Platform",{"dataNavLevelOne":626},"platform",{"type":628,"columns":629},"cards",[630,636,644],{"title":624,"description":631,"link":632},"The intelligent orchestration platform for DevSecOps",{"text":633,"config":634},"Explore our Platform",{"href":635,"dataGaName":626,"dataGaLocation":606},"/platform/",{"title":637,"description":638,"link":639},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":640,"config":641},"Meet GitLab Duo",{"href":642,"dataGaName":643,"dataGaLocation":606},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":645,"description":646,"link":647},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":648,"config":649},"Learn more",{"href":650,"dataGaName":651,"dataGaLocation":606},"/why-gitlab/","why gitlab",{"text":653,"left":588,"config":654,"menu":656},"Product",{"dataNavLevelOne":655},"solutions",{"type":657,"link":658,"columns":662,"feature":731},"lists",{"text":659,"config":660},"View all Solutions",{"href":661,"dataGaName":655,"dataGaLocation":606},"/solutions/",[663,687,710],{"title":664,"description":665,"link":666,"items":671},"Automation","CI/CD and automation to accelerate deployment",{"config":667},{"icon":668,"href":669,"dataGaName":670,"dataGaLocation":606},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[672,676,679,683],{"text":673,"config":674},"CI/CD",{"href":675,"dataGaLocation":606,"dataGaName":673},"/solutions/continuous-integration/",{"text":637,"config":677},{"href":642,"dataGaLocation":606,"dataGaName":678},"gitlab duo agent platform - product menu",{"text":680,"config":681},"Source Code Management",{"href":682,"dataGaLocation":606,"dataGaName":680},"/solutions/source-code-management/",{"text":684,"config":685},"Automated Software Delivery",{"href":669,"dataGaLocation":606,"dataGaName":686},"Automated software delivery",{"title":688,"description":689,"link":690,"items":695},"Security","Deliver code faster without compromising security",{"config":691},{"href":692,"dataGaName":693,"dataGaLocation":606,"icon":694},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[696,700,705],{"text":697,"config":698},"Application Security Testing",{"href":692,"dataGaName":699,"dataGaLocation":606},"Application security testing",{"text":701,"config":702},"Software Supply Chain Security",{"href":703,"dataGaLocation":606,"dataGaName":704},"/solutions/supply-chain/","Software supply chain security",{"text":706,"config":707},"Software Compliance",{"href":708,"dataGaName":709,"dataGaLocation":606},"/solutions/software-compliance/","software compliance",{"title":711,"link":712,"items":717},"Measurement",{"config":713},{"icon":714,"href":715,"dataGaName":716,"dataGaLocation":606},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[718,722,726],{"text":719,"config":720},"Visibility & Measurement",{"href":715,"dataGaLocation":606,"dataGaName":721},"Visibility and Measurement",{"text":723,"config":724},"Value Stream Management",{"href":725,"dataGaLocation":606,"dataGaName":723},"/solutions/value-stream-management/",{"text":727,"config":728},"Analytics & Insights",{"href":729,"dataGaLocation":606,"dataGaName":730},"/solutions/analytics-and-insights/","Analytics and insights",{"title":732,"type":657,"items":733},"GitLab for",[734,740,746],{"text":735,"config":736},"Enterprise",{"icon":737,"href":738,"dataGaLocation":606,"dataGaName":739},"Building","/enterprise/","enterprise",{"text":741,"config":742},"Small Business",{"icon":743,"href":744,"dataGaLocation":606,"dataGaName":745},"Work","/small-business/","small business",{"text":747,"config":748},"Public Sector",{"icon":749,"href":750,"dataGaLocation":606,"dataGaName":751},"Organization","/solutions/public-sector/","public sector",{"text":753,"config":754},"Pricing",{"href":755,"dataGaName":756,"dataGaLocation":606,"dataNavLevelOne":756},"/pricing/","pricing",{"text":758,"config":759,"menu":761},"Resources",{"dataNavLevelOne":760},"resources",{"type":657,"link":762,"columns":766,"feature":860},{"text":763,"config":764},"View all resources",{"href":765,"dataGaName":760,"dataGaLocation":606},"/resources/",[767,800,827],{"title":768,"items":769},"Getting started",[770,775,780,785,790,795],{"text":771,"config":772},"Install",{"href":773,"dataGaName":774,"dataGaLocation":606},"/install/","install",{"text":776,"config":777},"Quick start guides",{"href":778,"dataGaName":779,"dataGaLocation":606},"/get-started/","quick setup checklists",{"text":781,"config":782},"Learn",{"href":783,"dataGaLocation":606,"dataGaName":784},"https://university.gitlab.com/","learn",{"text":786,"config":787},"Product documentation",{"href":788,"dataGaName":789,"dataGaLocation":606},"https://docs.gitlab.com/","product documentation",{"text":791,"config":792},"Best practice videos",{"href":793,"dataGaName":794,"dataGaLocation":606},"/getting-started-videos/","best practice videos",{"text":796,"config":797},"Integrations",{"href":798,"dataGaName":799,"dataGaLocation":606},"/integrations/","integrations",{"title":801,"items":802},"Discover",[803,808,813,818,822],{"text":804,"config":805},"Customer success stories",{"href":806,"dataGaName":807,"dataGaLocation":606},"/customers/","customer success stories",{"text":809,"config":810},"Blog",{"href":811,"dataGaName":812,"dataGaLocation":606},"/blog/","blog",{"text":814,"config":815},"Demo Hub",{"href":816,"dataGaName":817,"dataGaLocation":606},"/demo-hub/","demo hub",{"text":819,"config":820},"The Source",{"href":821,"dataGaName":812,"dataGaLocation":606},"/the-source/",{"text":823,"config":824},"Remote",{"href":825,"dataGaName":826,"dataGaLocation":606},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":828,"items":829},"Connect",[830,835,840,845,850,855],{"text":831,"config":832},"GitLab Services",{"href":833,"dataGaName":834,"dataGaLocation":606},"/services/","services",{"text":836,"config":837},"Contribute",{"href":838,"dataGaName":839,"dataGaLocation":606},"https://contributors.gitlab.com","contribute",{"text":841,"config":842},"Community",{"href":843,"dataGaName":844,"dataGaLocation":606},"/community/","community",{"text":846,"config":847},"Forum",{"href":848,"dataGaName":849,"dataGaLocation":606},"https://forum.gitlab.com/","forum",{"text":851,"config":852},"Events",{"href":853,"dataGaName":854,"dataGaLocation":606},"/events/","events",{"text":856,"config":857},"Partners",{"href":858,"dataGaName":859,"dataGaLocation":606},"/partners/","partners",{"config":861,"title":864,"text":865,"link":866},{"background":862,"textColor":863},"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":867,"config":868},"Read the latest",{"href":42,"dataGaName":869,"dataGaLocation":606},"whats new",{"text":871,"config":872,"menu":874},"Company",{"dataNavLevelOne":873},"company",{"type":657,"columns":875},[876],{"items":877},[878,883,889,891,896,901,906,911,916,921],{"text":879,"config":880},"About",{"href":881,"dataGaName":882,"dataGaLocation":606},"/company/","about",{"text":884,"config":885,"footerGa":888},"Jobs",{"href":886,"dataGaName":887,"dataGaLocation":606},"/jobs/","jobs",{"dataGaName":887},{"text":851,"config":890},{"href":853,"dataGaName":854,"dataGaLocation":606},{"text":892,"config":893},"Leadership",{"href":894,"dataGaName":895,"dataGaLocation":606},"/company/team/e-group/","leadership",{"text":897,"config":898},"Handbook",{"href":899,"dataGaName":900,"dataGaLocation":606},"https://handbook.gitlab.com/","handbook",{"text":902,"config":903},"Investor relations",{"href":904,"dataGaName":905,"dataGaLocation":606},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":907,"config":908},"Trust Center",{"href":909,"dataGaName":910,"dataGaLocation":606},"/security/","trust center",{"text":912,"config":913},"AI Transparency Center",{"href":914,"dataGaName":915,"dataGaLocation":606},"/ai-transparency-center/","ai transparency center",{"text":917,"config":918},"Newsletter",{"href":919,"dataGaName":920,"dataGaLocation":606},"/company/contact/#contact-forms","newsletter",{"text":922,"config":923},"Press",{"href":924,"dataGaName":925,"dataGaLocation":606},"/press/","press",{"text":927,"config":928,"menu":929},"Contact us",{"dataNavLevelOne":873},{"type":657,"columns":930},[931],{"items":932},[933,938,943],{"text":934,"config":935},"Talk to sales",{"href":936,"dataGaName":937,"dataGaLocation":606},"/sales/","talk to sales",{"text":939,"config":940},"Support portal",{"href":941,"dataGaName":942,"dataGaLocation":606},"https://support.gitlab.com/hc/en-us","support portal",{"text":944,"config":945},"Customer portal",{"href":946,"dataGaName":947,"dataGaLocation":606},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":949,"login":950,"suggestions":956},"Close",{"text":951,"link":952},"To search repositories and projects, login to",{"text":953,"config":954},"gitlab.com",{"href":620,"dataGaName":955,"dataGaLocation":196},"search login",{"text":957,"default":958},"Suggestions",[959,961,965,967,971,975],{"text":637,"config":960},{"href":642,"dataGaName":637,"dataGaLocation":196},{"text":962,"config":963},"Code Suggestions (AI)",{"href":964,"dataGaName":962,"dataGaLocation":196},"/solutions/code-suggestions/",{"text":673,"config":966},{"href":675,"dataGaName":673,"dataGaLocation":196},{"text":968,"config":969},"GitLab on AWS",{"href":970,"dataGaName":968,"dataGaLocation":196},"/partners/technology-partners/aws/",{"text":972,"config":973},"GitLab on Google Cloud",{"href":974,"dataGaName":972,"dataGaLocation":196},"/partners/technology-partners/google-cloud-platform/",{"text":976,"config":977},"Why GitLab?",{"href":650,"dataGaName":976,"dataGaLocation":196},{"freeTrial":979,"mobileIcon":984,"desktopIcon":989,"secondaryButton":992},{"text":980,"config":981},"Start free trial",{"href":982,"dataGaName":611,"dataGaLocation":983},"https://gitlab.com/-/trials/new/","nav",{"altText":985,"config":986},"Gitlab Icon",{"src":987,"dataGaName":988,"dataGaLocation":983},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":985,"config":990},{"src":991,"dataGaName":988,"dataGaLocation":983},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":993,"config":994},"Get Started",{"href":995,"dataGaName":996,"dataGaLocation":983},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":998,"mobileIcon":1002,"desktopIcon":1004},{"text":999,"config":1000},"Learn more about GitLab Duo",{"href":642,"dataGaName":1001,"dataGaLocation":983},"gitlab duo",{"altText":985,"config":1003},{"src":987,"dataGaName":988,"dataGaLocation":983},{"altText":985,"config":1005},{"src":991,"dataGaName":988,"dataGaLocation":983},{"button":1007,"mobileIcon":1012,"desktopIcon":1014},{"text":1008,"config":1009},"/switch",{"href":1010,"dataGaName":1011,"dataGaLocation":983},"#contact","switch",{"altText":985,"config":1013},{"src":987,"dataGaName":988,"dataGaLocation":983},{"altText":985,"config":1015},{"src":1016,"dataGaName":988,"dataGaLocation":983},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":1018,"mobileIcon":1023,"desktopIcon":1025},{"text":1019,"config":1020},"Back to pricing",{"href":755,"dataGaName":1021,"dataGaLocation":983,"icon":1022},"back to pricing","GoBack",{"altText":985,"config":1024},{"src":987,"dataGaName":988,"dataGaLocation":983},{"altText":985,"config":1026},{"src":991,"dataGaName":988,"dataGaLocation":983},{"title":1028,"titleMobile":1029,"button":1030,"config":1035},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":648,"config":1031},{"href":1032,"dataGaName":1033,"dataGaLocation":1034},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":1036,"disabled":585},"release",{"data":1038},{"text":1039,"source":1040,"edit":1046,"contribute":1051,"config":1056,"items":1061,"minimal":1271},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":1041,"config":1042},"View page source",{"href":1043,"dataGaName":1044,"dataGaLocation":1045},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":1047,"config":1048},"Edit this page",{"href":1049,"dataGaName":1050,"dataGaLocation":1045},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":1052,"config":1053},"Please contribute",{"href":1054,"dataGaName":1055,"dataGaLocation":1045},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":1057,"facebook":1058,"youtube":1059,"linkedin":1060},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[1062,1109,1163,1207,1239],{"title":753,"links":1063,"subMenu":1078},[1064,1068,1073],{"text":1065,"config":1066},"View plans",{"href":755,"dataGaName":1067,"dataGaLocation":1045},"view plans",{"text":1069,"config":1070},"Why Premium?",{"href":1071,"dataGaName":1072,"dataGaLocation":1045},"/pricing/premium/","why premium",{"text":1074,"config":1075},"Why Ultimate?",{"href":1076,"dataGaName":1077,"dataGaLocation":1045},"/pricing/ultimate/","why ultimate",[1079],{"title":1080,"links":1081},"Contact Us",[1082,1085,1087,1089,1094,1099,1104],{"text":1083,"config":1084},"Contact sales",{"href":936,"dataGaName":616,"dataGaLocation":1045},{"text":939,"config":1086},{"href":941,"dataGaName":942,"dataGaLocation":1045},{"text":944,"config":1088},{"href":946,"dataGaName":947,"dataGaLocation":1045},{"text":1090,"config":1091},"Status",{"href":1092,"dataGaName":1093,"dataGaLocation":1045},"https://status.gitlab.com/","status",{"text":1095,"config":1096},"Terms of use",{"href":1097,"dataGaName":1098,"dataGaLocation":1045},"/terms/","terms of use",{"text":1100,"config":1101},"Privacy statement",{"href":1102,"dataGaName":1103,"dataGaLocation":1045},"/privacy/","privacy statement",{"text":1105,"config":1106},"Cookie preferences",{"dataGaName":1107,"dataGaLocation":1045,"id":1108,"isOneTrustButton":588},"cookie preferences","ot-sdk-btn",{"title":653,"links":1110,"subMenu":1119},[1111,1115],{"text":1112,"config":1113},"DevSecOps platform",{"href":635,"dataGaName":1114,"dataGaLocation":1045},"devsecops platform",{"text":1116,"config":1117},"AI-Assisted Development",{"href":642,"dataGaName":1118,"dataGaLocation":1045},"ai-assisted development",[1120],{"title":1121,"links":1122},"Topics",[1123,1128,1133,1138,1143,1148,1153,1158],{"text":1124,"config":1125},"CICD",{"href":1126,"dataGaName":1127,"dataGaLocation":1045},"/topics/ci-cd/","cicd",{"text":1129,"config":1130},"GitOps",{"href":1131,"dataGaName":1132,"dataGaLocation":1045},"/topics/gitops/","gitops",{"text":1134,"config":1135},"DevOps",{"href":1136,"dataGaName":1137,"dataGaLocation":1045},"/topics/devops/","devops",{"text":1139,"config":1140},"Version Control",{"href":1141,"dataGaName":1142,"dataGaLocation":1045},"/topics/version-control/","version control",{"text":1144,"config":1145},"DevSecOps",{"href":1146,"dataGaName":1147,"dataGaLocation":1045},"/topics/devsecops/","devsecops",{"text":1149,"config":1150},"Cloud Native",{"href":1151,"dataGaName":1152,"dataGaLocation":1045},"/topics/cloud-native/","cloud native",{"text":1154,"config":1155},"AI for Coding",{"href":1156,"dataGaName":1157,"dataGaLocation":1045},"/topics/devops/ai-for-coding/","ai for coding",{"text":1159,"config":1160},"Agentic AI",{"href":1161,"dataGaName":1162,"dataGaLocation":1045},"/topics/agentic-ai/","agentic ai",{"title":1164,"links":1165},"Solutions",[1166,1168,1170,1175,1179,1182,1186,1189,1191,1194,1197,1202],{"text":697,"config":1167},{"href":692,"dataGaName":697,"dataGaLocation":1045},{"text":686,"config":1169},{"href":669,"dataGaName":670,"dataGaLocation":1045},{"text":1171,"config":1172},"Agile development",{"href":1173,"dataGaName":1174,"dataGaLocation":1045},"/solutions/agile-delivery/","agile delivery",{"text":1176,"config":1177},"SCM",{"href":682,"dataGaName":1178,"dataGaLocation":1045},"source code management",{"text":1124,"config":1180},{"href":675,"dataGaName":1181,"dataGaLocation":1045},"continuous integration & delivery",{"text":1183,"config":1184},"Value stream management",{"href":725,"dataGaName":1185,"dataGaLocation":1045},"value stream management",{"text":1129,"config":1187},{"href":1188,"dataGaName":1132,"dataGaLocation":1045},"/solutions/gitops/",{"text":735,"config":1190},{"href":738,"dataGaName":739,"dataGaLocation":1045},{"text":1192,"config":1193},"Small business",{"href":744,"dataGaName":745,"dataGaLocation":1045},{"text":1195,"config":1196},"Public sector",{"href":750,"dataGaName":751,"dataGaLocation":1045},{"text":1198,"config":1199},"Education",{"href":1200,"dataGaName":1201,"dataGaLocation":1045},"/solutions/education/","education",{"text":1203,"config":1204},"Financial services",{"href":1205,"dataGaName":1206,"dataGaLocation":1045},"/solutions/finance/","financial services",{"title":758,"links":1208},[1209,1211,1213,1215,1218,1220,1223,1225,1227,1229,1231,1233,1235,1237],{"text":771,"config":1210},{"href":773,"dataGaName":774,"dataGaLocation":1045},{"text":776,"config":1212},{"href":778,"dataGaName":779,"dataGaLocation":1045},{"text":781,"config":1214},{"href":783,"dataGaName":784,"dataGaLocation":1045},{"text":786,"config":1216},{"href":788,"dataGaName":1217,"dataGaLocation":1045},"docs",{"text":809,"config":1219},{"href":811,"dataGaName":812,"dataGaLocation":1045},{"text":1221,"config":1222},"What's new",{"href":42,"dataGaName":869,"dataGaLocation":1045},{"text":804,"config":1224},{"href":806,"dataGaName":807,"dataGaLocation":1045},{"text":823,"config":1226},{"href":825,"dataGaName":826,"dataGaLocation":1045},{"text":831,"config":1228},{"href":833,"dataGaName":834,"dataGaLocation":1045},{"text":836,"config":1230},{"href":838,"dataGaName":839,"dataGaLocation":1045},{"text":841,"config":1232},{"href":843,"dataGaName":844,"dataGaLocation":1045},{"text":846,"config":1234},{"href":848,"dataGaName":849,"dataGaLocation":1045},{"text":851,"config":1236},{"href":853,"dataGaName":854,"dataGaLocation":1045},{"text":856,"config":1238},{"href":858,"dataGaName":859,"dataGaLocation":1045},{"title":871,"links":1240},[1241,1243,1245,1247,1249,1251,1255,1260,1262,1264,1266],{"text":879,"config":1242},{"href":881,"dataGaName":873,"dataGaLocation":1045},{"text":884,"config":1244},{"href":886,"dataGaName":887,"dataGaLocation":1045},{"text":892,"config":1246},{"href":894,"dataGaName":895,"dataGaLocation":1045},{"text":897,"config":1248},{"href":899,"dataGaName":900,"dataGaLocation":1045},{"text":902,"config":1250},{"href":904,"dataGaName":905,"dataGaLocation":1045},{"text":1252,"config":1253},"Sustainability",{"href":1254,"dataGaName":1252,"dataGaLocation":1045},"/sustainability/",{"text":1256,"config":1257},"Diversity, inclusion and belonging (DIB)",{"href":1258,"dataGaName":1259,"dataGaLocation":1045},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":907,"config":1261},{"href":909,"dataGaName":910,"dataGaLocation":1045},{"text":917,"config":1263},{"href":919,"dataGaName":920,"dataGaLocation":1045},{"text":922,"config":1265},{"href":924,"dataGaName":925,"dataGaLocation":1045},{"text":1267,"config":1268},"Modern Slavery Transparency Statement",{"href":1269,"dataGaName":1270,"dataGaLocation":1045},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1272},[1273,1276,1279],{"text":1274,"config":1275},"Terms",{"href":1097,"dataGaName":1098,"dataGaLocation":1045},{"text":1277,"config":1278},"Cookies",{"dataGaName":1107,"dataGaLocation":1045,"id":1108,"isOneTrustButton":588},{"text":1280,"config":1281},"Privacy",{"href":1102,"dataGaName":1103,"dataGaLocation":1045},[1283,1297],{"id":1284,"title":7,"body":584,"config":1285,"content":1287,"description":584,"extension":1291,"meta":1292,"navigation":588,"path":1293,"seo":1294,"stem":1295,"__hash__":1296},"blogAuthors/en-us/blog/authors/michael-friedrich.yml",{"template":1286},"BlogAuthor",{"name":7,"config":1288},{"headshot":1289,"ctfId":1290},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659879/Blog/Author%20Headshots/dnsmichi-headshot.jpg","dnsmichi","yml",{},"/en-us/blog/authors/michael-friedrich",{},"en-us/blog/authors/michael-friedrich","lJ-nfRIhdG49Arfrxdn1Vv4UppwD51BB13S3HwIswt4",{"id":1298,"title":8,"body":584,"config":1299,"content":1300,"description":584,"extension":1291,"meta":1303,"navigation":588,"path":1304,"seo":1305,"stem":1306,"__hash__":1307},"blogAuthors/en-us/blog/authors/roman-kuba.yml",{"template":1286},{"name":8,"config":1301},{"headshot":66,"ctfId":1302},"rkuba",{},"/en-us/blog/authors/roman-kuba",{},"en-us/blog/authors/roman-kuba","PGzffUffBJUTsYN7aP8KH9P6G7htwXv86tl4ah2yShM",[1309,1318,1326],{"title":1310,"description":1311,"heroImage":1312,"category":580,"date":1313,"authors":1314,"slug":1317,"externalUrl":584},"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",[1315,1316],"Mathias Ewald","Martin Paloncy, Edgeless Systems","confidential-ai-for-gitlab-self-hosted",{"title":1319,"description":1320,"heroImage":1321,"category":580,"date":1322,"authors":1323,"slug":1325,"externalUrl":584},"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",[1324],"Lysanne Pinto","green-devops-carbon-measurement-cicd-pipeline",{"title":1327,"description":1328,"heroImage":1329,"category":580,"date":1330,"authors":1331,"slug":1333,"externalUrl":584},"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",[1332],"Paul Meresanu","how-to-build-ci-cd-observability-at-scale",{"promotions":1335},[1336,1350,1362,1374],{"id":1337,"categories":1338,"header":1340,"text":1341,"button":1342,"image":1347},"ai-modernization",[1339],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":1343,"config":1344},"Get your AI maturity score",{"href":1345,"dataGaName":1346,"dataGaLocation":812},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":1348},{"src":1349},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1351,"categories":1352,"header":1354,"text":1341,"button":1355,"image":1359},"devops-modernization",[1353,1147],"product","Are you just managing tools or shipping innovation?",{"text":1356,"config":1357},"Get your DevOps maturity score",{"href":1358,"dataGaName":1346,"dataGaLocation":812},"/assessments/devops-modernization-assessment/",{"config":1360},{"src":1361},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1363,"categories":1364,"header":1366,"text":1341,"button":1367,"image":1371},"security-modernization",[1365],"security","Are you trading speed for security?",{"text":1368,"config":1369},"Get your security maturity score",{"href":1370,"dataGaName":1346,"dataGaLocation":812},"/assessments/security-modernization-assessment/",{"config":1372},{"src":1373},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1375,"paths":1376,"header":1379,"text":1380,"button":1381,"image":1386},"github-azure-migration",[1377,1378],"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":1382,"config":1383},"See how GitLab compares to GitHub",{"href":1384,"dataGaName":1385,"dataGaLocation":812},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1387},{"src":1361},{"header":1389,"blurb":1390,"button":1391,"secondaryButton":1396},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1392,"config":1393},"Get your free trial",{"href":1394,"dataGaName":611,"dataGaLocation":1395},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":1083,"config":1397},{"href":936,"dataGaName":616,"dataGaLocation":1395},1786803770478]