[{"data":1,"prerenderedAt":1459},["ShallowReactive",2],{"/blog/whats-new-in-git-2-53-0":3,"navigation-en-us":674,"banner-en-us":1101,"footer-en-us":1111,"blog-post-authors-en-us-Justin Tobler":1356,"blog-related-posts-en-us-whats-new-in-git-2-53-0":1371,"blog-promotions-en-us":1395,"next-steps-en-us":1449},{"id":4,"title":5,"authors":6,"body":8,"category":655,"date":656,"description":657,"extension":658,"externalUrl":659,"faq":659,"featured":152,"heroImage":660,"meta":661,"navigation":152,"path":662,"seo":663,"slug":666,"stem":667,"tags":668,"template":672,"updatedDate":659,"__hash__":673},"blogPosts/en-us/blog/whats-new-in-git-2-53-0.md","What’s new in Git 2.53.0?",[7],"Justin Tobler",{"type":9,"value":10,"toc":649},"minimark",[11,22,27,30,33,36,39,42,51,59,63,72,86,89,99,106,110,119,618,621,627,631,645],[12,13,14,15,21],"p",{},"The Git project recently released ",[16,17,20],"a",{"href":18,"rel":19},"https://lore.kernel.org/git/xmqq4inz13e3.fsf@gitster.g/T/#u",[],"Git 2.53.0",". Let's look at a few notable highlights from this release, which includes\ncontributions from the Git team at GitLab.",[23,24,26],"h2",{"id":25},"geometric-repacking-support-with-promisor-remotes","Geometric repacking support with promisor remotes",[12,28,29],{},"Newly written objects in a Git repository are often stored as individual loose files. To ensure good performance and optimal use of disk space, these loose objects are regularly compressed into so-called packfiles. The number of packfiles in a repository grows over time as a result of the user’s activities, like writing new commits or fetching from a remote. As the number of packfiles in a repository increases, Git has to do more work to look up individual objects. Therefore, to preserve optimal repository performance, packfiles are periodically repacked via git-repack(1) to consolidate the objects into fewer packfiles. When repacking there are two strategies: “all-into-one” and “geometric”.",[12,31,32],{},"The all-into-one strategy is fairly straightforward and the current default. As its name implies, all objects in the repository are packed into a single packfile. From a performance perspective this is great for the repository as Git only has to scan through a single packfile when looking up objects. The main downside of such a repacking strategy is that computing a single packfile for a repository can take a significant amount of time for large repositories.",[12,34,35],{},"The geometric strategy helps mitigate this concern by maintaining a geometric progression of packfiles based on their size instead of always repacking into a single packfile. To explain more plainly, when repacking Git maintains a set of packfiles ordered by size where each packfile in the sequence is expected to be at least twice the size of the preceding packfile. If a packfile in the sequence violates this property, packfiles are combined as needed until the progression is restored. This strategy has the advantage of still minimizing the number of packfiles in a repository while also minimizing the amount of work that must be done for most repacking operations.",[12,37,38],{},"One problem with the geometric repacking strategy was that it was not compatible with partial clones. Partial clones allow the user to clone only parts of a repository by, for example, skipping all blobs larger than 1 megabyte. This can significantly reduce the size of a repository, and Git knows how to backfill missing objects that it needs to access at a later point in time.",[12,40,41],{},"The result is a repository that is missing some objects, and any object that may not be fully connected is stored in a “promisor” packfile.  When repacking, this promisor property needs to be retained going forward for packfiles containing a promisor object so it is known whether a missing object is expected and can be backfilled from the promisor remote. With an all-into-one repack, Git knows how to handle promisor objects properly and stores them in a separate promisor packfile. Unfortunately, the geometric repacking strategy did not know to give special treatment to promisor packfiles and instead would merge them with normal packfiles without considering whether they reference promisor objects. Luckily, due to a bug the underlying git-pack-objects(1) dies when using geometric repacking in a partial clone repository. So this means repositories in this configuration were not able to be repacked anyways which isn’t great, but better than repository corruption.",[12,43,44,45,50],{},"With the release of Git 2.53, geometric repacking now works with partial clone repositories. When performing a geometric repack, promisor packfiles are handled separately in order to preserve the promisor marker and repacked following a separate geometric progression. With this fix, the geometric strategy moves closer towards becoming the default repacking strategy. For more information check out the corresponding ",[16,46,49],{"href":47,"rel":48},"https://lore.kernel.org/git/20260105-pks-geometric-repack-with-promisors-v1-0-c4660573437e@pks.im/",[],"mailing list thread",".",[12,52,53,54,50],{},"This project was led by ",[16,55,58],{"href":56,"rel":57},"https://gitlab.com/pks-gitlab",[],"Patrick Steinhardt",[23,60,62],{"id":61},"git-fast-import1-learned-to-preserve-only-valid-signatures","git-fast-import(1) learned to preserve only valid signatures",[12,64,65,66,71],{},"In our ",[16,67,70],{"href":68,"rel":69},"https://about.gitlab.com/blog/whats-new-in-git-2-52-0/",[],"Git 2.52 release article",", we covered signature related improvements to git-fast-import(1) and git-fast-export(1). Be sure to check out that post for a more detailed explanation of these commands, how they are used, and the changes being made with regards to signatures.",[12,73,74,75,80,81,85],{},"To quickly recap, git-fast-import(1) provides a backend to efficiently import data into a repository and is used by tools such as ",[16,76,79],{"href":77,"rel":78},"https://github.com/newren/git-filter-repo",[],"git-filter-repo(1)"," to help rewrite the history of a repository in bulk. In the Git 2.52 release, git-fast-import(1) learned the ",[82,83,84],"code",{},"--signed-commits=\u003Cmode>"," option similar to the same option in git-fast-export(1). With this option, it became possible to unconditionally retain or strip signatures from commits/tags.",[12,87,88],{},"In situations where only part of the repository history has been rewritten, any signature for rewritten commits/tags becomes invalid. This means git-fast-import(1) is limited to either stripping all signatures or keeping all signatures even if they have become invalid. But retaining invalid signatures doesn’t make much sense, so rewriting history with git-repo-filter(1) results in all signatures being stripped, even if the underlying commit/tag is not rewritten. This is unfortunate because if the commit/tag is unchanged, its signature is still valid and thus there is no real reason to strip it. What is really needed is a means to preserve signatures for unchanged objects, but strip invalid ones.",[12,90,91,92,94,95,98],{},"With the release of Git 2.53, the git-fast-import(1) ",[82,93,84],{}," option has learned a new ",[82,96,97],{},"strip-if-invalid"," mode which, when specified, only strips signatures from commits that become invalid due to being rewritten. Thus, with this option it becomes possible to preserve some commit signatures when using git-fast-import(1). This is a critical step towards providing the foundation for tools like git-repo-filter(1) to preserve valid signatures and eventually re-sign invalid signatures.",[12,100,53,101,50],{},[16,102,105],{"href":103,"rel":104},"https://gitlab.com/chriscool",[],"Christian Couder",[23,107,109],{"id":108},"more-data-collected-in-git-repo-structure","More data collected in git-repo-structure",[12,111,112,113,118],{},"In the Git 2.52 release, the “structure” subcommand was introduced to git-repo(1). The intent of this command was to collect information about the repository and eventually become a native replacement for tools such as ",[16,114,117],{"href":115,"rel":116},"https://github.com/github/git-sizer",[],"git-sizer(1)",". At GitLab, we host some extremely large repositories, and having insight into the general structure of a repository is critical to understand its performance characteristics. In this release, the command now also collects total size information for reachable objects in a repository to help understand the overall size of the repository. In the output below, you can see the command now collects both the total inflated and disk sizes of reachable objects by object type.",[120,121,126],"pre",{"className":122,"code":123,"language":124,"meta":125,"style":125},"language-shell shiki shiki-themes github-light","$ git repo structure\n\n| Repository structure | Value      |\n| -------------------- | ---------- |\n| * References         |            |\n|   * Count            |   1.78 k   |\n|     * Branches       |      5     |\n|     * Tags           |   1.03 k   |\n|     * Remotes        |    749     |\n|     * Others         |      0     |\n|                      |            |\n| * Reachable objects  |            |\n|   * Count            | 421.37 k   |\n|     * Commits        |  88.03 k   |\n|     * Trees          | 169.95 k   |\n|     * Blobs          | 162.40 k   |\n|     * Tags           |    994     |\n|   * Inflated size    |   7.61 GiB |\n|     * Commits        |  60.95 MiB |\n|     * Trees          |   2.44 GiB |\n|     * Blobs          |   5.11 GiB |\n|     * Tags           | 731.73 KiB |\n|   * Disk size        | 301.50 MiB |\n|     * Commits        |  33.57 MiB |\n|     * Trees          |  77.92 MiB |\n|     * Blobs          | 189.44 MiB |\n|     * Tags           | 578.13 KiB |\n","shell","",[82,127,128,147,154,176,192,209,232,252,272,290,307,317,335,353,372,392,411,427,451,470,488,506,525,546,564,582,600],{"__ignoreMap":125},[129,130,133,137,141,144],"span",{"class":131,"line":132},"line",1,[129,134,136],{"class":135},"s7eDp","$",[129,138,140],{"class":139},"sYBdl"," git",[129,142,143],{"class":139}," repo",[129,145,146],{"class":139}," structure\n",[129,148,150],{"class":131,"line":149},2,[129,151,153],{"emptyLinePlaceholder":152},true,"\n",[129,155,157,161,164,167,170,173],{"class":131,"line":156},3,[129,158,160],{"class":159},"sD7c4","|",[129,162,163],{"class":135}," Repository",[129,165,166],{"class":139}," structure",[129,168,169],{"class":159}," |",[129,171,172],{"class":135}," Value",[129,174,175],{"class":159},"      |\n",[129,177,179,181,184,186,189],{"class":131,"line":178},4,[129,180,160],{"class":159},[129,182,183],{"class":135}," --------------------",[129,185,169],{"class":159},[129,187,188],{"class":135}," ----------",[129,190,191],{"class":159}," |\n",[129,193,195,197,200,203,206],{"class":131,"line":194},5,[129,196,160],{"class":159},[129,198,199],{"class":135}," *",[129,201,202],{"class":139}," References",[129,204,205],{"class":159},"         |",[129,207,208],{"class":159},"            |\n",[129,210,212,214,217,220,223,226,229],{"class":131,"line":211},6,[129,213,160],{"class":159},[129,215,216],{"class":135},"   *",[129,218,219],{"class":139}," Count",[129,221,222],{"class":159},"            |",[129,224,225],{"class":135},"   1.78",[129,227,228],{"class":139}," k",[129,230,231],{"class":159},"   |\n",[129,233,235,237,240,243,246,249],{"class":131,"line":234},7,[129,236,160],{"class":159},[129,238,239],{"class":135},"     *",[129,241,242],{"class":139}," Branches",[129,244,245],{"class":159},"       |",[129,247,248],{"class":135},"      5",[129,250,251],{"class":159},"     |\n",[129,253,255,257,259,262,265,268,270],{"class":131,"line":254},8,[129,256,160],{"class":159},[129,258,239],{"class":135},[129,260,261],{"class":139}," Tags",[129,263,264],{"class":159},"           |",[129,266,267],{"class":135},"   1.03",[129,269,228],{"class":139},[129,271,231],{"class":159},[129,273,275,277,279,282,285,288],{"class":131,"line":274},9,[129,276,160],{"class":159},[129,278,239],{"class":135},[129,280,281],{"class":139}," Remotes",[129,283,284],{"class":159},"        |",[129,286,287],{"class":135},"    749",[129,289,251],{"class":159},[129,291,293,295,297,300,302,305],{"class":131,"line":292},10,[129,294,160],{"class":159},[129,296,239],{"class":135},[129,298,299],{"class":139}," Others",[129,301,205],{"class":159},[129,303,304],{"class":135},"      0",[129,306,251],{"class":159},[129,308,310,312,315],{"class":131,"line":309},11,[129,311,160],{"class":159},[129,313,314],{"class":159},"                      |",[129,316,208],{"class":159},[129,318,320,322,324,327,330,333],{"class":131,"line":319},12,[129,321,160],{"class":159},[129,323,199],{"class":135},[129,325,326],{"class":139}," Reachable",[129,328,329],{"class":139}," objects",[129,331,332],{"class":159},"  |",[129,334,208],{"class":159},[129,336,338,340,342,344,346,349,351],{"class":131,"line":337},13,[129,339,160],{"class":159},[129,341,216],{"class":135},[129,343,219],{"class":139},[129,345,222],{"class":159},[129,347,348],{"class":135}," 421.37",[129,350,228],{"class":139},[129,352,231],{"class":159},[129,354,356,358,360,363,365,368,370],{"class":131,"line":355},14,[129,357,160],{"class":159},[129,359,239],{"class":135},[129,361,362],{"class":139}," Commits",[129,364,284],{"class":159},[129,366,367],{"class":135},"  88.03",[129,369,228],{"class":139},[129,371,231],{"class":159},[129,373,375,377,379,382,385,388,390],{"class":131,"line":374},15,[129,376,160],{"class":159},[129,378,239],{"class":135},[129,380,381],{"class":139}," Trees",[129,383,384],{"class":159},"          |",[129,386,387],{"class":135}," 169.95",[129,389,228],{"class":139},[129,391,231],{"class":159},[129,393,395,397,399,402,404,407,409],{"class":131,"line":394},16,[129,396,160],{"class":159},[129,398,239],{"class":135},[129,400,401],{"class":139}," Blobs",[129,403,384],{"class":159},[129,405,406],{"class":135}," 162.40",[129,408,228],{"class":139},[129,410,231],{"class":159},[129,412,414,416,418,420,422,425],{"class":131,"line":413},17,[129,415,160],{"class":159},[129,417,239],{"class":135},[129,419,261],{"class":139},[129,421,264],{"class":159},[129,423,424],{"class":135},"    994",[129,426,251],{"class":159},[129,428,430,432,434,437,440,443,446,449],{"class":131,"line":429},18,[129,431,160],{"class":159},[129,433,216],{"class":135},[129,435,436],{"class":139}," Inflated",[129,438,439],{"class":139}," size",[129,441,442],{"class":159},"    |",[129,444,445],{"class":135},"   7.61",[129,447,448],{"class":139}," GiB",[129,450,191],{"class":159},[129,452,454,456,458,460,462,465,468],{"class":131,"line":453},19,[129,455,160],{"class":159},[129,457,239],{"class":135},[129,459,362],{"class":139},[129,461,284],{"class":159},[129,463,464],{"class":135},"  60.95",[129,466,467],{"class":139}," MiB",[129,469,191],{"class":159},[129,471,473,475,477,479,481,484,486],{"class":131,"line":472},20,[129,474,160],{"class":159},[129,476,239],{"class":135},[129,478,381],{"class":139},[129,480,384],{"class":159},[129,482,483],{"class":135},"   2.44",[129,485,448],{"class":139},[129,487,191],{"class":159},[129,489,491,493,495,497,499,502,504],{"class":131,"line":490},21,[129,492,160],{"class":159},[129,494,239],{"class":135},[129,496,401],{"class":139},[129,498,384],{"class":159},[129,500,501],{"class":135},"   5.11",[129,503,448],{"class":139},[129,505,191],{"class":159},[129,507,509,511,513,515,517,520,523],{"class":131,"line":508},22,[129,510,160],{"class":159},[129,512,239],{"class":135},[129,514,261],{"class":139},[129,516,264],{"class":159},[129,518,519],{"class":135}," 731.73",[129,521,522],{"class":139}," KiB",[129,524,191],{"class":159},[129,526,528,530,532,535,537,539,542,544],{"class":131,"line":527},23,[129,529,160],{"class":159},[129,531,216],{"class":135},[129,533,534],{"class":139}," Disk",[129,536,439],{"class":139},[129,538,284],{"class":159},[129,540,541],{"class":135}," 301.50",[129,543,467],{"class":139},[129,545,191],{"class":159},[129,547,549,551,553,555,557,560,562],{"class":131,"line":548},24,[129,550,160],{"class":159},[129,552,239],{"class":135},[129,554,362],{"class":139},[129,556,284],{"class":159},[129,558,559],{"class":135},"  33.57",[129,561,467],{"class":139},[129,563,191],{"class":159},[129,565,567,569,571,573,575,578,580],{"class":131,"line":566},25,[129,568,160],{"class":159},[129,570,239],{"class":135},[129,572,381],{"class":139},[129,574,384],{"class":159},[129,576,577],{"class":135},"  77.92",[129,579,467],{"class":139},[129,581,191],{"class":159},[129,583,585,587,589,591,593,596,598],{"class":131,"line":584},26,[129,586,160],{"class":159},[129,588,239],{"class":135},[129,590,401],{"class":139},[129,592,384],{"class":159},[129,594,595],{"class":135}," 189.44",[129,597,467],{"class":139},[129,599,191],{"class":159},[129,601,603,605,607,609,611,614,616],{"class":131,"line":602},27,[129,604,160],{"class":159},[129,606,239],{"class":135},[129,608,261],{"class":139},[129,610,264],{"class":159},[129,612,613],{"class":135}," 578.13",[129,615,522],{"class":139},[129,617,191],{"class":159},[12,619,620],{},"The keen-eyed among you may have also noticed that the size values in the table output are also now listed in a more human-friendly manner with units appended. In subsequent releases we hope to further expand this command's output to provide additional data points such as the largest individual objects in the repository.",[12,622,53,623,50],{},[16,624,7],{"href":625,"rel":626},"https://gitlab.com/justintobler",[],[23,628,630],{"id":629},"read-more","Read more",[12,632,633,634,638,639,644],{},"This article highlighted just a few of the contributions made by GitLab and\nthe wider Git community for this latest release. You can learn about these from\nthe ",[16,635,637],{"href":18,"rel":636},[],"official release announcement"," of the Git project. Also, check\nout our ",[16,640,643],{"href":641,"rel":642},"https://about.gitlab.com/blog/tags/git/",[],"previous Git release blog posts","\nto see other past highlights of contributions from GitLab team members.",[646,647,648],"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 pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}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":125,"searchDepth":149,"depth":149,"links":650},[651,652,653,654],{"id":25,"depth":149,"text":26},{"id":61,"depth":149,"text":62},{"id":108,"depth":149,"text":109},{"id":629,"depth":149,"text":630},"open-source","2026-02-02","Learn about release contributions, including fixes for geometric repacking, updates to git-fast-import(1) commit signature handing options, and more.","md",null,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663087/Blog/Hero%20Images/git3-cover.png",{},"/en-us/blog/whats-new-in-git-2-53-0",{"config":664,"title":5,"description":657},{"noIndex":665},false,"whats-new-in-git-2-53-0","en-us/blog/whats-new-in-git-2-53-0",[669,670,671],"open source","git","community","BlogPost","xAVs43Mdbqp9hRbEG9UfdgIXye2dJeqykUVrkAncL1U",{"logo":675,"freeTrial":680,"sales":685,"login":690,"items":695,"search":1021,"minimal":1052,"duo":1071,"switchNav":1080,"pricingDeployment":1091},{"config":676},{"href":677,"dataGaName":678,"dataGaLocation":679},"/","gitlab logo","header",{"text":681,"config":682},"Get free trial",{"href":683,"dataGaName":684,"dataGaLocation":679},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":686,"config":687},"Request a demo",{"href":688,"dataGaName":689,"dataGaLocation":679},"/sales/?contact-topic=request-demo","sales",{"text":691,"config":692},"Sign in",{"href":693,"dataGaName":694,"dataGaLocation":679},"https://gitlab.com/users/sign_in/","sign in",[696,725,825,830,943,999],{"text":697,"config":698,"menu":700},"Platform",{"dataNavLevelOne":699},"platform",{"type":701,"columns":702},"cards",[703,709,717],{"title":697,"description":704,"link":705},"The intelligent orchestration platform for DevSecOps",{"text":706,"config":707},"Explore our Platform",{"href":708,"dataGaName":699,"dataGaLocation":679},"/platform/",{"title":710,"description":711,"link":712},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":713,"config":714},"Meet GitLab Duo",{"href":715,"dataGaName":716,"dataGaLocation":679},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":718,"description":719,"link":720},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":721,"config":722},"Learn more",{"href":723,"dataGaName":724,"dataGaLocation":679},"/why-gitlab/","why gitlab",{"text":726,"left":152,"config":727,"menu":729},"Product",{"dataNavLevelOne":728},"solutions",{"type":730,"link":731,"columns":735,"feature":804},"lists",{"text":732,"config":733},"View all Solutions",{"href":734,"dataGaName":728,"dataGaLocation":679},"/solutions/",[736,760,783],{"title":737,"description":738,"link":739,"items":744},"Automation","CI/CD and automation to accelerate deployment",{"config":740},{"icon":741,"href":742,"dataGaName":743,"dataGaLocation":679},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[745,749,752,756],{"text":746,"config":747},"CI/CD",{"href":748,"dataGaLocation":679,"dataGaName":746},"/solutions/continuous-integration/",{"text":710,"config":750},{"href":715,"dataGaLocation":679,"dataGaName":751},"gitlab duo agent platform - product menu",{"text":753,"config":754},"Source Code Management",{"href":755,"dataGaLocation":679,"dataGaName":753},"/solutions/source-code-management/",{"text":757,"config":758},"Automated Software Delivery",{"href":742,"dataGaLocation":679,"dataGaName":759},"Automated software delivery",{"title":761,"description":762,"link":763,"items":768},"Security","Deliver code faster without compromising security",{"config":764},{"href":765,"dataGaName":766,"dataGaLocation":679,"icon":767},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[769,773,778],{"text":770,"config":771},"Application Security Testing",{"href":765,"dataGaName":772,"dataGaLocation":679},"Application security testing",{"text":774,"config":775},"Software Supply Chain Security",{"href":776,"dataGaLocation":679,"dataGaName":777},"/solutions/supply-chain/","Software supply chain security",{"text":779,"config":780},"Software Compliance",{"href":781,"dataGaName":782,"dataGaLocation":679},"/solutions/software-compliance/","software compliance",{"title":784,"link":785,"items":790},"Measurement",{"config":786},{"icon":787,"href":788,"dataGaName":789,"dataGaLocation":679},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[791,795,799],{"text":792,"config":793},"Visibility & Measurement",{"href":788,"dataGaLocation":679,"dataGaName":794},"Visibility and Measurement",{"text":796,"config":797},"Value Stream Management",{"href":798,"dataGaLocation":679,"dataGaName":796},"/solutions/value-stream-management/",{"text":800,"config":801},"Analytics & Insights",{"href":802,"dataGaLocation":679,"dataGaName":803},"/solutions/analytics-and-insights/","Analytics and insights",{"title":805,"type":730,"items":806},"GitLab for",[807,813,819],{"text":808,"config":809},"Enterprise",{"icon":810,"href":811,"dataGaLocation":679,"dataGaName":812},"Building","/enterprise/","enterprise",{"text":814,"config":815},"Small Business",{"icon":816,"href":817,"dataGaLocation":679,"dataGaName":818},"Work","/small-business/","small business",{"text":820,"config":821},"Public Sector",{"icon":822,"href":823,"dataGaLocation":679,"dataGaName":824},"Organization","/solutions/public-sector/","public sector",{"text":826,"config":827},"Pricing",{"href":828,"dataGaName":829,"dataGaLocation":679,"dataNavLevelOne":829},"/pricing/","pricing",{"text":831,"config":832,"menu":834},"Resources",{"dataNavLevelOne":833},"resources",{"type":730,"link":835,"columns":839,"feature":932},{"text":836,"config":837},"View all resources",{"href":838,"dataGaName":833,"dataGaLocation":679},"/resources/",[840,873,900],{"title":841,"items":842},"Getting started",[843,848,853,858,863,868],{"text":844,"config":845},"Install",{"href":846,"dataGaName":847,"dataGaLocation":679},"/install/","install",{"text":849,"config":850},"Quick start guides",{"href":851,"dataGaName":852,"dataGaLocation":679},"/get-started/","quick setup checklists",{"text":854,"config":855},"Learn",{"href":856,"dataGaLocation":679,"dataGaName":857},"https://university.gitlab.com/","learn",{"text":859,"config":860},"Product documentation",{"href":861,"dataGaName":862,"dataGaLocation":679},"https://docs.gitlab.com/","product documentation",{"text":864,"config":865},"Best practice videos",{"href":866,"dataGaName":867,"dataGaLocation":679},"/getting-started-videos/","best practice videos",{"text":869,"config":870},"Integrations",{"href":871,"dataGaName":872,"dataGaLocation":679},"/integrations/","integrations",{"title":874,"items":875},"Discover",[876,881,886,891,895],{"text":877,"config":878},"Customer success stories",{"href":879,"dataGaName":880,"dataGaLocation":679},"/customers/","customer success stories",{"text":882,"config":883},"Blog",{"href":884,"dataGaName":885,"dataGaLocation":679},"/blog/","blog",{"text":887,"config":888},"Demo Hub",{"href":889,"dataGaName":890,"dataGaLocation":679},"/demo-hub/","demo hub",{"text":892,"config":893},"The Source",{"href":894,"dataGaName":885,"dataGaLocation":679},"/the-source/",{"text":896,"config":897},"Remote",{"href":898,"dataGaName":899,"dataGaLocation":679},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":901,"items":902},"Connect",[903,908,913,917,922,927],{"text":904,"config":905},"GitLab Services",{"href":906,"dataGaName":907,"dataGaLocation":679},"/services/","services",{"text":909,"config":910},"Contribute",{"href":911,"dataGaName":912,"dataGaLocation":679},"https://contributors.gitlab.com","contribute",{"text":914,"config":915},"Community",{"href":916,"dataGaName":671,"dataGaLocation":679},"/community/",{"text":918,"config":919},"Forum",{"href":920,"dataGaName":921,"dataGaLocation":679},"https://forum.gitlab.com/","forum",{"text":923,"config":924},"Events",{"href":925,"dataGaName":926,"dataGaLocation":679},"/events/","events",{"text":928,"config":929},"Partners",{"href":930,"dataGaName":931,"dataGaLocation":679},"/partners/","partners",{"config":933,"title":936,"text":937,"link":938},{"background":934,"textColor":935},"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":939,"config":940},"Read the latest",{"href":941,"dataGaName":942,"dataGaLocation":679},"/whats-new/","whats new",{"text":944,"config":945,"menu":947},"Company",{"dataNavLevelOne":946},"company",{"type":730,"columns":948},[949],{"items":950},[951,956,962,964,969,974,979,984,989,994],{"text":952,"config":953},"About",{"href":954,"dataGaName":955,"dataGaLocation":679},"/company/","about",{"text":957,"config":958,"footerGa":961},"Jobs",{"href":959,"dataGaName":960,"dataGaLocation":679},"/jobs/","jobs",{"dataGaName":960},{"text":923,"config":963},{"href":925,"dataGaName":926,"dataGaLocation":679},{"text":965,"config":966},"Leadership",{"href":967,"dataGaName":968,"dataGaLocation":679},"/company/team/e-group/","leadership",{"text":970,"config":971},"Handbook",{"href":972,"dataGaName":973,"dataGaLocation":679},"https://handbook.gitlab.com/","handbook",{"text":975,"config":976},"Investor relations",{"href":977,"dataGaName":978,"dataGaLocation":679},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":980,"config":981},"Trust Center",{"href":982,"dataGaName":983,"dataGaLocation":679},"/security/","trust center",{"text":985,"config":986},"AI Transparency Center",{"href":987,"dataGaName":988,"dataGaLocation":679},"/ai-transparency-center/","ai transparency center",{"text":990,"config":991},"Newsletter",{"href":992,"dataGaName":993,"dataGaLocation":679},"/company/contact/#contact-forms","newsletter",{"text":995,"config":996},"Press",{"href":997,"dataGaName":998,"dataGaLocation":679},"/press/","press",{"text":1000,"config":1001,"menu":1002},"Contact us",{"dataNavLevelOne":946},{"type":730,"columns":1003},[1004],{"items":1005},[1006,1011,1016],{"text":1007,"config":1008},"Talk to sales",{"href":1009,"dataGaName":1010,"dataGaLocation":679},"/sales/","talk to sales",{"text":1012,"config":1013},"Support portal",{"href":1014,"dataGaName":1015,"dataGaLocation":679},"https://support.gitlab.com/hc/en-us","support portal",{"text":1017,"config":1018},"Customer portal",{"href":1019,"dataGaName":1020,"dataGaLocation":679},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":1022,"login":1023,"suggestions":1030},"Close",{"text":1024,"link":1025},"To search repositories and projects, login to",{"text":1026,"config":1027},"gitlab.com",{"href":693,"dataGaName":1028,"dataGaLocation":1029},"search login","search",{"text":1031,"default":1032},"Suggestions",[1033,1035,1039,1041,1045,1049],{"text":710,"config":1034},{"href":715,"dataGaName":710,"dataGaLocation":1029},{"text":1036,"config":1037},"Code Suggestions (AI)",{"href":1038,"dataGaName":1036,"dataGaLocation":1029},"/solutions/code-suggestions/",{"text":746,"config":1040},{"href":748,"dataGaName":746,"dataGaLocation":1029},{"text":1042,"config":1043},"GitLab on AWS",{"href":1044,"dataGaName":1042,"dataGaLocation":1029},"/partners/technology-partners/aws/",{"text":1046,"config":1047},"GitLab on Google Cloud",{"href":1048,"dataGaName":1046,"dataGaLocation":1029},"/partners/technology-partners/google-cloud-platform/",{"text":1050,"config":1051},"Why GitLab?",{"href":723,"dataGaName":1050,"dataGaLocation":1029},{"freeTrial":1053,"mobileIcon":1058,"desktopIcon":1063,"secondaryButton":1066},{"text":1054,"config":1055},"Start free trial",{"href":1056,"dataGaName":684,"dataGaLocation":1057},"https://gitlab.com/-/trials/new/","nav",{"altText":1059,"config":1060},"Gitlab Icon",{"src":1061,"dataGaName":1062,"dataGaLocation":1057},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":1059,"config":1064},{"src":1065,"dataGaName":1062,"dataGaLocation":1057},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":1067,"config":1068},"Get Started",{"href":1069,"dataGaName":1070,"dataGaLocation":1057},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":1072,"mobileIcon":1076,"desktopIcon":1078},{"text":1073,"config":1074},"Learn more about GitLab Duo",{"href":715,"dataGaName":1075,"dataGaLocation":1057},"gitlab duo",{"altText":1059,"config":1077},{"src":1061,"dataGaName":1062,"dataGaLocation":1057},{"altText":1059,"config":1079},{"src":1065,"dataGaName":1062,"dataGaLocation":1057},{"button":1081,"mobileIcon":1086,"desktopIcon":1088},{"text":1082,"config":1083},"/switch",{"href":1084,"dataGaName":1085,"dataGaLocation":1057},"#contact","switch",{"altText":1059,"config":1087},{"src":1061,"dataGaName":1062,"dataGaLocation":1057},{"altText":1059,"config":1089},{"src":1090,"dataGaName":1062,"dataGaLocation":1057},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":1092,"mobileIcon":1097,"desktopIcon":1099},{"text":1093,"config":1094},"Back to pricing",{"href":828,"dataGaName":1095,"dataGaLocation":1057,"icon":1096},"back to pricing","GoBack",{"altText":1059,"config":1098},{"src":1061,"dataGaName":1062,"dataGaLocation":1057},{"altText":1059,"config":1100},{"src":1065,"dataGaName":1062,"dataGaLocation":1057},{"title":1102,"titleMobile":1103,"button":1104,"config":1109},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":721,"config":1105},{"href":1106,"dataGaName":1107,"dataGaLocation":1108},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":1110,"disabled":665},"release",{"data":1112},{"text":1113,"source":1114,"edit":1120,"contribute":1125,"config":1130,"items":1135,"minimal":1345},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":1115,"config":1116},"View page source",{"href":1117,"dataGaName":1118,"dataGaLocation":1119},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":1121,"config":1122},"Edit this page",{"href":1123,"dataGaName":1124,"dataGaLocation":1119},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":1126,"config":1127},"Please contribute",{"href":1128,"dataGaName":1129,"dataGaLocation":1119},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":1131,"facebook":1132,"youtube":1133,"linkedin":1134},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[1136,1183,1237,1281,1313],{"title":826,"links":1137,"subMenu":1152},[1138,1142,1147],{"text":1139,"config":1140},"View plans",{"href":828,"dataGaName":1141,"dataGaLocation":1119},"view plans",{"text":1143,"config":1144},"Why Premium?",{"href":1145,"dataGaName":1146,"dataGaLocation":1119},"/pricing/premium/","why premium",{"text":1148,"config":1149},"Why Ultimate?",{"href":1150,"dataGaName":1151,"dataGaLocation":1119},"/pricing/ultimate/","why ultimate",[1153],{"title":1154,"links":1155},"Contact Us",[1156,1159,1161,1163,1168,1173,1178],{"text":1157,"config":1158},"Contact sales",{"href":1009,"dataGaName":689,"dataGaLocation":1119},{"text":1012,"config":1160},{"href":1014,"dataGaName":1015,"dataGaLocation":1119},{"text":1017,"config":1162},{"href":1019,"dataGaName":1020,"dataGaLocation":1119},{"text":1164,"config":1165},"Status",{"href":1166,"dataGaName":1167,"dataGaLocation":1119},"https://status.gitlab.com/","status",{"text":1169,"config":1170},"Terms of use",{"href":1171,"dataGaName":1172,"dataGaLocation":1119},"/terms/","terms of use",{"text":1174,"config":1175},"Privacy statement",{"href":1176,"dataGaName":1177,"dataGaLocation":1119},"/privacy/","privacy statement",{"text":1179,"config":1180},"Cookie preferences",{"dataGaName":1181,"dataGaLocation":1119,"id":1182,"isOneTrustButton":152},"cookie preferences","ot-sdk-btn",{"title":726,"links":1184,"subMenu":1193},[1185,1189],{"text":1186,"config":1187},"DevSecOps platform",{"href":708,"dataGaName":1188,"dataGaLocation":1119},"devsecops platform",{"text":1190,"config":1191},"AI-Assisted Development",{"href":715,"dataGaName":1192,"dataGaLocation":1119},"ai-assisted development",[1194],{"title":1195,"links":1196},"Topics",[1197,1202,1207,1212,1217,1222,1227,1232],{"text":1198,"config":1199},"CICD",{"href":1200,"dataGaName":1201,"dataGaLocation":1119},"/topics/ci-cd/","cicd",{"text":1203,"config":1204},"GitOps",{"href":1205,"dataGaName":1206,"dataGaLocation":1119},"/topics/gitops/","gitops",{"text":1208,"config":1209},"DevOps",{"href":1210,"dataGaName":1211,"dataGaLocation":1119},"/topics/devops/","devops",{"text":1213,"config":1214},"Version Control",{"href":1215,"dataGaName":1216,"dataGaLocation":1119},"/topics/version-control/","version control",{"text":1218,"config":1219},"DevSecOps",{"href":1220,"dataGaName":1221,"dataGaLocation":1119},"/topics/devsecops/","devsecops",{"text":1223,"config":1224},"Cloud Native",{"href":1225,"dataGaName":1226,"dataGaLocation":1119},"/topics/cloud-native/","cloud native",{"text":1228,"config":1229},"AI for Coding",{"href":1230,"dataGaName":1231,"dataGaLocation":1119},"/topics/devops/ai-for-coding/","ai for coding",{"text":1233,"config":1234},"Agentic AI",{"href":1235,"dataGaName":1236,"dataGaLocation":1119},"/topics/agentic-ai/","agentic ai",{"title":1238,"links":1239},"Solutions",[1240,1242,1244,1249,1253,1256,1260,1263,1265,1268,1271,1276],{"text":770,"config":1241},{"href":765,"dataGaName":770,"dataGaLocation":1119},{"text":759,"config":1243},{"href":742,"dataGaName":743,"dataGaLocation":1119},{"text":1245,"config":1246},"Agile development",{"href":1247,"dataGaName":1248,"dataGaLocation":1119},"/solutions/agile-delivery/","agile delivery",{"text":1250,"config":1251},"SCM",{"href":755,"dataGaName":1252,"dataGaLocation":1119},"source code management",{"text":1198,"config":1254},{"href":748,"dataGaName":1255,"dataGaLocation":1119},"continuous integration & delivery",{"text":1257,"config":1258},"Value stream management",{"href":798,"dataGaName":1259,"dataGaLocation":1119},"value stream management",{"text":1203,"config":1261},{"href":1262,"dataGaName":1206,"dataGaLocation":1119},"/solutions/gitops/",{"text":808,"config":1264},{"href":811,"dataGaName":812,"dataGaLocation":1119},{"text":1266,"config":1267},"Small business",{"href":817,"dataGaName":818,"dataGaLocation":1119},{"text":1269,"config":1270},"Public sector",{"href":823,"dataGaName":824,"dataGaLocation":1119},{"text":1272,"config":1273},"Education",{"href":1274,"dataGaName":1275,"dataGaLocation":1119},"/solutions/education/","education",{"text":1277,"config":1278},"Financial services",{"href":1279,"dataGaName":1280,"dataGaLocation":1119},"/solutions/finance/","financial services",{"title":831,"links":1282},[1283,1285,1287,1289,1292,1294,1297,1299,1301,1303,1305,1307,1309,1311],{"text":844,"config":1284},{"href":846,"dataGaName":847,"dataGaLocation":1119},{"text":849,"config":1286},{"href":851,"dataGaName":852,"dataGaLocation":1119},{"text":854,"config":1288},{"href":856,"dataGaName":857,"dataGaLocation":1119},{"text":859,"config":1290},{"href":861,"dataGaName":1291,"dataGaLocation":1119},"docs",{"text":882,"config":1293},{"href":884,"dataGaName":885,"dataGaLocation":1119},{"text":1295,"config":1296},"What's new",{"href":941,"dataGaName":942,"dataGaLocation":1119},{"text":877,"config":1298},{"href":879,"dataGaName":880,"dataGaLocation":1119},{"text":896,"config":1300},{"href":898,"dataGaName":899,"dataGaLocation":1119},{"text":904,"config":1302},{"href":906,"dataGaName":907,"dataGaLocation":1119},{"text":909,"config":1304},{"href":911,"dataGaName":912,"dataGaLocation":1119},{"text":914,"config":1306},{"href":916,"dataGaName":671,"dataGaLocation":1119},{"text":918,"config":1308},{"href":920,"dataGaName":921,"dataGaLocation":1119},{"text":923,"config":1310},{"href":925,"dataGaName":926,"dataGaLocation":1119},{"text":928,"config":1312},{"href":930,"dataGaName":931,"dataGaLocation":1119},{"title":944,"links":1314},[1315,1317,1319,1321,1323,1325,1329,1334,1336,1338,1340],{"text":952,"config":1316},{"href":954,"dataGaName":946,"dataGaLocation":1119},{"text":957,"config":1318},{"href":959,"dataGaName":960,"dataGaLocation":1119},{"text":965,"config":1320},{"href":967,"dataGaName":968,"dataGaLocation":1119},{"text":970,"config":1322},{"href":972,"dataGaName":973,"dataGaLocation":1119},{"text":975,"config":1324},{"href":977,"dataGaName":978,"dataGaLocation":1119},{"text":1326,"config":1327},"Sustainability",{"href":1328,"dataGaName":1326,"dataGaLocation":1119},"/sustainability/",{"text":1330,"config":1331},"Diversity, inclusion and belonging (DIB)",{"href":1332,"dataGaName":1333,"dataGaLocation":1119},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":980,"config":1335},{"href":982,"dataGaName":983,"dataGaLocation":1119},{"text":990,"config":1337},{"href":992,"dataGaName":993,"dataGaLocation":1119},{"text":995,"config":1339},{"href":997,"dataGaName":998,"dataGaLocation":1119},{"text":1341,"config":1342},"Modern Slavery Transparency Statement",{"href":1343,"dataGaName":1344,"dataGaLocation":1119},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1346},[1347,1350,1353],{"text":1348,"config":1349},"Terms",{"href":1171,"dataGaName":1172,"dataGaLocation":1119},{"text":1351,"config":1352},"Cookies",{"dataGaName":1181,"dataGaLocation":1119,"id":1182,"isOneTrustButton":152},{"text":1354,"config":1355},"Privacy",{"href":1176,"dataGaName":1177,"dataGaLocation":1119},[1357],{"id":1358,"title":7,"body":659,"config":1359,"content":1361,"description":659,"extension":1365,"meta":1366,"navigation":152,"path":1367,"seo":1368,"stem":1369,"__hash__":1370},"blogAuthors/en-us/blog/authors/justin-tobler.yml",{"template":1360},"BlogAuthor",{"name":7,"config":1362},{"headshot":1363,"ctfId":1364},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664737/Blog/Author%20Headshots/james_tobler_headshot.png","5pnOIbNI1Sc5IFnReNHNtv","yml",{},"/en-us/blog/authors/justin-tobler",{},"en-us/blog/authors/justin-tobler","fZs0fJVrV3MQT0RHzrMvziLDriL7K4hf9Db4QlPsRvA",[1372,1380,1388],{"title":1373,"description":1374,"heroImage":1375,"category":655,"date":1376,"authors":1377,"slug":1379,"externalUrl":659},"What's new in Git 2.55.0?","Learn about the new features and changes in Git 2.55, including a new git-history(1) fixup command, an fsmonitor daemon for Linux, pushing to remote groups, and more.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782732487/ztwgrvlolpifo01vj8qc.png","2026-06-29",[1378],"Toon Claes","whats-new-in-git-2-55-0",{"title":1381,"description":1382,"heroImage":1383,"category":655,"date":1384,"authors":1385,"slug":1387,"externalUrl":659},"GitLab AI Hackathon 2026: Meet the winners","Nearly 7,000 developers built 600+ AI agents and flows on GitLab Duo Agent Platform. Find out who won and what they created.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1776457632/llddiylsgwuze0u1rjks.png","2026-04-22",[1386],"Nick Veenhof","gitlab-ai-hackathon-2026-meet-the-winners",{"title":1389,"description":1390,"heroImage":1391,"category":655,"date":1392,"authors":1393,"slug":1394,"externalUrl":659},"What’s new in Git 2.54.0?","Learn about release contributions, including new repository maintenance, a new command to edit commit history, a replacement for git-sizer(1), and more.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782734716/ztwgrvlolpifo01vj8qc.png","2026-04-20",[58],"whats-new-in-git-2-54-0",{"promotions":1396},[1397,1411,1423,1435],{"id":1398,"categories":1399,"header":1401,"text":1402,"button":1403,"image":1408},"ai-modernization",[1400],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":1404,"config":1405},"Get your AI maturity score",{"href":1406,"dataGaName":1407,"dataGaLocation":885},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":1409},{"src":1410},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1412,"categories":1413,"header":1415,"text":1402,"button":1416,"image":1420},"devops-modernization",[1414,1221],"product","Are you just managing tools or shipping innovation?",{"text":1417,"config":1418},"Get your DevOps maturity score",{"href":1419,"dataGaName":1407,"dataGaLocation":885},"/assessments/devops-modernization-assessment/",{"config":1421},{"src":1422},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1424,"categories":1425,"header":1427,"text":1402,"button":1428,"image":1432},"security-modernization",[1426],"security","Are you trading speed for security?",{"text":1429,"config":1430},"Get your security maturity score",{"href":1431,"dataGaName":1407,"dataGaLocation":885},"/assessments/security-modernization-assessment/",{"config":1433},{"src":1434},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1436,"paths":1437,"header":1440,"text":1441,"button":1442,"image":1447},"github-azure-migration",[1438,1439],"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":1443,"config":1444},"See how GitLab compares to GitHub",{"href":1445,"dataGaName":1446,"dataGaLocation":885},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1448},{"src":1422},{"header":1450,"blurb":1451,"button":1452,"secondaryButton":1457},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1453,"config":1454},"Get your free trial",{"href":1455,"dataGaName":684,"dataGaLocation":1456},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":1157,"config":1458},{"href":1009,"dataGaName":689,"dataGaLocation":1456},1786803767283]