[{"data":1,"prerenderedAt":3351},["ShallowReactive",2],{"/de-de/blog/whats-new-in-git-2-49-0":3,"navigation-de-de":2570,"banner-de-de":3000,"footer-de-de":3008,"blog-post-authors-de-de-Toon Claes":3249,"blog-related-posts-de-de-whats-new-in-git-2-49-0":3264,"blog-promotions-de-de":3287,"next-steps-de-de":3341},{"id":4,"title":5,"authors":6,"body":8,"category":2548,"date":2549,"description":2550,"extension":2551,"externalUrl":2552,"faq":2552,"featured":513,"heroImage":2553,"meta":2554,"navigation":513,"path":2555,"seo":2556,"slug":2562,"stem":2563,"tags":2564,"template":2567,"updatedDate":2568,"__hash__":2569},"blogPosts/de-de/blog/whats-new-in-git-2-49-0.md","Was gibt es Neues in Git 2.49.0?",[7],"Toon Claes",{"type":9,"value":10,"toc":2537},"minimark",[11,22,25,81,85,119,138,144,151,173,184,362,369,424,427,696,699,705,1233,1239,1557,1560,1609,1630,1645,1648,1675,1689,1704,1726,1732,1741,1754,1866,1875,1886,1907,1910,1943,1946,2023,2030,2033,2057,2074,2096,2111,2120,2134,2146,2149,2156,2173,2188,2203,2209,2222,2225,2231,2249,2255,2276,2286,2357,2371,2374,2383,2397,2400,2410,2421,2424,2441,2446,2479,2489,2505,2510,2533],[12,13,14,15,21],"p",{},"Das Git-Projekt hat kürzlich ",[16,17,20],"a",{"href":18,"rel":19},"https://lore.kernel.org/git/xmqqfrjfilc8.fsf@gitster.g/",[],"Git 2.49.0","\nveröffentlicht. Werfen wir einen Blick auf die Highlights dieser Version, die Beiträge des Git-Teams von GitLab und der gesamten Git-Community enthält.",[12,23,24],{},"Das erwartet dich:",[26,27,28,35,41,47,53,59,65,71],"ul",{},[29,30,31],"li",{},[16,32,34],{"href":33},"#git-backfill(1)-and-the-new-path-walk-api","git-backfill(1) und die neue Pfad-API",[29,36,37],{},[16,38,40],{"href":39},"#introduction-of-zlib-ng","Einführung von zlib-ng",[29,42,43],{},[16,44,46],{"href":45},"#continued-iteration-on-meson","Weitere Iteration auf Meson",[29,48,49],{},[16,50,52],{"href":51},"#deprecation-of-.gitbranches%2F-and-.git%2Fremotes%2F","Einstellung von .git/branches/ und .git/remotes/",[29,54,55],{},[16,56,58],{"href":57},"#rust-bindings-for-libgit","Rust-Datenbindungen für libgit",[29,60,61],{},[16,62,64],{"href":63},"#new-name-hashing-algorithm","Neuer Namenshashing-Algorithmus",[29,66,67],{},[16,68,70],{"href":69},"#promisor-remote-capability","Promisor-Remote-Fähigkeit",[29,72,73],{},[16,74,76,77],{"href":75},"#thin-clone-using---revision","Flacher Klon mit ",[78,79,80],"code",{},"--revision",[82,83,34],"h2",{"id":84},"git-backfill1-und-die-neue-pfad-api",[12,86,87,88,97,98,105,106,110,111,114,115,118],{},"Wenn du ein Git-Repository ",[16,89,92,93,96],{"href":90,"rel":91},"https://git-scm.com/docs/git-clone/de",[],"mit ",[78,94,95],{},"git-clone(1)"," klonst",", kannst du die Option ",[16,99,102],{"href":100,"rel":101},"https://git-scm.com/docs/git-clone/de#git-clone---filterltFilter-Spezifikationgt",[],[78,103,104],{},"--filter"," übergeben. Mit dieser Option kannst du einen ",[107,108,109],"em",{},"partiellen Klon"," erstellen. In einem partiellen Klon sendet der Server nur eine Teilmenge der erreichbaren Objekte gemäß dem angegebenen Objektfilter. Wenn du beispielsweise einen Klon mit ",[78,112,113],{},"--filter=blob:none"," erstellst, werden keine Blobs (Dateiinhalte) vom Server abgerufen und es wird ein ",[107,116,117],{},"blobless Klon"," erstellt.",[12,120,121,122,129,130,137],{},"Blobless-Klone haben alle erreichbaren Commits und Verzeichnisse, aber keine Blobs. Wenn du einen Vorgang wie ",[16,123,126],{"href":124,"rel":125},"https://git-scm.com/docs/git-checkout",[],[78,127,128],{},"git-checkout(1)"," durchführst, lädt Git die fehlenden Blobs herunter, um den Vorgang abzuschließen. Bei einigen Operationen wie ",[16,131,134],{"href":132,"rel":133},"https://git-scm.com/docs/git-blame",[],[78,135,136],{},"git-blame(1)"," kann dies dazu führen, dass Objekte einzeln heruntergeladen werden, wodurch der Befehl deutlich langsamer wird.",[12,139,140,141,143],{},"Diese Leistungseinbuße der Performance tritt auf, weil ",[78,142,136],{}," den Commit-Verlauf durchsuchen muss, um herauszufinden, welche spezifischen Blobs benötigt werden. Dann muss es jeden fehlenden Blob einzeln beim Server anfragen.",[12,145,146,147,150],{},"In Git 2.49 wird der neue Unterbefehl ",[78,148,149],{},"git-backfill(1)"," eingeführt, der verwendet werden kann, um fehlende Blobs in einem partiellen Blobless-Klon herunterzuladen.",[12,152,153,154,156,157,160,161,164,165,168,169,172],{},"Im Hintergrund nutzt der Befehl ",[78,155,149],{}," die neue Pfad-API, die sich davon unterscheidet, wie Git normalerweise über Commits iteriert. Anstatt die Commits einzeln durchzugehen und die mit jedem Commit verbundenen Strukturen und Blobs rekursiv zu besuchen, durchläuft die Path-walk API die Daten nach Pfaden. Für jeden Pfad fügt sie eine Liste der assoziierten Strukturobjekte zu einem Verarbeitungsstapel hinzu. Dieser Verarbeitungsstapel wird dann in der Reihenfolge „Depth-First“ verarbeitet. Anstatt also jedes Objekt im Commit ",[78,158,159],{},"1"," zu verarbeiten, bevor sie zu Commit ",[78,162,163],{},"2"," weitergeht, verarbeitet die API alle Versionen von Datei ",[78,166,167],{},"A"," in allen Commits, bevor sie zu Datei ",[78,170,171],{},"B"," weitergeht. Dieser Ansatz verbessert die Leistung in Szenarien, in denen die Gruppierung nach Pfad unerlässlich ist, erheblich.",[12,174,175,176,183],{},"Ich verdeutliche dies in diesem Beispiel, indem ich einen Blobless-Klon von ",[16,177,180],{"href":178,"rel":179},"https://gitlab.com/gitlab-org/git",[],[78,181,182],{},"gitlab-org/git"," erstelle:",[185,186,191],"pre",{"className":187,"code":188,"language":189,"meta":190,"style":190},"language-shell shiki shiki-themes github-light","$ git clone --filter=blob:none --bare --no-tags git@gitlab.com:gitlab-org/git.git\nCloning into bare repository 'git.git'...\nremote: Enumerating objects: 245904, done.\nremote: Counting objects: 100% (1736/1736), done.\nremote: Compressing objects: 100% (276/276), done.\nremote: Total 245904 (delta 1591), reused 1547 (delta 1459), pack-reused 244168 (from 1)\nReceiving objects: 100% (245904/245904), 59.35 MiB | 15.96 MiB/s, done.Resolving deltas: 100% (161482/161482), done.\n","shell","",[78,192,193,222,240,258,275,290,328],{"__ignoreMap":190},[194,195,198,202,206,209,213,216,219],"span",{"class":196,"line":197},"line",1,[194,199,201],{"class":200},"s7eDp","$",[194,203,205],{"class":204},"sYBdl"," git",[194,207,208],{"class":204}," clone",[194,210,212],{"class":211},"sYu0t"," --filter=blob:none",[194,214,215],{"class":211}," --bare",[194,217,218],{"class":211}," --no-tags",[194,220,221],{"class":204}," git@gitlab.com:gitlab-org/git.git\n",[194,223,225,228,231,234,237],{"class":196,"line":224},2,[194,226,227],{"class":200},"Cloning",[194,229,230],{"class":204}," into",[194,232,233],{"class":204}," bare",[194,235,236],{"class":204}," repository",[194,238,239],{"class":204}," 'git.git'...\n",[194,241,243,246,249,252,255],{"class":196,"line":242},3,[194,244,245],{"class":200},"remote:",[194,247,248],{"class":204}," Enumerating",[194,250,251],{"class":204}," objects:",[194,253,254],{"class":204}," 245904,",[194,256,257],{"class":204}," done.\n",[194,259,261,263,266,268,271],{"class":196,"line":260},4,[194,262,245],{"class":200},[194,264,265],{"class":204}," Counting",[194,267,251],{"class":204},[194,269,270],{"class":204}," 100%",[194,272,274],{"class":273},"sgsFI"," (1736/1736), done.\n",[194,276,278,280,283,285,287],{"class":196,"line":277},5,[194,279,245],{"class":200},[194,281,282],{"class":204}," Compressing",[194,284,251],{"class":204},[194,286,270],{"class":204},[194,288,289],{"class":273}," (276/276), done.\n",[194,291,293,295,298,301,304,307,310,313,316,319,322,325],{"class":196,"line":292},6,[194,294,245],{"class":200},[194,296,297],{"class":204}," Total",[194,299,300],{"class":211}," 245904",[194,302,303],{"class":273}," (delta ",[194,305,306],{"class":211},"1591",[194,308,309],{"class":273},"), reused 1547 (",[194,311,312],{"class":200},"delta",[194,314,315],{"class":211}," 1459",[194,317,318],{"class":273},"), pack-reused 244168 (",[194,320,321],{"class":200},"from",[194,323,324],{"class":211}," 1",[194,326,327],{"class":273},")\n",[194,329,331,334,336,338,341,345,348,351,354,357,359],{"class":196,"line":330},7,[194,332,333],{"class":200},"Receiving",[194,335,251],{"class":204},[194,337,270],{"class":204},[194,339,340],{"class":273}," (245904/245904), 59.35 MiB ",[194,342,344],{"class":343},"sD7c4","|",[194,346,347],{"class":200}," 15.96",[194,349,350],{"class":204}," MiB/s,",[194,352,353],{"class":204}," done.Resolving",[194,355,356],{"class":204}," deltas:",[194,358,270],{"class":204},[194,360,361],{"class":273}," (161482/161482), done.\n",[12,363,364,365,368],{},"Oben verwenden wir ",[78,366,367],{},"--bare",", um sicherzustellen, dass Git keine Blobs herunterladen muss, um den initialen Branch zu überprüfen. Wir können verifizieren, dass dieser Klon keine Blobs enthält:",[185,370,374],{"className":371,"code":372,"language":373,"meta":190,"style":190},"language-sh shiki shiki-themes github-light","$ git cat-file --batch-all-objects --batch-check='%(objecttype)' | sort | uniq -c\n  83977 commit\n  161927 tree\n","sh",[78,375,376,408,416],{"__ignoreMap":190},[194,377,378,380,382,385,388,391,394,397,400,402,405],{"class":196,"line":197},[194,379,201],{"class":200},[194,381,205],{"class":204},[194,383,384],{"class":204}," cat-file",[194,386,387],{"class":211}," --batch-all-objects",[194,389,390],{"class":211}," --batch-check=",[194,392,393],{"class":204},"'%(objecttype)'",[194,395,396],{"class":343}," |",[194,398,399],{"class":200}," sort",[194,401,396],{"class":343},[194,403,404],{"class":200}," uniq",[194,406,407],{"class":211}," -c\n",[194,409,410,413],{"class":196,"line":224},[194,411,412],{"class":200},"  83977",[194,414,415],{"class":204}," commit\n",[194,417,418,421],{"class":196,"line":242},[194,419,420],{"class":200},"  161927",[194,422,423],{"class":204}," tree\n",[12,425,426],{},"Wenn du die Inhalte einer Datei im Repository anzeigen möchtest, muss Git sie herunterladen:",[185,428,430],{"className":371,"code":429,"language":373,"meta":190,"style":190},"$ git cat-file -p HEAD:README.md\nremote: Enumerating objects: 1, done.\nremote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 1 (from 1)\nReceiving objects: 100% (1/1), 1.64 KiB | 1.64 MiB/s, done.\n\n[![Build status](https://github.com/git/git/workflows/CI/badge.svg)](https://github.com/git/git/actions?query=branch%3Amaster+event%3Apush)\n\nGit - fast, scalable, distributed revision control system\n=========================================================\n\nGit is a fast, scalable, distributed revision control system with an\nunusually rich command set that provides both high-level operations\nand full access to internals.\n\n[snip]\n",[78,431,432,446,459,489,509,515,565,569,596,602,607,637,667,685,690],{"__ignoreMap":190},[194,433,434,436,438,440,443],{"class":196,"line":197},[194,435,201],{"class":200},[194,437,205],{"class":204},[194,439,384],{"class":204},[194,441,442],{"class":211}," -p",[194,444,445],{"class":204}," HEAD:README.md\n",[194,447,448,450,452,454,457],{"class":196,"line":224},[194,449,245],{"class":200},[194,451,248],{"class":204},[194,453,251],{"class":204},[194,455,456],{"class":204}," 1,",[194,458,257],{"class":204},[194,460,461,463,465,467,469,472,475,477,480,483,485,487],{"class":196,"line":242},[194,462,245],{"class":200},[194,464,297],{"class":204},[194,466,324],{"class":211},[194,468,303],{"class":273},[194,470,471],{"class":211},"0",[194,473,474],{"class":273},"), reused 0 (",[194,476,312],{"class":200},[194,478,479],{"class":211}," 0",[194,481,482],{"class":273},"), pack-reused 1 (",[194,484,321],{"class":200},[194,486,324],{"class":211},[194,488,327],{"class":273},[194,490,491,493,495,497,500,502,505,507],{"class":196,"line":260},[194,492,333],{"class":200},[194,494,251],{"class":204},[194,496,270],{"class":204},[194,498,499],{"class":273}," (1/1), 1.64 KiB ",[194,501,344],{"class":343},[194,503,504],{"class":200}," 1.64",[194,506,350],{"class":204},[194,508,257],{"class":204},[194,510,511],{"class":196,"line":277},[194,512,514],{"emptyLinePlaceholder":513},true,"\n",[194,516,517,520,523,526,529,532,535,538,540,542,544,547,549,552,554,557,560,563],{"class":196,"line":292},[194,518,519],{"class":273},"[",[194,521,522],{"class":343},"!",[194,524,525],{"class":273},"[Build status](https",[194,527,528],{"class":343},"://",[194,530,531],{"class":273},"github.com",[194,533,534],{"class":343},"/",[194,536,537],{"class":273},"git",[194,539,534],{"class":343},[194,541,537],{"class":273},[194,543,534],{"class":343},[194,545,546],{"class":273},"workflows",[194,548,534],{"class":343},[194,550,551],{"class":273},"CI",[194,553,534],{"class":343},[194,555,556],{"class":273},"badge.svg)](",[194,558,559],{"class":200},"https://github.com/git/git/actions?query",[194,561,562],{"class":204},"=branch%3Amaster+event%3Apush",[194,564,327],{"class":273},[194,566,567],{"class":196,"line":330},[194,568,514],{"emptyLinePlaceholder":513},[194,570,572,575,578,581,584,587,590,593],{"class":196,"line":571},8,[194,573,574],{"class":200},"Git",[194,576,577],{"class":204}," -",[194,579,580],{"class":204}," fast,",[194,582,583],{"class":204}," scalable,",[194,585,586],{"class":204}," distributed",[194,588,589],{"class":204}," revision",[194,591,592],{"class":204}," control",[194,594,595],{"class":204}," system\n",[194,597,599],{"class":196,"line":598},9,[194,600,601],{"class":204},"=========================================================\n",[194,603,605],{"class":196,"line":604},10,[194,606,514],{"emptyLinePlaceholder":513},[194,608,610,612,615,618,620,622,624,626,628,631,634],{"class":196,"line":609},11,[194,611,574],{"class":200},[194,613,614],{"class":204}," is",[194,616,617],{"class":204}," a",[194,619,580],{"class":204},[194,621,583],{"class":204},[194,623,586],{"class":204},[194,625,589],{"class":204},[194,627,592],{"class":204},[194,629,630],{"class":204}," system",[194,632,633],{"class":204}," with",[194,635,636],{"class":204}," an\n",[194,638,640,643,646,649,652,655,658,661,664],{"class":196,"line":639},12,[194,641,642],{"class":200},"unusually",[194,644,645],{"class":204}," rich",[194,647,648],{"class":204}," command",[194,650,651],{"class":204}," set",[194,653,654],{"class":204}," that",[194,656,657],{"class":204}," provides",[194,659,660],{"class":204}," both",[194,662,663],{"class":204}," high-level",[194,665,666],{"class":204}," operations\n",[194,668,670,673,676,679,682],{"class":196,"line":669},13,[194,671,672],{"class":200},"and",[194,674,675],{"class":204}," full",[194,677,678],{"class":204}," access",[194,680,681],{"class":204}," to",[194,683,684],{"class":204}," internals.\n",[194,686,688],{"class":196,"line":687},14,[194,689,514],{"emptyLinePlaceholder":513},[194,691,693],{"class":196,"line":692},15,[194,694,695],{"class":273},"[snip]\n",[12,697,698],{},"Wie du oben sehen kannst, kommuniziert Git zuerst mit dem Remote-Repository, um den Blob herunterzuladen, bevor er angezeigt werden kann.",[12,700,701,702,704],{},"Wenn du ",[78,703,136],{}," für die Datei ausführen möchtest, muss es viel mehr herunterladen:",[185,706,708],{"className":371,"code":707,"language":373,"meta":190,"style":190},"$ git blame HEAD README.md\nremote: Enumerating objects: 1, done.\nremote: Counting objects: 100% (1/1), done.\nremote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)\nReceiving objects: 100% (1/1), 1.64 KiB | 1.64 MiB/s, done.\nremote: Enumerating objects: 1, done.\nremote: Counting objects: 100% (1/1), done.\nremote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)\nReceiving objects: 100% (1/1), 1.64 KiB | 1.64 MiB/s, done.\nremote: Enumerating objects: 1, done.\nremote: Counting objects: 100% (1/1), done.\nremote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)\nReceiving objects: 100% (1/1), 1.64 KiB | 1.64 MiB/s, done.\nremote: Enumerating objects: 1, done.\n\n[snip]\n\ndf7375d772 README.md (Ævar Arnfjörð Bjarmason 2021-11-23 17:29:09 +0100  1) [![Build status](https://github.com/git/git/workflows/CI/badge.svg)](https://github.com/git/git/actions?query=branch%3Amaster+event%3Apush)\n5f7864663b README.md (Johannes Schindelin   2019-01-29 06:19:32 -0800  2)\n28513c4f56 README.md (Matthieu Moy          2016-02-25 09:37:29 +0100  3) Git - fast, scalable, distributed revision control system\n28513c4f56 README.md (Matthieu Moy          2016-02-25 09:37:29 +0100  4) =========================================================\n556b6600b2 README   (Nicolas Pitre          2007-01-17 13:04:39 -0500  5)\n556b6600b2 README   (Nicolas Pitre          2007-01-17 13:04:39 -0500  6) Git is a fast, scalable, distributed revision control system with an\n556b6600b2 README   (Nicolas Pitre          2007-01-17 13:04:39 -0500  7) unusually rich command set that provides both high-level operations\n556b6600b2 README   (Nicolas Pitre          2007-01-17 13:04:39 -0500  8) and full access to internals.\n556b6600b2 README   (Nicolas Pitre          2007-01-17 13:04:39 -0500  9)\n\n[snip]\n",[78,709,710,725,737,750,777,795,807,819,845,863,875,887,913,931,943,947,952,957,1024,1052,1080,1103,1132,1155,1178,1201,1223,1228],{"__ignoreMap":190},[194,711,712,714,716,719,722],{"class":196,"line":197},[194,713,201],{"class":200},[194,715,205],{"class":204},[194,717,718],{"class":204}," blame",[194,720,721],{"class":204}," HEAD",[194,723,724],{"class":204}," README.md\n",[194,726,727,729,731,733,735],{"class":196,"line":224},[194,728,245],{"class":200},[194,730,248],{"class":204},[194,732,251],{"class":204},[194,734,456],{"class":204},[194,736,257],{"class":204},[194,738,739,741,743,745,747],{"class":196,"line":242},[194,740,245],{"class":200},[194,742,265],{"class":204},[194,744,251],{"class":204},[194,746,270],{"class":204},[194,748,749],{"class":273}," (1/1), done.\n",[194,751,752,754,756,758,760,762,764,766,768,771,773,775],{"class":196,"line":260},[194,753,245],{"class":200},[194,755,297],{"class":204},[194,757,324],{"class":211},[194,759,303],{"class":273},[194,761,471],{"class":211},[194,763,474],{"class":273},[194,765,312],{"class":200},[194,767,479],{"class":211},[194,769,770],{"class":273},"), pack-reused 0 (",[194,772,321],{"class":200},[194,774,479],{"class":211},[194,776,327],{"class":273},[194,778,779,781,783,785,787,789,791,793],{"class":196,"line":277},[194,780,333],{"class":200},[194,782,251],{"class":204},[194,784,270],{"class":204},[194,786,499],{"class":273},[194,788,344],{"class":343},[194,790,504],{"class":200},[194,792,350],{"class":204},[194,794,257],{"class":204},[194,796,797,799,801,803,805],{"class":196,"line":292},[194,798,245],{"class":200},[194,800,248],{"class":204},[194,802,251],{"class":204},[194,804,456],{"class":204},[194,806,257],{"class":204},[194,808,809,811,813,815,817],{"class":196,"line":330},[194,810,245],{"class":200},[194,812,265],{"class":204},[194,814,251],{"class":204},[194,816,270],{"class":204},[194,818,749],{"class":273},[194,820,821,823,825,827,829,831,833,835,837,839,841,843],{"class":196,"line":571},[194,822,245],{"class":200},[194,824,297],{"class":204},[194,826,324],{"class":211},[194,828,303],{"class":273},[194,830,471],{"class":211},[194,832,474],{"class":273},[194,834,312],{"class":200},[194,836,479],{"class":211},[194,838,770],{"class":273},[194,840,321],{"class":200},[194,842,479],{"class":211},[194,844,327],{"class":273},[194,846,847,849,851,853,855,857,859,861],{"class":196,"line":598},[194,848,333],{"class":200},[194,850,251],{"class":204},[194,852,270],{"class":204},[194,854,499],{"class":273},[194,856,344],{"class":343},[194,858,504],{"class":200},[194,860,350],{"class":204},[194,862,257],{"class":204},[194,864,865,867,869,871,873],{"class":196,"line":604},[194,866,245],{"class":200},[194,868,248],{"class":204},[194,870,251],{"class":204},[194,872,456],{"class":204},[194,874,257],{"class":204},[194,876,877,879,881,883,885],{"class":196,"line":609},[194,878,245],{"class":200},[194,880,265],{"class":204},[194,882,251],{"class":204},[194,884,270],{"class":204},[194,886,749],{"class":273},[194,888,889,891,893,895,897,899,901,903,905,907,909,911],{"class":196,"line":639},[194,890,245],{"class":200},[194,892,297],{"class":204},[194,894,324],{"class":211},[194,896,303],{"class":273},[194,898,471],{"class":211},[194,900,474],{"class":273},[194,902,312],{"class":200},[194,904,479],{"class":211},[194,906,770],{"class":273},[194,908,321],{"class":200},[194,910,479],{"class":211},[194,912,327],{"class":273},[194,914,915,917,919,921,923,925,927,929],{"class":196,"line":669},[194,916,333],{"class":200},[194,918,251],{"class":204},[194,920,270],{"class":204},[194,922,499],{"class":273},[194,924,344],{"class":343},[194,926,504],{"class":200},[194,928,350],{"class":204},[194,930,257],{"class":204},[194,932,933,935,937,939,941],{"class":196,"line":687},[194,934,245],{"class":200},[194,936,248],{"class":204},[194,938,251],{"class":204},[194,940,456],{"class":204},[194,942,257],{"class":204},[194,944,945],{"class":196,"line":692},[194,946,514],{"emptyLinePlaceholder":513},[194,948,950],{"class":196,"line":949},16,[194,951,695],{"class":273},[194,953,955],{"class":196,"line":954},17,[194,956,514],{"emptyLinePlaceholder":513},[194,958,960,963,966,969,972,975,978,981,984,987,990,992,994,996,998,1000,1002,1004,1006,1008,1010,1012,1014,1016,1018,1020,1022],{"class":196,"line":959},18,[194,961,962],{"class":200},"df7375d772",[194,964,965],{"class":204}," README.md",[194,967,968],{"class":273}," (Ævar ",[194,970,971],{"class":204},"Arnfjörð",[194,973,974],{"class":204}," Bjarmason",[194,976,977],{"class":204}," 2021-11-23",[194,979,980],{"class":204}," 17:29:09",[194,982,983],{"class":204}," +0100",[194,985,986],{"class":211},"  1",[194,988,989],{"class":273},") [",[194,991,522],{"class":343},[194,993,525],{"class":273},[194,995,528],{"class":343},[194,997,531],{"class":273},[194,999,534],{"class":343},[194,1001,537],{"class":273},[194,1003,534],{"class":343},[194,1005,537],{"class":273},[194,1007,534],{"class":343},[194,1009,546],{"class":273},[194,1011,534],{"class":343},[194,1013,551],{"class":273},[194,1015,534],{"class":343},[194,1017,556],{"class":273},[194,1019,559],{"class":200},[194,1021,562],{"class":204},[194,1023,327],{"class":273},[194,1025,1027,1030,1032,1035,1038,1041,1044,1047,1050],{"class":196,"line":1026},19,[194,1028,1029],{"class":200},"5f7864663b",[194,1031,965],{"class":204},[194,1033,1034],{"class":273}," (Johannes ",[194,1036,1037],{"class":204},"Schindelin",[194,1039,1040],{"class":204},"   2019-01-29",[194,1042,1043],{"class":204}," 06:19:32",[194,1045,1046],{"class":211}," -0800",[194,1048,1049],{"class":211},"  2",[194,1051,327],{"class":273},[194,1053,1055,1058,1060,1063,1066,1069,1072,1074,1077],{"class":196,"line":1054},20,[194,1056,1057],{"class":200},"28513c4f56",[194,1059,965],{"class":204},[194,1061,1062],{"class":273}," (Matthieu ",[194,1064,1065],{"class":204},"Moy",[194,1067,1068],{"class":204},"          2016-02-25",[194,1070,1071],{"class":204}," 09:37:29",[194,1073,983],{"class":204},[194,1075,1076],{"class":211},"  3",[194,1078,1079],{"class":273},") Git - fast, scalable, distributed revision control system\n",[194,1081,1083,1085,1087,1089,1091,1093,1095,1097,1100],{"class":196,"line":1082},21,[194,1084,1057],{"class":200},[194,1086,965],{"class":204},[194,1088,1062],{"class":273},[194,1090,1065],{"class":204},[194,1092,1068],{"class":204},[194,1094,1071],{"class":204},[194,1096,983],{"class":204},[194,1098,1099],{"class":211},"  4",[194,1101,1102],{"class":273},") =========================================================\n",[194,1104,1106,1109,1112,1115,1118,1121,1124,1127,1130],{"class":196,"line":1105},22,[194,1107,1108],{"class":200},"556b6600b2",[194,1110,1111],{"class":204}," README",[194,1113,1114],{"class":273},"   (Nicolas ",[194,1116,1117],{"class":204},"Pitre",[194,1119,1120],{"class":204},"          2007-01-17",[194,1122,1123],{"class":204}," 13:04:39",[194,1125,1126],{"class":211}," -0500",[194,1128,1129],{"class":211},"  5",[194,1131,327],{"class":273},[194,1133,1135,1137,1139,1141,1143,1145,1147,1149,1152],{"class":196,"line":1134},23,[194,1136,1108],{"class":200},[194,1138,1111],{"class":204},[194,1140,1114],{"class":273},[194,1142,1117],{"class":204},[194,1144,1120],{"class":204},[194,1146,1123],{"class":204},[194,1148,1126],{"class":211},[194,1150,1151],{"class":211},"  6",[194,1153,1154],{"class":273},") Git is a fast, scalable, distributed revision control system with an\n",[194,1156,1158,1160,1162,1164,1166,1168,1170,1172,1175],{"class":196,"line":1157},24,[194,1159,1108],{"class":200},[194,1161,1111],{"class":204},[194,1163,1114],{"class":273},[194,1165,1117],{"class":204},[194,1167,1120],{"class":204},[194,1169,1123],{"class":204},[194,1171,1126],{"class":211},[194,1173,1174],{"class":211},"  7",[194,1176,1177],{"class":273},") unusually rich command set that provides both high-level operations\n",[194,1179,1181,1183,1185,1187,1189,1191,1193,1195,1198],{"class":196,"line":1180},25,[194,1182,1108],{"class":200},[194,1184,1111],{"class":204},[194,1186,1114],{"class":273},[194,1188,1117],{"class":204},[194,1190,1120],{"class":204},[194,1192,1123],{"class":204},[194,1194,1126],{"class":211},[194,1196,1197],{"class":211},"  8",[194,1199,1200],{"class":273},") and full access to internals.\n",[194,1202,1204,1206,1208,1210,1212,1214,1216,1218,1221],{"class":196,"line":1203},26,[194,1205,1108],{"class":200},[194,1207,1111],{"class":204},[194,1209,1114],{"class":273},[194,1211,1117],{"class":204},[194,1213,1120],{"class":204},[194,1215,1123],{"class":204},[194,1217,1126],{"class":211},[194,1219,1220],{"class":211},"  9",[194,1222,327],{"class":273},[194,1224,1226],{"class":196,"line":1225},27,[194,1227,514],{"emptyLinePlaceholder":513},[194,1229,1231],{"class":196,"line":1230},28,[194,1232,695],{"class":273},[12,1234,1235,1236,1238],{},"Wir haben die Ausgabe abgeschnitten, aber du siehst, dass Git für jede Revision dieser Datei separat auf den Server zugreift. Das ist wirklich ineffizient. Mit ",[78,1237,149],{}," können wir Git anweisen, alle Blobs herunterzuladen:",[185,1240,1242],{"className":187,"code":1241,"language":189,"meta":190,"style":190},"$ git backfill\nremote: Enumerating objects: 50711, done.\nremote: Counting objects: 100% (15438/15438), done.\nremote: Compressing objects: 100% (708/708), done.\nremote: Total 50711 (delta 15154), reused 14730 (delta 14730), pack-reused 35273 (from 1)\nReceiving objects: 100% (50711/50711), 11.62 MiB | 12.28 MiB/s, done.\nResolving deltas: 100% (49154/49154), done.\nremote: Enumerating objects: 50017, done.\nremote: Counting objects: 100% (10826/10826), done.\nremote: Compressing objects: 100% (634/634), done.\nremote: Total 50017 (delta 10580), reused 10192 (delta 10192), pack-reused 39191 (from 1)\nReceiving objects: 100% (50017/50017), 12.17 MiB | 12.33 MiB/s, done.\nResolving deltas: 100% (48301/48301), done.\nremote: Enumerating objects: 47303, done.\nremote: Counting objects: 100% (7311/7311), done.\nremote: Compressing objects: 100% (618/618), done.\nremote: Total 47303 (delta 7021), reused 6693 (delta 6693), pack-reused 39992 (from 1)\nReceiving objects: 100% (47303/47303), 40.84 MiB | 15.26 MiB/s, done.\nResolving deltas: 100% (43788/43788), done.\n",[78,1243,1244,1253,1266,1279,1292,1323,1343,1355,1368,1381,1394,1425,1445,1456,1469,1482,1495,1526,1546],{"__ignoreMap":190},[194,1245,1246,1248,1250],{"class":196,"line":197},[194,1247,201],{"class":200},[194,1249,205],{"class":204},[194,1251,1252],{"class":204}," backfill\n",[194,1254,1255,1257,1259,1261,1264],{"class":196,"line":224},[194,1256,245],{"class":200},[194,1258,248],{"class":204},[194,1260,251],{"class":204},[194,1262,1263],{"class":204}," 50711,",[194,1265,257],{"class":204},[194,1267,1268,1270,1272,1274,1276],{"class":196,"line":242},[194,1269,245],{"class":200},[194,1271,265],{"class":204},[194,1273,251],{"class":204},[194,1275,270],{"class":204},[194,1277,1278],{"class":273}," (15438/15438), done.\n",[194,1280,1281,1283,1285,1287,1289],{"class":196,"line":260},[194,1282,245],{"class":200},[194,1284,282],{"class":204},[194,1286,251],{"class":204},[194,1288,270],{"class":204},[194,1290,1291],{"class":273}," (708/708), done.\n",[194,1293,1294,1296,1298,1301,1303,1306,1309,1311,1314,1317,1319,1321],{"class":196,"line":277},[194,1295,245],{"class":200},[194,1297,297],{"class":204},[194,1299,1300],{"class":211}," 50711",[194,1302,303],{"class":273},[194,1304,1305],{"class":211},"15154",[194,1307,1308],{"class":273},"), reused 14730 (",[194,1310,312],{"class":200},[194,1312,1313],{"class":211}," 14730",[194,1315,1316],{"class":273},"), pack-reused 35273 (",[194,1318,321],{"class":200},[194,1320,324],{"class":211},[194,1322,327],{"class":273},[194,1324,1325,1327,1329,1331,1334,1336,1339,1341],{"class":196,"line":292},[194,1326,333],{"class":200},[194,1328,251],{"class":204},[194,1330,270],{"class":204},[194,1332,1333],{"class":273}," (50711/50711), 11.62 MiB ",[194,1335,344],{"class":343},[194,1337,1338],{"class":200}," 12.28",[194,1340,350],{"class":204},[194,1342,257],{"class":204},[194,1344,1345,1348,1350,1352],{"class":196,"line":330},[194,1346,1347],{"class":200},"Resolving",[194,1349,356],{"class":204},[194,1351,270],{"class":204},[194,1353,1354],{"class":273}," (49154/49154), done.\n",[194,1356,1357,1359,1361,1363,1366],{"class":196,"line":571},[194,1358,245],{"class":200},[194,1360,248],{"class":204},[194,1362,251],{"class":204},[194,1364,1365],{"class":204}," 50017,",[194,1367,257],{"class":204},[194,1369,1370,1372,1374,1376,1378],{"class":196,"line":598},[194,1371,245],{"class":200},[194,1373,265],{"class":204},[194,1375,251],{"class":204},[194,1377,270],{"class":204},[194,1379,1380],{"class":273}," (10826/10826), done.\n",[194,1382,1383,1385,1387,1389,1391],{"class":196,"line":604},[194,1384,245],{"class":200},[194,1386,282],{"class":204},[194,1388,251],{"class":204},[194,1390,270],{"class":204},[194,1392,1393],{"class":273}," (634/634), done.\n",[194,1395,1396,1398,1400,1403,1405,1408,1411,1413,1416,1419,1421,1423],{"class":196,"line":609},[194,1397,245],{"class":200},[194,1399,297],{"class":204},[194,1401,1402],{"class":211}," 50017",[194,1404,303],{"class":273},[194,1406,1407],{"class":211},"10580",[194,1409,1410],{"class":273},"), reused 10192 (",[194,1412,312],{"class":200},[194,1414,1415],{"class":211}," 10192",[194,1417,1418],{"class":273},"), pack-reused 39191 (",[194,1420,321],{"class":200},[194,1422,324],{"class":211},[194,1424,327],{"class":273},[194,1426,1427,1429,1431,1433,1436,1438,1441,1443],{"class":196,"line":639},[194,1428,333],{"class":200},[194,1430,251],{"class":204},[194,1432,270],{"class":204},[194,1434,1435],{"class":273}," (50017/50017), 12.17 MiB ",[194,1437,344],{"class":343},[194,1439,1440],{"class":200}," 12.33",[194,1442,350],{"class":204},[194,1444,257],{"class":204},[194,1446,1447,1449,1451,1453],{"class":196,"line":669},[194,1448,1347],{"class":200},[194,1450,356],{"class":204},[194,1452,270],{"class":204},[194,1454,1455],{"class":273}," (48301/48301), done.\n",[194,1457,1458,1460,1462,1464,1467],{"class":196,"line":687},[194,1459,245],{"class":200},[194,1461,248],{"class":204},[194,1463,251],{"class":204},[194,1465,1466],{"class":204}," 47303,",[194,1468,257],{"class":204},[194,1470,1471,1473,1475,1477,1479],{"class":196,"line":692},[194,1472,245],{"class":200},[194,1474,265],{"class":204},[194,1476,251],{"class":204},[194,1478,270],{"class":204},[194,1480,1481],{"class":273}," (7311/7311), done.\n",[194,1483,1484,1486,1488,1490,1492],{"class":196,"line":949},[194,1485,245],{"class":200},[194,1487,282],{"class":204},[194,1489,251],{"class":204},[194,1491,270],{"class":204},[194,1493,1494],{"class":273}," (618/618), done.\n",[194,1496,1497,1499,1501,1504,1506,1509,1512,1514,1517,1520,1522,1524],{"class":196,"line":954},[194,1498,245],{"class":200},[194,1500,297],{"class":204},[194,1502,1503],{"class":211}," 47303",[194,1505,303],{"class":273},[194,1507,1508],{"class":211},"7021",[194,1510,1511],{"class":273},"), reused 6693 (",[194,1513,312],{"class":200},[194,1515,1516],{"class":211}," 6693",[194,1518,1519],{"class":273},"), pack-reused 39992 (",[194,1521,321],{"class":200},[194,1523,324],{"class":211},[194,1525,327],{"class":273},[194,1527,1528,1530,1532,1534,1537,1539,1542,1544],{"class":196,"line":959},[194,1529,333],{"class":200},[194,1531,251],{"class":204},[194,1533,270],{"class":204},[194,1535,1536],{"class":273}," (47303/47303), 40.84 MiB ",[194,1538,344],{"class":343},[194,1540,1541],{"class":200}," 15.26",[194,1543,350],{"class":204},[194,1545,257],{"class":204},[194,1547,1548,1550,1552,1554],{"class":196,"line":1026},[194,1549,1347],{"class":200},[194,1551,356],{"class":204},[194,1553,270],{"class":204},[194,1555,1556],{"class":273}," (43788/43788), done.\n",[12,1558,1559],{},"Dadurch werden alle Blobs wieder aufgefüllt und der Blobless-Klon wird zu einem vollständigen Klon:",[185,1561,1563],{"className":187,"code":1562,"language":189,"meta":190,"style":190},"$ git cat-file --batch-all-objects --batch-check='%(objecttype)' | sort | uniq -c\n  148031 blob\n  83977 commit\n  161927 tree\n",[78,1564,1565,1589,1597,1603],{"__ignoreMap":190},[194,1566,1567,1569,1571,1573,1575,1577,1579,1581,1583,1585,1587],{"class":196,"line":197},[194,1568,201],{"class":200},[194,1570,205],{"class":204},[194,1572,384],{"class":204},[194,1574,387],{"class":211},[194,1576,390],{"class":211},[194,1578,393],{"class":204},[194,1580,396],{"class":343},[194,1582,399],{"class":200},[194,1584,396],{"class":343},[194,1586,404],{"class":200},[194,1588,407],{"class":211},[194,1590,1591,1594],{"class":196,"line":224},[194,1592,1593],{"class":200},"  148031",[194,1595,1596],{"class":204}," blob\n",[194,1598,1599,1601],{"class":196,"line":242},[194,1600,412],{"class":200},[194,1602,415],{"class":204},[194,1604,1605,1607],{"class":196,"line":260},[194,1606,420],{"class":200},[194,1608,423],{"class":204},[12,1610,1611,1612,1617,1618,1623,1624,1629],{},"Dieses ",[16,1613,1616],{"href":1614,"rel":1615},"https://lore.kernel.org/git/pull.1820.v3.git.1738602667.gitgitgadget@gmail.com/",[],"Projekt"," wurde von ",[16,1619,1622],{"href":1620,"rel":1621},"https://stolee.dev/",[],"Derrick Stolee"," geleitet und mit ",[16,1625,1628],{"href":1626,"rel":1627},"https://gitlab.com/gitlab-org/git/-/commit/e565f3755342caf1d21e22359eaf09ec11d8c0ae",[],"e565f37553"," zusammengeführt.",[1631,1632,1633],"blockquote",{},[12,1634,1635,1639,1640],{},[1636,1637,1638],"strong",{},"Über 6,4 Mio. Builds pro Monat: So transformiert Siemens seine Softwareentwicklung mit GitLab"," Über 40.000 Entwickler(innen) bei Siemens nutzen GitLab, um weltweit zusammenzuarbeiten und jeden Monat mehr als 6,4 Millionen Software-Versionen automatisch bereitzustellen. Erfahre, wie eine offene DevOps-Kultur und eine zentrale Plattform die Effizienz und Sicherheit steigern. ",[16,1641,1644],{"href":1642,"rel":1643},"https://about.gitlab.com/de-de/customers/siemens/",[],"Erfolgsstory lesen",[82,1646,40],{"id":1647},"einführung-von-zlib-ng",[12,1649,1650,1651,1654,1655,1662,1663,1665,1666,1671,1672,1674],{},"Alle Objekte im Ordner ",[78,1652,1653],{},".git/"," werden von Git mit ",[16,1656,1659],{"href":1657,"rel":1658},"https://zlib.net/",[],[78,1660,1661],{},"zlib"," komprimiert. ",[78,1664,1661],{}," ist die Referenzimplementierung für das ",[16,1667,1670],{"href":1668,"rel":1669},"https://datatracker.ietf.org/doc/html/rfc1950",[],"RFC-1950-Format",": ZLIB Compressed Data Format. ",[78,1673,1661],{}," wurde 1995 entwickelt, hat eine lange Geschichte und ist unglaublich portabel, denn es unterstützt sogar viele Systeme, die älter als das Internet sind. Dank der breiten Unterstützung von Architekturen und Compilern ist es jedoch in seinen Fähigkeiten eingeschränkt.",[12,1676,1677,1678,1685,1686,1688],{},"Der Fork ",[16,1679,1682],{"href":1680,"rel":1681},"https://github.com/zlib-ng/zlib-ng",[],[78,1683,1684],{},"zlib-ng"," wurde erstellt, um auf diese Einschränkungen einzugehen, denn ",[78,1687,1684],{}," ist für moderne Systeme optimiert. Dieser Fork verzichtet auf die Unterstützung von Legacy-Systemen und bietet stattdessen Patches für Intel-Optimierungen, einige Cloudflare-Optimierungen sowie mehrere kleinere Patches.",[12,1690,1691,1692,1694,1695,1697,1698,1700,1701,1703],{},"Die Bibliothek ",[78,1693,1684],{}," selbst bietet einen Kompatibilitätslayer für ",[78,1696,1661],{},". Der Kompatibilitätslayer macht es möglich, dass ",[78,1699,1684],{}," ein Drop-in-Ersatz für ",[78,1702,1661],{}," ist, ist jedoch nicht auf allen Linux-Distributionen verfügbar. In Git 2.49 gibt es folgende Neuerungen:",[26,1705,1706,1709],{},[29,1707,1708],{},"Ein Kompatibilitätslayer wurde zum Git-Projekt hinzugefügt.",[29,1710,1711,1712,1719,1720,1725],{},"Build-Optionen wurden sowohl zur Datei ",[16,1713,1716],{"href":1714,"rel":1715},"https://gitlab.com/gitlab-org/git/-/blob/b9d6f64393275b505937a8621a6cc4875adde8e0/Makefile#L186-187",[],[78,1717,1718],{},"Makefile"," als auch zur ",[16,1721,1724],{"href":1722,"rel":1723},"https://gitlab.com/gitlab-org/git/-/blob/b9d6f64393275b505937a8621a6cc4875adde8e0/meson.build#L795-811",[],"Meson-Build-Datei"," hinzugefügt.",[12,1727,1728,1729,1731],{},"Mit diesen Ergänzungen kann man einfacher von der verbesserten Performance von ",[78,1730,1684],{}," profitieren.",[12,1733,1734,1735,1737,1738,1740],{},"In lokalen Benchmark konnte die Geschwindigkeit um rund 25 % gesteigert werden, wenn ",[78,1736,1684],{}," anstelle von ",[78,1739,1661],{}," verwendet wurde. Wir sind dabei, diese Änderungen auch für GitLab.com auszurollen.",[12,1742,1743,1744,1746,1747,1749,1750,1753],{},"Wenn du von den Vorteilen von ",[78,1745,1684],{}," profitieren möchtest, überprüfe zuerst, ob Git auf deinem Gerät bereits ",[78,1748,1684],{}," verwendet, indem du ",[78,1751,1752],{},"git version --build-options"," ausführst:",[185,1755,1757],{"className":187,"code":1756,"language":189,"meta":190,"style":190},"$ git version --build-options\ngit version 2.47.1\ncpu: x86_64\nno commit associated with this build\nsizeof-long: 8\nsizeof-size_t: 8\nshell-path: /bin/sh\nlibcurl: 8.6.0\nOpenSSL: OpenSSL 3.2.2 4 Jun 2024\nzlib: 1.3.1.zlib-ng\n",[78,1758,1759,1771,1780,1788,1807,1815,1822,1830,1838,1858],{"__ignoreMap":190},[194,1760,1761,1763,1765,1768],{"class":196,"line":197},[194,1762,201],{"class":200},[194,1764,205],{"class":204},[194,1766,1767],{"class":204}," version",[194,1769,1770],{"class":211}," --build-options\n",[194,1772,1773,1775,1777],{"class":196,"line":224},[194,1774,537],{"class":200},[194,1776,1767],{"class":204},[194,1778,1779],{"class":211}," 2.47.1\n",[194,1781,1782,1785],{"class":196,"line":242},[194,1783,1784],{"class":200},"cpu:",[194,1786,1787],{"class":204}," x86_64\n",[194,1789,1790,1793,1796,1799,1801,1804],{"class":196,"line":260},[194,1791,1792],{"class":200},"no",[194,1794,1795],{"class":204}," commit",[194,1797,1798],{"class":204}," associated",[194,1800,633],{"class":204},[194,1802,1803],{"class":204}," this",[194,1805,1806],{"class":204}," build\n",[194,1808,1809,1812],{"class":196,"line":277},[194,1810,1811],{"class":200},"sizeof-long:",[194,1813,1814],{"class":211}," 8\n",[194,1816,1817,1820],{"class":196,"line":292},[194,1818,1819],{"class":200},"sizeof-size_t:",[194,1821,1814],{"class":211},[194,1823,1824,1827],{"class":196,"line":330},[194,1825,1826],{"class":200},"shell-path:",[194,1828,1829],{"class":204}," /bin/sh\n",[194,1831,1832,1835],{"class":196,"line":571},[194,1833,1834],{"class":200},"libcurl:",[194,1836,1837],{"class":211}," 8.6.0\n",[194,1839,1840,1843,1846,1849,1852,1855],{"class":196,"line":598},[194,1841,1842],{"class":200},"OpenSSL:",[194,1844,1845],{"class":204}," OpenSSL",[194,1847,1848],{"class":211}," 3.2.2",[194,1850,1851],{"class":211}," 4",[194,1853,1854],{"class":204}," Jun",[194,1856,1857],{"class":211}," 2024\n",[194,1859,1860,1863],{"class":196,"line":604},[194,1861,1862],{"class":200},"zlib:",[194,1864,1865],{"class":204}," 1.3.1.zlib-ng\n",[12,1867,1868,1869,1871,1872,1874],{},"Wenn die letzte Zeile ",[78,1870,1684],{}," enthält, verwendet dein Git bereits die schnellere Variante von ",[78,1873,1661],{},". Wenn nicht, kannst du folgendermaßen vorgehen:",[26,1876,1877,1883],{},[29,1878,1879,1880,1882],{},"Bitte den/die Betreuer(in) des Git-Pakets, das du verwendest, die Unterstützung für ",[78,1881,1684],{}," hinzuzufügen; oder",[29,1884,1885],{},"Erstelle Git selbst aus der Quelle.",[12,1887,1888,1889,1894,1895,1900,1901,1906],{},"Diese ",[16,1890,1893],{"href":1891,"rel":1892},"https://gitlab.com/gitlab-org/git/-/commit/9d0e81e2ae3bd7f6d8a655be53c2396d7af3d2b0",[],"Änderungen"," wurden von ",[16,1896,1899],{"href":1897,"rel":1898},"https://gitlab.com/pks-gitlab",[],"Patrick Steinhardt"," ",[16,1902,1905],{"href":1903,"rel":1904},"https://lore.kernel.org/git/20250128-b4-pks-compat-drop-uncompress2-v4-0-129bc36ae8f5@pks.im/",[],"eingeführt",".",[82,1908,46],{"id":1909},"weitere-iteration-auf-meson",[12,1911,1912,1913,1918,1919,1924,1925,1930,1931,1936,1937,1942],{},"In unserem Artikel über die Git-Version 2.48 haben wir über ",[16,1914,1917],{"href":1915,"rel":1916},"https://about.gitlab.com/de-de/blog/whats-new-in-git-2-48-0/#meson-build-system",[],"die Einführung des Meson-Build-Systems"," gesprochen. ",[16,1920,1923],{"href":1921,"rel":1922},"https://de.wikipedia.org/wiki/Meson_(Build-System)",[],"Meson"," ist ein Tool für die Build-Automatisierung, das vom Git-Projekt genutzt wird und irgendwann ",[16,1926,1929],{"href":1927,"rel":1928},"https://de.wikipedia.org/wiki/GNU_Build_System#GNU_Autoconf",[],"Autoconf",", ",[16,1932,1935],{"href":1933,"rel":1934},"https://de.wikipedia.org/wiki/CMake",[],"CMake"," und sogar ",[16,1938,1941],{"href":1939,"rel":1940},"https://de.wikipedia.org/wiki/Make",[],"Make"," ersetzen könnte.",[12,1944,1945],{},"In diesem Release-Zyklus wurde weiter an der Nutzung von Meson gearbeitet und es wurden verschiedene fehlende Funktionen und Fixes zur Stabilisierung eingeführt:",[26,1947,1948],{},[29,1949,1950,1951,1956,1957,1962,1963],{},"Die ",[16,1952,1955],{"href":1953,"rel":1954},"https://lore.kernel.org/git/20250122-b4-pks-meson-additions-v3-0-5a51eb5d3dcd@pks.im/",[],"verbesserte Testabdeckung für CI"," wurde in ",[16,1958,1961],{"href":1959,"rel":1960},"https://gitlab.com/gitlab-org/git/-/commit/72f1ddfbc95b47c6011bb423e6947418d1d72709",[],"72f1ddfbc9"," zusammengeführt.\n",[26,1964,1965,1981,1993,2011],{},[29,1966,1967,1975,1976,1629],{},[16,1968,1971,1972],{"href":1969,"rel":1970},"https://lore.kernel.org/git/20250219-b4-pks-meson-contrib-v2-0-1ba5d7fde0b9@pks.im/",[],"Einzelne Elemente für die Nutzung von Meson in ",[78,1973,1974],{},"contrib/"," wurden in ",[16,1977,1980],{"href":1978,"rel":1979},"https://gitlab.com/gitlab-org/git/-/commit/2a1530a953cc4d2ae62416db86c545c7ccb73ace",[],"2a1530a953",[29,1982,1983,1975,1988,1629],{},[16,1984,1987],{"href":1985,"rel":1986},"https://lore.kernel.org/git/20250226-b4-pks-meson-improvements-v3-0-60c77cf673ae@pks.im/",[],"Verschiedene Fixes und Verbesserungen für das Build-Verfahren basierend auf Meson",[16,1989,1992],{"href":1990,"rel":1991},"https://gitlab.com/gitlab-org/git/-/commit/ab09eddf601501290b5c719574fbe6c02314631f",[],"ab09eddf60",[29,1994,1995,2004,2005,2010],{},[16,1996,1999,2000,2003],{"href":1997,"rel":1998},"https://lore.kernel.org/git/20250117-b4-pks-build-subtree-v1-0-03c2ed6cc42e@pks.im/",[],"Meson wurde auf die Erstellung von ",[78,2001,2002],{},"git-subtree(1)"," aufmerksam gemacht",", was in ",[16,2006,2009],{"href":2007,"rel":2008},"https://gitlab.com/gitlab-org/git/-/commit/3ddeb7f3373ae0e309d9df62ada24375afa456c7",[],"3ddeb7f337"," zusammengeführt wurde.",[29,2012,2013,1956,2018,1629],{},[16,2014,2017],{"href":2015,"rel":2016},"https://lore.kernel.org/git/20241227-b4-pks-meson-docs-v2-0-f61e63edbfa1@pks.im/",[],"Die Dokumentationsseite für die Einführung in Meson, um HTML zu erzeugen",[16,2019,2022],{"href":2020,"rel":2021},"https://gitlab.com/gitlab-org/git/-/commit/1b4e9a5f8b5f048972c21fe8acafe0404096f694",[],"1b4e9a5f8b",[12,2024,2025,2026,2029],{},"All diese Bemühungen wurden von ",[16,2027,1899],{"href":1897,"rel":2028},[]," durchgeführt.",[82,2031,52],{"id":2032},"einstellung-von-gitbranches-und-gitremotes",[12,2034,2035,2036,2039,2040,2043,2044,2047,2048,2051,2052,2043,2054,2056],{},"Du weißt wahrscheinlich, dass das Verzeichnis ",[78,2037,2038],{},".git"," existiert und was es enthält. Hast du aber schon einmal von den Unterverzeichnissen ",[78,2041,2042],{},".git/branches/"," und ",[78,2045,2046],{},".git/remotes/"," gehört? Wie du vielleicht weißt, werden Referenzen auf Branches in ",[78,2049,2050],{},".git/refs/heads/"," gespeichert. Wozu dienen also ",[78,2053,2042],{},[78,2055,2046],{},"?",[12,2058,2059,2060,2066,2067,2073],{},"Bereits 2005 wurde ",[16,2061,2064],{"href":2062,"rel":2063},"https://git-scm.com/docs/git-fetch#_named_file_in_git_dirbranches",[],[78,2065,2042],{}," eingeführt, um Kurznamen für ein Remote zu speichern. Wenige Monate später wurden diese zu ",[16,2068,2071],{"href":2069,"rel":2070},"https://git-scm.com/docs/git-fetch#_named_file_in_git_dirremotes",[],[78,2072,2046],{}," verschoben.",[12,2075,2076,2077,2082,2083,1930,2090,2095],{},"Im Jahr ",[16,2078,2081],{"href":2079,"rel":2080},"https://lore.kernel.org/git/Pine.LNX.4.63.0604301520460.2646@wbgn013.biozentrum.uni-wuerzburg.de/",[],"2006"," lernte ",[16,2084,2087],{"href":2085,"rel":2086},"https://git-scm.com/docs/git-config",[],[78,2088,2089],{},"git-config(1)",[16,2091,2094],{"href":2092,"rel":2093},"https://git-scm.com/docs/git-config#Documentation/git-config.txt-remoteltnamegturl",[],"Remotes"," zu speichern.",[12,2097,2098,2099,2101,2102,2104,2105,2110],{},"Dies wurde zur Standardmethode, um Remotes zu konfigurieren. 2011 wurden die Verzeichnisse ",[78,2100,2042],{}," and ",[78,2103,2046],{}," als veraltet ",[16,2106,2109],{"href":2107,"rel":2108},"https://gitlab.com/git-scm/git/-/commit/3d3d282146e13f2d7f055ad056956fd8e5d7ed29#e615263aaf131d42be8b0d0888ebd3fec954c6c9_132_124",[],"dokumentiert"," und nicht mehr in modernen Repositories verwendet.",[12,2112,2113,2114,2119],{},"Im Jahr 2024 wurde das Dokument ",[16,2115,2118],{"href":2116,"rel":2117},"https://git-scm.com/docs/BreakingChanges",[],"BreakingChanges"," angelegt, um grundlegende Änderungen für die nächste große Git-Version (v3.0) darzulegen. Diese Release ist zwar in nächster Zeit nicht geplant, doch in diesem Dokument werden Änderungen dokumentiert, die wahrscheinlich Teil dieser kommenden Release sind.",[12,2121,2122,2123,2128,2129,2043,2131,2133],{},"In ",[16,2124,2127],{"href":2125,"rel":2126},"https://gitlab.com/git-scm/git/-/commit/8ccc75c2452b5814d2445d60d54266293ca48674",[],"8ccc75c245"," wurde die Verwendung der Verzeichnisse ",[78,2130,2042],{},[78,2132,2046],{}," zu diesem Dokument hinzugefügt, wodurch sie offiziell als veraltet gelten und in Version Git 3.0 nicht mehr enthalten sein werden.",[12,2135,2136,2137,2140,2141,1906],{},"Vielen Dank an ",[16,2138,1899],{"href":1897,"rel":2139},[],", der ",[16,2142,2145],{"href":2143,"rel":2144},"https://lore.kernel.org/git/20250122-pks-remote-branches-deprecation-v4-5-5cbf5b28afd5@pks.im/",[],"diese Einstellung formalisiert hat",[82,2147,58],{"id":2148},"rust-datenbindungen-für-libgit",[12,2150,2151,2152,2155],{},"Beim Kompilieren von Git wird die interne Bibliothek ",[78,2153,2154],{},"libgit.a"," erstellt. Diese Bibliothek enthält einige Kernfunktionen von Git.",[12,2157,2158,2159,2043,2162,2165,2166,2172],{},"Diese Bibliothek ist (wie der Großteil von Git) zwar in C geschrieben, in Git 2.49 wurden jedoch Datenbindungen hinzugefügt, damit einige dieser Funktionen auch in Rust zur Verfügung stehen. Dazu wurden zwei neue Cargo-Pakete erstellt: ",[78,2160,2161],{},"libgit-sys",[78,2163,2164],{},"libgit-rs",". Diese Pakete befinden sich im Unterverzeichnis ",[16,2167,2170],{"href":2168,"rel":2169},"https://gitlab.com/gitlab-org/git/-/tree/master/contrib",[],[78,2171,1974],{}," im Git-Quellbaum.",[12,2174,2175,2176,2181,2182,2187],{},"Es ist ",[16,2177,2180],{"href":2178,"rel":2179},"https://doc.rust-lang.org/cargo/reference/build-scripts.html#-sys-packages",[],"üblich",", eine Bibliothek in zwei Pakete zu unterteilen, wenn ein ",[16,2183,2186],{"href":2184,"rel":2185},"https://en.wikipedia.org/wiki/Foreign_function_interface",[],"Foreign Function Interface"," verwendet wird.",[12,2189,2190,2191,2193,2194,2196,2197,2199,2200,2202],{},"Das Paket ",[78,2192,2161],{}," bietet die reine Schnittstelle zu C-Funktionen und verknüpft zur nativen Bibliothek ",[78,2195,2154],{},". Das Paket ",[78,2198,2164],{}," bietet eine Schnittstelle zu den Funktionen in ",[78,2201,2161],{}," mit einem für Rust typischen Gefühl.",[12,2204,2205,2206,2208],{},"Bisher ist die Funktionalität in diesen Rust-Paketen sehr begrenzt. Es wird nur eine Schnittstelle zur Interaktion mit ",[78,2207,2089],{}," geboten.",[12,2210,2211,2212,1623,2217,1629],{},"Diese Initiative wurde von ",[16,2213,2216],{"href":2214,"rel":2215},"https://lore.kernel.org/git/8793ff64a7f6c4c04dd03b71162a85849feda944.1738187176.git.steadmon@google.com/",[],"Josh Steadmon",[16,2218,2221],{"href":2219,"rel":2220},"https://gitlab.com/gitlab-org/git/-/commit/a4af0b6288e25eb327ae9018cee09def9e43f1cd",[],"a4af0b6288",[82,2223,64],{"id":2224},"neuer-namenshashing-algorithmus",[12,2226,2227,2228,2230],{},"Die Git-Objektdatenbank in ",[78,2229,1653],{}," speichert die meisten ihrer Daten in Paketierungsdateien. Packfiles wurden verwendet, um Objekte über Kabel zwischen dem Git-Server und dem Client zu übertragen.",[12,2232,2233,2234,2241,2242,2244,2245,2248],{},"Alles über das Format erfährst du unter ",[16,2235,2238],{"href":2236,"rel":2237},"https://git-scm.com/docs/gitformat-pack",[],[78,2239,2240],{},"gitformat-pack(5)",". Ein wichtiger Aspekt der Paketierungsdateien ist die Delta-Komprimierung. Bei der Delta-Komprimierung wird nicht jedes Objekt so gespeichert, wie es ist, sondern manche Objekte werden als ",[107,2243,312],{}," einer anderen ",[107,2246,2247],{},"base"," gespeichert. Anstatt also den gesamten Inhalt der Objekte zu speichern, werden die Änderungen im Vergleich zu einem anderen Objekt gespeichert.",[12,2250,2251,2252,2254],{},"Ohne auf die Details einzugehen, wie diese Deltas berechnet oder gespeichert werden, kannst du dir vorstellen, dass es wichtig ist, sehr ähnliche Dateien zu gruppieren. In v2.48 und früheren Versionen verglich Git die letzten 16 Zeichen der Pfadnamen, um festzustellen, ob Blobs ähnlich sind. Dieser Algorithmus wird Version ",[78,2253,159],{}," genannt.",[12,2256,2257,2258,2260,2261,2263,2264,2267,2268,2275],{},"Ab Git 2.49 ist Version ",[78,2259,163],{}," verfügbar. Dies ist eine Iteration von Version ",[78,2262,159],{},", jedoch so verändert, dass die Auswirkungen des übergeordneten Verzeichnisses reduziert werden. Du kannst die Version des Namenshashing-Algorithmus, die du verwenden möchtest, mit der Option ",[78,2265,2266],{},"--name-hash-version"," von ",[16,2269,2272],{"href":2270,"rel":2271},"https://git-scm.com/docs/git-repack",[],[78,2273,2274],{},"git-repack(1)"," festlegen.",[12,2277,2278,2281,2282,2285],{},[16,2279,1622],{"href":1620,"rel":2280},[],", der dieses Projekt vorangetrieben hat, verglich die resultierende Größe der Paketierungsdateien, nachdem er ",[78,2283,2284],{},"git repack -adf --name-hash-version=\u003Cn>"," ausgeführt hatte:",[2287,2288,2289,2305],"table",{},[2290,2291,2292],"thead",{},[2293,2294,2295,2299,2302],"tr",{},[2296,2297,2298],"th",{},"Repository",[2296,2300,2301],{},"Größe Version 1",[2296,2303,2304],{},"Größe Version 2",[2306,2307,2308,2324,2335,2346],"tbody",{},[2293,2309,2310,2318,2321],{},[2311,2312,2313],"td",{},[16,2314,2317],{"href":2315,"rel":2316},"https://github.com/microsoft/fluentui",[],"fluentui",[2311,2319,2320],{},"440 MB",[2311,2322,2323],{},"161 MB",[2293,2325,2326,2329,2332],{},[2311,2327,2328],{},"Repository B",[2311,2330,2331],{},"6.248 MB",[2311,2333,2334],{},"856 MB",[2293,2336,2337,2340,2343],{},[2311,2338,2339],{},"Repository C",[2311,2341,2342],{},"37.278 MB",[2311,2344,2345],{},"6.921 MB",[2293,2347,2348,2351,2354],{},[2311,2349,2350],{},"Repository D",[2311,2352,2353],{},"131.204 MB",[2311,2355,2356],{},"7.463 MB",[12,2358,2359,2360,2365,2366,2010],{},"Weitere Details findest du im ",[16,2361,2364],{"href":2362,"rel":2363},"https://lore.kernel.org/git/pull.1823.v4.git.1738004554.gitgitgadget@gmail.com/",[],"Patch-Set",", das in ",[16,2367,2370],{"href":2368,"rel":2369},"https://gitlab.com/gitlab-org/git/-/commit/aae91a86fb2a71ff89a71b63ccec3a947b26ca51",[],"aae91a86fb",[82,2372,70],{"id":2373},"promisor-remote-fähigkeit",[12,2375,2376,2377,2382],{},"Es ist bekannt, dass Git nicht gut mit großen Dateien umgehen kann. Es gibt einige Lösungen für dieses Problem wie ",[16,2378,2381],{"href":2379,"rel":2380},"https://git-lfs.com/",[],"Git LFS",", die jedoch immer noch Mängel aufweisen. Einige davon sind Folgende:",[26,2384,2385,2388,2391,2394],{},[29,2386,2387],{},"Mit Git LFS muss der/die Benutzer(in) konfigurieren, welche Dateien in den LFS kommen sollen. Der Server hat keine Kontrolle darüber und muss alle Dateien bereitstellen.",[29,2389,2390],{},"Wenn eine Datei ins Repository committet wird, gibt es keine Möglichkeit, sie wieder herauszuholen, ohne den Verlauf neu zu schreiben. Das ist vor allem bei großen Dateien ärgerlich, da sie dadurch für immer dort festhängen.",[29,2392,2393],{},"Benutzer(innen) können nicht ändern, welche Dateien im Git LFS abgelegt werden sollen.",[29,2395,2396],{},"Es ist schwierig, ein Tool wie Git LFS richtig einzurichten, den Umgang damit zu erlernen und es zu nutzen.",[12,2398,2399],{},"Seit einiger Zeit verfügt Git über das Konzept der Promisor Remotes. Diese Funktion kann für große Dateien genutzt werden und wurde in Git 2.49 noch einen Schritt weiterentwickelt.",[12,2401,2402,2403,2406,2407,2409],{},"Die Idee hinter der neuen Promisor-Remote-Fähigkeit ist relativ einfach: Anstatt alle Objekte selbst zu senden, kann ein Git-Server dem Git-Client sagen: „Lade diese Objekte von ",[107,2404,2405],{},"XYZ"," herunter.“ ",[107,2408,2405],{}," ist der Promisor Remote.",[12,2411,2412,2413,2420],{},"Git 2.49 ermöglicht es dem Server, die Informationen des Promisor Remote an den Client weiterzugeben. Diese Änderung ist eine Erweiterung von ",[16,2414,2417],{"href":2415,"rel":2416},"https://git-scm.com/docs/gitprotocol-v2",[],[78,2418,2419],{},"gitprotocol-v2",". Während der Server und der Client Daten hin und her übertragen, kann der Server Namen und URLs der Promisor Remotes senden, die er kennt.",[12,2422,2423],{},"Derzeit verwendet der Client die Promisor-Remote-Infos, die er vom Server während des Klonens erhält, nicht, sodass weiterhin alle Objekte vom Remote zu dem Klon übermittelt werden, von dem aus der Vorgang initiiert wurde. Wir planen, diese Funktion weiter zu verbessern, sodass die Promisor-Remote-Info vom Server genutzt werden kann und die Funktion benutzerfreundlicher wird.",[12,2425,1611,2426,1617,2430,2435,2436,1629],{},[16,2427,2364],{"href":2428,"rel":2429},"https://lore.kernel.org/git/20250218113204.2847463-1-christian.couder@gmail.com/",[],[16,2431,2434],{"href":2432,"rel":2433},"https://gitlab.com/chriscool",[],"Christian Couder"," eingereicht und mit ",[16,2437,2440],{"href":2438,"rel":2439},"https://gitlab.com/gitlab-org/git/-/commit/2c6fd30198187c928cbf927802556908c381799c",[],"2c6fd30198",[82,2442,76,2444],{"id":2443},"flacher-klon-mit-revision",[78,2445,80],{},[12,2447,2448,2449,2451,2452,2457,2458,2461,2462,1930,2465,2043,2468,2471,2472,2474,2475,2478],{},"Die neue Option ",[78,2450,80],{}," wurde zu ",[16,2453,2455],{"href":90,"rel":2454},[],[78,2456,95],{}," hinzugefügt. Auf diese Weise kannst du einen flachen Klon eines Repository erstellen, der nur den Verlauf der jeweiligen Revision enthält. Die Option ist ähnlich wie ",[78,2459,2460],{},"--branch",", akzeptiert aber einen ref-Namen (wie ",[78,2463,2464],{},"refs/heads/main",[78,2466,2467],{},"refs/tags/v1.0",[78,2469,2470],{},"refs/merge-requests/123",") oder eine hexadezimale Commit-Objekt-ID. Der Unterschied zu ",[78,2473,2460],{}," ist, dass kein Tracking-Branch erstellt und ",[78,2476,2477],{},"HEAD"," abgetrennt wird. Diese Option ist also nicht geeignet, wenn du wieder zu diesem Branch beitragen möchtest.",[12,2480,2481,2482,2484,2485,2488],{},"Du kannst ",[78,2483,80],{}," in Kombination mit ",[78,2486,2487],{},"--depth"," verwenden, um einen minimalen Klon zu erstellen. Ein vorgeschlagener Anwendungsfall ist das automatisierte Testen. Wenn du ein CI-System hast, bei dem ein Branch (oder eine beliebige Referenz) ausgecheckt werden muss, um autonome Tests am Quellcode durchzuführen, brauchst du nur einen minimalen Klon.",[12,2490,1888,2491,1617,2496,1900,2500,1906],{},[16,2492,2495],{"href":2493,"rel":2494},"https://gitlab.com/gitlab-org/git/-/commit/5785d9143bcb3ef19452a83bc2e870ff3d5ed95a",[],"Änderung",[16,2497,7],{"href":2498,"rel":2499},"https://gitlab.com/toon",[],[16,2501,2504],{"href":2502,"rel":2503},"https://lore.kernel.org/git/20250206-toon-clone-refs-v7-0-4622b7392202@iotcl.com/",[],"vorangetrieben",[2506,2507,2509],"h1",{"id":2508},"mehr-erfahren","Mehr erfahren",[26,2511,2512,2519,2526],{},[29,2513,2514],{},[16,2515,2518],{"href":2516,"rel":2517},"https://about.gitlab.com/de-de/blog/whats-new-in-git-2-48-0/",[],"Was gibt es Neues in Git 2.48.0?",[29,2520,2521],{},[16,2522,2525],{"href":2523,"rel":2524},"https://about.gitlab.com/de-de/blog/whats-new-in-git-2-47-0/",[],"Was gibt es Neues neu in Git 2.47.0?",[29,2527,2528],{},[16,2529,2532],{"href":2530,"rel":2531},"https://about.gitlab.com/de-de/blog/whats-new-in-git-2-46-0/",[],"Was gibt es Neues in Git 2.46.0?",[2534,2535,2536],"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 .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}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":190,"searchDepth":224,"depth":224,"links":2538},[2539,2540,2541,2542,2543,2544,2545,2546],{"id":84,"depth":224,"text":34},{"id":1647,"depth":224,"text":40},{"id":1909,"depth":224,"text":46},{"id":2032,"depth":224,"text":52},{"id":2148,"depth":224,"text":58},{"id":2224,"depth":224,"text":64},{"id":2373,"depth":224,"text":70},{"id":2443,"depth":224,"text":2547},"Flacher Klon mit --revision","open-source","2025-03-14","Erfahre mehr über die neueste Version von Git, einschließlich verbesserter Leistung dank zlib-ng, einem neuen Algorithmus zum Hashing von Namen und git-backfill(1).","md",null,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663087/Blog/Hero%20Images/git3-cover.png",{},"/de-de/blog/whats-new-in-git-2-49-0",{"ogTitle":2557,"ogImage":2553,"ogDescription":2550,"ogSiteName":2558,"noIndex":2559,"ogType":2560,"ogUrl":2561,"title":2557,"canonicalUrls":2561,"description":2550},"Was gibt es Neues in Git 2.49.0?","https://about.gitlab.com",false,"article","https://about.gitlab.com/blog/whats-new-in-git-2-49-0","whats-new-in-git-2-49-0","de-de/blog/whats-new-in-git-2-49-0",[2565,2566,537],"community","open source","BlogPost","2025-04-08","OTVEMs-n4Usu59NAX48h-IJscLqsU9oCTncyjsGIhGY",{"logo":2571,"freeTrial":2576,"sales":2581,"login":2586,"items":2591,"search":2918,"minimal":2952,"duo":2970,"switchNav":2979,"pricingDeployment":2990},{"config":2572},{"href":2573,"dataGaName":2574,"dataGaLocation":2575},"/de-de/","gitlab logo","header",{"text":2577,"config":2578},"Kostenlose Testversion anfordern",{"href":2579,"dataGaName":2580,"dataGaLocation":2575},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/de-de&glm_content=default-saas-trial/","free trial",{"text":2582,"config":2583},"Demo anfordern",{"href":2584,"dataGaName":2585,"dataGaLocation":2575},"/de-de/sales/?contact-topic=request-demo","sales",{"text":2587,"config":2588},"Anmelden",{"href":2589,"dataGaName":2590,"dataGaLocation":2575},"https://gitlab.com/users/sign_in/","sign in",[2592,2620,2722,2727,2840,2896],{"text":2593,"config":2594,"menu":2596},"Plattform",{"dataNavLevelOne":2595},"platform",{"type":2597,"columns":2598},"cards",[2599,2605,2613],{"title":2593,"description":2600,"link":2601},"Die intelligente Orchestrierungsplattform für DevSecOps",{"text":2602,"config":2603},"Die Plattform erkunden",{"href":2604,"dataGaName":2595,"dataGaLocation":2575},"/de-de/platform/",{"title":2606,"description":2607,"link":2608},"GitLab Duo Agent Platform","Agentische KI für den gesamten Software-Lebenszyklus",{"text":2609,"config":2610},"Lerne GitLab Duo kennen",{"href":2611,"dataGaName":2612,"dataGaLocation":2575},"/de-de/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":2614,"description":2615,"link":2616},"Warum GitLab?","Erfahre, warum sich Unternehmen für GitLab entscheiden",{"text":2509,"config":2617},{"href":2618,"dataGaName":2619,"dataGaLocation":2575},"/de-de/why-gitlab/","why gitlab",{"text":2621,"left":513,"config":2622,"menu":2624},"Produkt",{"dataNavLevelOne":2623},"solutions",{"type":2625,"link":2626,"columns":2630,"feature":2701},"lists",{"text":2627,"config":2628},"Alle Lösungen anzeigen",{"href":2629,"dataGaName":2623,"dataGaLocation":2575},"/de-de/solutions/",[2631,2656,2679],{"title":2632,"description":2633,"link":2634,"items":2639},"Automatisierung","CI/CD und Automatisierung zur Beschleunigung der Bereitstellung",{"config":2635},{"icon":2636,"href":2637,"dataGaName":2638,"dataGaLocation":2575},"AutomatedCodeAlt","/de-de/solutions/delivery-automation/","automated software delivery",[2640,2644,2647,2652],{"text":2641,"config":2642},"CI/CD",{"href":2643,"dataGaLocation":2575,"dataGaName":2641},"/de-de/solutions/continuous-integration/",{"text":2606,"config":2645},{"href":2611,"dataGaLocation":2575,"dataGaName":2646},"gitlab duo agent platform - product menu",{"text":2648,"config":2649},"Quellcodeverwaltung",{"href":2650,"dataGaLocation":2575,"dataGaName":2651},"/de-de/solutions/source-code-management/","Source Code Management",{"text":2653,"config":2654},"Automatische Softwarebereitstellung",{"href":2637,"dataGaLocation":2575,"dataGaName":2655},"Automated software delivery",{"title":2657,"description":2658,"link":2659,"items":2664},"Sicherheit","Entwickle Code schneller ohne Abstriche bei der Sicherheit",{"config":2660},{"href":2661,"dataGaName":2662,"dataGaLocation":2575,"icon":2663},"/de-de/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[2665,2669,2674],{"text":2666,"config":2667},"Anwendungssicherheitstests",{"href":2661,"dataGaName":2668,"dataGaLocation":2575},"Application security testing",{"text":2670,"config":2671},"Schutz der Software-Lieferkette",{"href":2672,"dataGaLocation":2575,"dataGaName":2673},"/de-de/solutions/supply-chain/","Software supply chain security",{"text":2675,"config":2676},"Software-Compliance",{"href":2677,"dataGaName":2678,"dataGaLocation":2575},"/de-de/solutions/software-compliance/","software compliance",{"title":2680,"link":2681,"items":2686},"Messung",{"config":2682},{"icon":2683,"href":2684,"dataGaName":2685,"dataGaLocation":2575},"DigitalTransformation","/de-de/solutions/visibility-measurement/","visibility and measurement",[2687,2691,2696],{"text":2688,"config":2689},"Sichtbarkeit und Messung",{"href":2684,"dataGaLocation":2575,"dataGaName":2690},"Visibility and Measurement",{"text":2692,"config":2693},"Wertstrommanagement",{"href":2694,"dataGaLocation":2575,"dataGaName":2695},"/de-de/solutions/value-stream-management/","Value Stream Management",{"text":2697,"config":2698},"Analysen und Einblicke",{"href":2699,"dataGaLocation":2575,"dataGaName":2700},"/de-de/solutions/analytics-and-insights/","Analytics and insights",{"title":2702,"type":2625,"items":2703},"GitLab für",[2704,2710,2716],{"text":2705,"config":2706},"Enterprise",{"icon":2707,"href":2708,"dataGaLocation":2575,"dataGaName":2709},"Building","/de-de/enterprise/","enterprise",{"text":2711,"config":2712},"Kleinunternehmen",{"icon":2713,"href":2714,"dataGaLocation":2575,"dataGaName":2715},"Work","/de-de/small-business/","small business",{"text":2717,"config":2718},"Öffentlicher Sektor",{"icon":2719,"href":2720,"dataGaLocation":2575,"dataGaName":2721},"Organization","/de-de/solutions/public-sector/","public sector",{"text":2723,"config":2724},"Preise",{"href":2725,"dataGaName":2726,"dataGaLocation":2575,"dataNavLevelOne":2726},"/de-de/pricing/","pricing",{"text":2728,"config":2729,"menu":2731},"Ressourcen",{"dataNavLevelOne":2730},"resources",{"type":2625,"link":2732,"columns":2736,"feature":2829},{"text":2733,"config":2734},"Alle Ressourcen anzeigen",{"href":2735,"dataGaName":2730,"dataGaLocation":2575},"/de-de/resources/",[2737,2770,2797],{"title":2738,"items":2739},"Erste Schritte",[2740,2745,2750,2755,2760,2765],{"text":2741,"config":2742},"Installieren",{"href":2743,"dataGaName":2744,"dataGaLocation":2575},"/de-de/install/","install",{"text":2746,"config":2747},"Kurzanleitungen",{"href":2748,"dataGaName":2749,"dataGaLocation":2575},"/de-de/get-started/","quick setup checklists",{"text":2751,"config":2752},"Lernen",{"href":2753,"dataGaLocation":2575,"dataGaName":2754},"https://university.gitlab.com/","learn",{"text":2756,"config":2757},"Produktdokumentation",{"href":2758,"dataGaName":2759,"dataGaLocation":2575},"https://docs.gitlab.com/","product documentation",{"text":2761,"config":2762},"Best-Practice-Videos",{"href":2763,"dataGaName":2764,"dataGaLocation":2575},"/de-de/getting-started-videos/","best practice videos",{"text":2766,"config":2767},"Integrationen",{"href":2768,"dataGaName":2769,"dataGaLocation":2575},"/de-de/integrations/","integrations",{"title":2771,"items":2772},"Entdecken",[2773,2778,2783,2788,2792],{"text":2774,"config":2775},"Kundenerfolge",{"href":2776,"dataGaName":2777,"dataGaLocation":2575},"/de-de/customers/","customer success stories",{"text":2779,"config":2780},"Blog",{"href":2781,"dataGaName":2782,"dataGaLocation":2575},"/de-de/blog/","blog",{"text":2784,"config":2785},"Demo-Hub",{"href":2786,"dataGaName":2787,"dataGaLocation":2575},"/de-de/demo-hub/","demo hub",{"text":2789,"config":2790},"The Source",{"href":2791,"dataGaName":2782,"dataGaLocation":2575},"/de-de/the-source/",{"text":2793,"config":2794},"Remote",{"href":2795,"dataGaName":2796,"dataGaLocation":2575},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":2798,"items":2799},"Vernetzen",[2800,2805,2810,2814,2819,2824],{"text":2801,"config":2802},"GitLab-Services",{"href":2803,"dataGaName":2804,"dataGaLocation":2575},"/de-de/services/","services",{"text":2806,"config":2807},"Beitragen",{"href":2808,"dataGaName":2809,"dataGaLocation":2575},"https://contributors.gitlab.com","contribute",{"text":2811,"config":2812},"Community",{"href":2813,"dataGaName":2565,"dataGaLocation":2575},"/community/",{"text":2815,"config":2816},"Forum",{"href":2817,"dataGaName":2818,"dataGaLocation":2575},"https://forum.gitlab.com/","forum",{"text":2820,"config":2821},"Veranstaltungen",{"href":2822,"dataGaName":2823,"dataGaLocation":2575},"/events/","events",{"text":2825,"config":2826},"Partner",{"href":2827,"dataGaName":2828,"dataGaLocation":2575},"/de-de/partners/","partners",{"config":2830,"title":2833,"text":2834,"link":2835},{"background":2831,"textColor":2832},"url('https://res.cloudinary.com/about-gitlab-com/image/upload/v1777322348/qpq8yrgn8knii57omj0c.png')","#000","Neues bei GitLab","Über die neuesten Funktionen und Verbesserungen auf dem Laufenden bleiben.",{"text":2836,"config":2837},"Aktuelle Nachrichten",{"href":2838,"dataGaName":2839,"dataGaLocation":2575},"/de-de/whats-new/","whats new",{"text":2841,"config":2842,"menu":2844},"Unternehmen",{"dataNavLevelOne":2843},"company",{"type":2625,"columns":2845},[2846],{"items":2847},[2848,2853,2859,2861,2866,2871,2876,2881,2886,2891],{"text":2849,"config":2850},"Über",{"href":2851,"dataGaName":2852,"dataGaLocation":2575},"/de-de/company/","about",{"text":2854,"config":2855,"footerGa":2858},"Karriere",{"href":2856,"dataGaName":2857,"dataGaLocation":2575},"/jobs/","jobs",{"dataGaName":2857},{"text":2820,"config":2860},{"href":2822,"dataGaName":2823,"dataGaLocation":2575},{"text":2862,"config":2863},"Geschäftsführung",{"href":2864,"dataGaName":2865,"dataGaLocation":2575},"/company/team/e-group/","leadership",{"text":2867,"config":2868},"Handbuch",{"href":2869,"dataGaName":2870,"dataGaLocation":2575},"https://handbook.gitlab.com/","handbook",{"text":2872,"config":2873},"Investor Relations",{"href":2874,"dataGaName":2875,"dataGaLocation":2575},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":2877,"config":2878},"Trust Center",{"href":2879,"dataGaName":2880,"dataGaLocation":2575},"/de-de/security/","trust center",{"text":2882,"config":2883},"AI Transparency Center",{"href":2884,"dataGaName":2885,"dataGaLocation":2575},"/de-de/ai-transparency-center/","ai transparency center",{"text":2887,"config":2888},"Newsletter",{"href":2889,"dataGaName":2890,"dataGaLocation":2575},"/company/contact/#contact-forms","newsletter",{"text":2892,"config":2893},"Presse",{"href":2894,"dataGaName":2895,"dataGaLocation":2575},"/press/","press",{"text":2897,"config":2898,"menu":2899},"Kontakt",{"dataNavLevelOne":2843},{"type":2625,"columns":2900},[2901],{"items":2902},[2903,2908,2913],{"text":2904,"config":2905},"Vertrieb kontaktieren",{"href":2906,"dataGaName":2907,"dataGaLocation":2575},"/de-de/sales/","talk to sales",{"text":2909,"config":2910},"Support-Portal",{"href":2911,"dataGaName":2912,"dataGaLocation":2575},"https://support.gitlab.com/hc/en-us","support portal",{"text":2914,"config":2915},"Kundenportal",{"href":2916,"dataGaName":2917,"dataGaLocation":2575},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":2919,"login":2920,"suggestions":2927},"Schließen",{"text":2921,"link":2922},"Um Repositorys und Projekte zu durchsuchen, melde dich an bei",{"text":2923,"config":2924},"gitlab.com",{"href":2589,"dataGaName":2925,"dataGaLocation":2926},"search login","search",{"text":2928,"default":2929},"Vorschläge",[2930,2932,2937,2939,2944,2949],{"text":2606,"config":2931},{"href":2611,"dataGaName":2606,"dataGaLocation":2926},{"text":2933,"config":2934},"Codevorschläge (KI)",{"href":2935,"dataGaName":2936,"dataGaLocation":2926},"/de-de/solutions/code-suggestions/","Code Suggestions (AI)",{"text":2641,"config":2938},{"href":2643,"dataGaName":2641,"dataGaLocation":2926},{"text":2940,"config":2941},"GitLab auf AWS",{"href":2942,"dataGaName":2943,"dataGaLocation":2926},"/de-de/partners/technology-partners/aws/","GitLab on AWS",{"text":2945,"config":2946},"GitLab auf Google Cloud",{"href":2947,"dataGaName":2948,"dataGaLocation":2926},"/de-de/partners/technology-partners/google-cloud-platform/","GitLab on Google Cloud",{"text":2614,"config":2950},{"href":2618,"dataGaName":2951,"dataGaLocation":2926},"Why GitLab?",{"freeTrial":2953,"mobileIcon":2958,"desktopIcon":2963,"secondaryButton":2966},{"text":2954,"config":2955},"Kostenlos testen",{"href":2956,"dataGaName":2580,"dataGaLocation":2957},"https://gitlab.com/-/trials/new/","nav",{"altText":2959,"config":2960},"GitLab-Symbol",{"src":2961,"dataGaName":2962,"dataGaLocation":2957},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":2959,"config":2964},{"src":2965,"dataGaName":2962,"dataGaLocation":2957},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":2738,"config":2967},{"href":2968,"dataGaName":2969,"dataGaLocation":2957},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/de-de/get-started/","get started",{"freeTrial":2971,"mobileIcon":2975,"desktopIcon":2977},{"text":2972,"config":2973},"Mehr über GitLab Duo erfahren",{"href":2611,"dataGaName":2974,"dataGaLocation":2957},"gitlab duo",{"altText":2959,"config":2976},{"src":2961,"dataGaName":2962,"dataGaLocation":2957},{"altText":2959,"config":2978},{"src":2965,"dataGaName":2962,"dataGaLocation":2957},{"button":2980,"mobileIcon":2985,"desktopIcon":2987},{"text":2981,"config":2982},"/Option",{"href":2983,"dataGaName":2984,"dataGaLocation":2957},"#contact","switch",{"altText":2959,"config":2986},{"src":2961,"dataGaName":2962,"dataGaLocation":2957},{"altText":2959,"config":2988},{"src":2989,"dataGaName":2962,"dataGaLocation":2957},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":2991,"mobileIcon":2996,"desktopIcon":2998},{"text":2992,"config":2993},"Zurück zur Preisübersicht",{"href":2725,"dataGaName":2994,"dataGaLocation":2957,"icon":2995},"back to pricing","GoBack",{"altText":2959,"config":2997},{"src":2961,"dataGaName":2962,"dataGaLocation":2957},{"altText":2959,"config":2999},{"src":2965,"dataGaName":2962,"dataGaLocation":2957},{"title":3001,"button":3002,"config":3006},"GitLab Orbit ist da: die Kontextebene für KI-Agenten",{"text":2509,"config":3003},{"href":3004,"dataGaName":3005,"dataGaLocation":2575},"/de-de/gitlab-orbit/","orbit",{"layout":3007,"disabled":2559},"release",{"data":3009},{"text":3010,"source":3011,"edit":3017,"contribute":3022,"config":3027,"items":3032,"minimal":3238},"Git ist eine Marke von Software Freedom Conservancy und unsere Verwendung von „GitLab“ erfolgt unter Lizenz.",{"text":3012,"config":3013},"Quelltext der Seite anzeigen",{"href":3014,"dataGaName":3015,"dataGaLocation":3016},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":3018,"config":3019},"Diese Seite bearbeiten",{"href":3020,"dataGaName":3021,"dataGaLocation":3016},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":3023,"config":3024},"Beteilige dich",{"href":3025,"dataGaName":3026,"dataGaLocation":3016},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":3028,"facebook":3029,"youtube":3030,"linkedin":3031},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[3033,3078,3131,3173,3205],{"title":2723,"links":3034,"subMenu":3049},[3035,3039,3044],{"text":3036,"config":3037},"Tarife anzeigen",{"href":2725,"dataGaName":3038,"dataGaLocation":3016},"view plans",{"text":3040,"config":3041},"Vorteile von Premium",{"href":3042,"dataGaName":3043,"dataGaLocation":3016},"/de-de/pricing/premium/","why premium",{"text":3045,"config":3046},"Vorteile von Ultimate",{"href":3047,"dataGaName":3048,"dataGaLocation":3016},"/de-de/pricing/ultimate/","why ultimate",[3050],{"title":2897,"links":3051},[3052,3054,3056,3058,3063,3068,3073],{"text":2904,"config":3053},{"href":2906,"dataGaName":2585,"dataGaLocation":3016},{"text":2909,"config":3055},{"href":2911,"dataGaName":2912,"dataGaLocation":3016},{"text":2914,"config":3057},{"href":2916,"dataGaName":2917,"dataGaLocation":3016},{"text":3059,"config":3060},"Status",{"href":3061,"dataGaName":3062,"dataGaLocation":3016},"https://status.gitlab.com/","status",{"text":3064,"config":3065},"Nutzungsbedingungen",{"href":3066,"dataGaName":3067,"dataGaLocation":3016},"/terms/","terms of use",{"text":3069,"config":3070},"Datenschutzerklärung",{"href":3071,"dataGaName":3072,"dataGaLocation":3016},"/de-de/privacy/","privacy statement",{"text":3074,"config":3075},"Cookie-Einstellungen",{"dataGaName":3076,"dataGaLocation":3016,"id":3077,"isOneTrustButton":513},"cookie preferences","ot-sdk-btn",{"title":2621,"links":3079,"subMenu":3088},[3080,3084],{"text":3081,"config":3082},"DevSecOps-Plattform",{"href":2604,"dataGaName":3083,"dataGaLocation":3016},"devsecops platform",{"text":3085,"config":3086},"KI-unterstützte Entwicklung",{"href":2611,"dataGaName":3087,"dataGaLocation":3016},"ai-assisted development",[3089],{"title":3090,"links":3091},"Themen",[3092,3096,3101,3106,3111,3116,3121,3126],{"text":2641,"config":3093},{"href":3094,"dataGaName":3095,"dataGaLocation":3016},"/de-de/topics/ci-cd/","cicd",{"text":3097,"config":3098},"GitOps",{"href":3099,"dataGaName":3100,"dataGaLocation":3016},"/de-de/topics/gitops/","gitops",{"text":3102,"config":3103},"DevOps",{"href":3104,"dataGaName":3105,"dataGaLocation":3016},"/de-de/topics/devops/","devops",{"text":3107,"config":3108},"Versionskontrolle",{"href":3109,"dataGaName":3110,"dataGaLocation":3016},"/de-de/topics/version-control/","version control",{"text":3112,"config":3113},"DevSecOps",{"href":3114,"dataGaName":3115,"dataGaLocation":3016},"/de-de/topics/devsecops/","devsecops",{"text":3117,"config":3118},"Cloud-nativ",{"href":3119,"dataGaName":3120,"dataGaLocation":3016},"/de-de/topics/cloud-native/","cloud native",{"text":3122,"config":3123},"KI für das Programmieren",{"href":3124,"dataGaName":3125,"dataGaLocation":3016},"/de-de/topics/devops/ai-for-coding/","ai for coding",{"text":3127,"config":3128},"Agentische KI",{"href":3129,"dataGaName":3130,"dataGaLocation":3016},"/de-de/topics/agentic-ai/","agentic ai",{"title":3132,"links":3133},"Lösungen",[3134,3137,3139,3144,3148,3151,3154,3157,3159,3161,3163,3168],{"text":2666,"config":3135},{"href":2661,"dataGaName":3136,"dataGaLocation":3016},"Application Security Testing",{"text":2653,"config":3138},{"href":2637,"dataGaName":2638,"dataGaLocation":3016},{"text":3140,"config":3141},"Agile Entwicklung",{"href":3142,"dataGaName":3143,"dataGaLocation":3016},"/de-de/solutions/agile-delivery/","agile delivery",{"text":3145,"config":3146},"SCM",{"href":2650,"dataGaName":3147,"dataGaLocation":3016},"source code management",{"text":2641,"config":3149},{"href":2643,"dataGaName":3150,"dataGaLocation":3016},"continuous integration & delivery",{"text":2692,"config":3152},{"href":2694,"dataGaName":3153,"dataGaLocation":3016},"value stream management",{"text":3097,"config":3155},{"href":3156,"dataGaName":3100,"dataGaLocation":3016},"/de-de/solutions/gitops/",{"text":2705,"config":3158},{"href":2708,"dataGaName":2709,"dataGaLocation":3016},{"text":2711,"config":3160},{"href":2714,"dataGaName":2715,"dataGaLocation":3016},{"text":2717,"config":3162},{"href":2720,"dataGaName":2721,"dataGaLocation":3016},{"text":3164,"config":3165},"Bildungswesen",{"href":3166,"dataGaName":3167,"dataGaLocation":3016},"/de-de/solutions/education/","education",{"text":3169,"config":3170},"Finanzdienstleistungen",{"href":3171,"dataGaName":3172,"dataGaLocation":3016},"/de-de/solutions/finance/","financial services",{"title":2728,"links":3174},[3175,3177,3179,3181,3184,3186,3189,3191,3193,3195,3197,3199,3201,3203],{"text":2741,"config":3176},{"href":2743,"dataGaName":2744,"dataGaLocation":3016},{"text":2746,"config":3178},{"href":2748,"dataGaName":2749,"dataGaLocation":3016},{"text":2751,"config":3180},{"href":2753,"dataGaName":2754,"dataGaLocation":3016},{"text":2756,"config":3182},{"href":2758,"dataGaName":3183,"dataGaLocation":3016},"docs",{"text":2779,"config":3185},{"href":2781,"dataGaName":2782,"dataGaLocation":3016},{"text":3187,"config":3188},"Neuerungen",{"href":2838,"dataGaName":2839,"dataGaLocation":3016},{"text":2774,"config":3190},{"href":2776,"dataGaName":2777,"dataGaLocation":3016},{"text":2793,"config":3192},{"href":2795,"dataGaName":2796,"dataGaLocation":3016},{"text":2801,"config":3194},{"href":2803,"dataGaName":2804,"dataGaLocation":3016},{"text":2806,"config":3196},{"href":2808,"dataGaName":2809,"dataGaLocation":3016},{"text":2811,"config":3198},{"href":2813,"dataGaName":2565,"dataGaLocation":3016},{"text":2815,"config":3200},{"href":2817,"dataGaName":2818,"dataGaLocation":3016},{"text":2820,"config":3202},{"href":2822,"dataGaName":2823,"dataGaLocation":3016},{"text":2825,"config":3204},{"href":2827,"dataGaName":2828,"dataGaLocation":3016},{"title":2841,"links":3206},[3207,3209,3211,3213,3215,3217,3222,3227,3229,3231,3233],{"text":2849,"config":3208},{"href":2851,"dataGaName":2843,"dataGaLocation":3016},{"text":2854,"config":3210},{"href":2856,"dataGaName":2857,"dataGaLocation":3016},{"text":2862,"config":3212},{"href":2864,"dataGaName":2865,"dataGaLocation":3016},{"text":2867,"config":3214},{"href":2869,"dataGaName":2870,"dataGaLocation":3016},{"text":2872,"config":3216},{"href":2874,"dataGaName":2875,"dataGaLocation":3016},{"text":3218,"config":3219},"Nachhaltigkeit",{"href":3220,"dataGaName":3221,"dataGaLocation":3016},"/sustainability/","Sustainability",{"text":3223,"config":3224},"Vielfalt, Inklusion und Zugehörigkeit",{"href":3225,"dataGaName":3226,"dataGaLocation":3016},"/de-de/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":2877,"config":3228},{"href":2879,"dataGaName":2880,"dataGaLocation":3016},{"text":2887,"config":3230},{"href":2889,"dataGaName":2890,"dataGaLocation":3016},{"text":2892,"config":3232},{"href":2894,"dataGaName":2895,"dataGaLocation":3016},{"text":3234,"config":3235},"Transparenzerklärung zu moderner Sklaverei",{"href":3236,"dataGaName":3237,"dataGaLocation":3016},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":3239},[3240,3243,3246],{"text":3241,"config":3242},"Terms",{"href":3066,"dataGaName":3067,"dataGaLocation":3016},{"text":3244,"config":3245},"Cookies",{"dataGaName":3076,"dataGaLocation":3016,"id":3077,"isOneTrustButton":513},{"text":3247,"config":3248},"Datenschutz",{"href":3071,"dataGaName":3072,"dataGaLocation":3016},[3250],{"id":3251,"title":7,"body":2552,"config":3252,"content":3254,"description":2552,"extension":3258,"meta":3259,"navigation":513,"path":3260,"seo":3261,"stem":3262,"__hash__":3263},"blogAuthors/en-us/blog/authors/toon-claes.yml",{"template":3253},"BlogAuthor",{"name":7,"config":3255},{"headshot":3256,"ctfId":3257},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663082/Blog/Author%20Headshots/toon_claes_headshot.png","toon","yml",{},"/en-us/blog/authors/toon-claes",{},"en-us/blog/authors/toon-claes","guXJXoqO1anz4H932Namk7kqyZsO1xyVQr6stBL4o18",[3265,3272,3280],{"title":3266,"description":3267,"heroImage":3268,"category":2548,"date":3269,"authors":3270,"slug":3271,"externalUrl":2552},"Was ist neu in Git 2.55.0?","Neue Funktionen in Git 2.55: git-history(1) fixup, fsmonitor-Daemon für Linux, Push zu Remote-Gruppen und mehr.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782732487/ztwgrvlolpifo01vj8qc.png","2026-06-29",[7],"whats-new-in-git-2-55-0",{"title":3273,"description":3274,"heroImage":3275,"category":2548,"date":3276,"authors":3277,"slug":3279,"externalUrl":2552},"GitLab AI Hackathon 2026: Hier sind die Gewinner und ihre Projekte","Fast 7.000 Entwickler(innen) haben über 600 KI-Agenten und Flows auf GitLab Duo Agent Platform gebaut. Erfahre, wer gewonnen hat und was sie entwickelt haben.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1776457632/llddiylsgwuze0u1rjks.png","2026-04-22",[3278],"Nick Veenhof","gitlab-ai-hackathon-2026-meet-the-winners",{"title":3281,"description":3282,"heroImage":3283,"category":2548,"date":3284,"authors":3285,"slug":3286,"externalUrl":2552},"Was ist neu in Git 2.54.0?","Erfahre mehr über die Beiträge zu diesem Release, darunter neue Repository-Wartung, ein neuer Befehl zur Bearbeitung der Commit-Historie, ein Ersatz für git-sizer(1) und mehr.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1776711651/sj7xxyyuimlarswbyft5.png","2026-04-20",[1899],"whats-new-in-git-2-54-0",{"promotions":3288},[3289,3303,3315,3327],{"id":3290,"categories":3291,"header":3293,"text":3294,"button":3295,"image":3300},"ai-modernization",[3292],"ai","Hält KI, was uns versprochen wurde?","Das Quiz dauert maximal 5 Minuten.",{"text":3296,"config":3297},"Ermittle deinen KI-Reifegrad",{"href":3298,"dataGaName":3299,"dataGaLocation":2782},"/de-de/assessments/ai-modernization-assessment/","modernization assessment",{"config":3301},{"src":3302},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":3304,"categories":3305,"header":3307,"text":3294,"button":3308,"image":3312},"devops-modernization",[3306,3115],"product","Verwaltest du Tool-Chaos oder stellst du Innovationen bereit?",{"text":3309,"config":3310},"Ermittle deinen DevOps-Reifegrad",{"href":3311,"dataGaName":3299,"dataGaLocation":2782},"/de-de/assessments/devops-modernization-assessment/",{"config":3313},{"src":3314},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":3316,"categories":3317,"header":3319,"text":3294,"button":3320,"image":3324},"security-modernization",[3318],"security","Tauschst du Schnelligkeit gegen Sicherheit ein?",{"text":3321,"config":3322},"Ermittle deinen Sicherheitsreifegrad",{"href":3323,"dataGaName":3299,"dataGaLocation":2782},"/de-de/assessments/security-modernization-assessment/",{"config":3325},{"src":3326},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":3328,"paths":3329,"header":3332,"text":3333,"button":3334,"image":3339},"github-azure-migration",[3330,3331],"migration-from-azure-devops-to-gitlab","integrating-azure-devops-scm-and-gitlab","Ist dein Team bereit für den Umzug von GitHub nach Azure?","GitHub stellt bereits auf Azure um. Finde heraus, was das für dich bedeutet.",{"text":3335,"config":3336},"Erfahre, wie GitLab im Vergleich zu GitHub abschneidet",{"href":3337,"dataGaName":3338,"dataGaLocation":2782},"/de-de/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":3340},{"src":3314},{"header":3342,"blurb":3343,"button":3344,"secondaryButton":3349},"Beginne noch heute, schneller zu entwickeln","Entdecke, was dein Team mit der intelligenten Orchestrierungsplattform für DevSecOps erreichen kann.\n",{"text":3345,"config":3346},"Kostenlosen Test starten",{"href":3347,"dataGaName":2580,"dataGaLocation":3348},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/de-de/","feature",{"text":2904,"config":3350},{"href":2906,"dataGaName":2585,"dataGaLocation":3348},1786803740763]