[{"data":1,"prerenderedAt":2845},["ShallowReactive",2],{"/de-de/blog/whats-new-in-git-2-56-0":3,"navigation-de-de":2089,"banner-de-de":2524,"footer-de-de":2531,"blog-post-authors-de-de-Karthik Nayak":2788,"blog-related-posts-de-de-whats-new-in-git-2-56-0":2803,"blog-share-wrapper-de-de":2826,"next-steps-de-de":2836},{"id":4,"title":5,"authors":6,"body":8,"category":2068,"date":2069,"description":2070,"extension":2071,"externalUrl":2072,"faq":2072,"featured":2073,"heroImage":2074,"meta":2075,"navigation":430,"path":2076,"seo":2077,"slug":2081,"stem":2082,"tags":2083,"template":2087,"updatedDate":2072,"__hash__":2088},"blogPosts/de-de/blog/whats-new-in-git-2-56-0.md","Was ist neu in Git 2.56.0?",[7],"Karthik Nayak",{"type":9,"value":10,"toc":2053},"minimark",[11,28,31,77,81,90,102,105,116,119,122,125,180,183,186,189,192,215,225,267,273,291,294,297,341,352,359,468,471,548,568,604,625,635,638,662,840,848,862,865,874,879,899,1021,1024,1050,1054,1067,1074,1144,1150,1193,1217,1221,1241,1327,1335,1358,1362,1383,1410,1413,1421,1587,1604,1797,1814,1916,1930,1933,1945,1948,2016,2019,2031,2035,2049],[12,13,14,15,21,22,27],"p",{},"Das Git-Projekt hat ",[16,17,20],"a",{"href":18,"rel":19},"https://lore.kernel.org/git/xmqqpkxxmgxh.fsf@gitster.g/T/#u",[],"Git 2.56.0"," veröffentlicht. Dieser Artikel stellt die wichtigsten Neuerungen vor, darunter Beiträge des ",[16,23,26],{"href":24,"rel":25},"https://handbook.gitlab.com/handbook/engineering/infrastructure-platforms/tenant-scale/git/",[],"Git-Teams"," bei GitLab.",[12,29,30],{},"Die Themen:",[32,33,34,41,47,53,59,65,71],"ul",{},[35,36,37],"li",{},[16,38,40],{"href":39},"#git-merge-2026-und-der-zeitplan-f%C3%BCr-git-30","Git Merge 2026 und der Zeitplan für Git 3.0",[35,42,43],{},[16,44,46],{"href":45},"#git-history1-lernt-drop","git-history(1) lernt drop",[35,48,49],{},[16,50,52],{"href":51},"#git-branch1-kann-jetzt-gemergte-branches-l%C3%B6schen","git-branch(1) kann jetzt gemergte Branches löschen",[35,54,55],{},[16,56,58],{"href":57},"#git-refs1-kann-jetzt-referenzen-%C3%A4ndern","git-refs(1) kann jetzt Referenzen ändern",[35,60,61],{},[16,62,64],{"href":63},"#google-summer-of-code-2026","Google Summer of Code 2026",[35,66,67],{},[16,68,70],{"href":69},"#linearisierte-historie-mit-git-replay1","Linearisierte Historie mit git-replay(1)",[35,72,73],{},[16,74,76],{"href":75},"#weitere-schritte-zu-pluggable-object-databases","Weitere Schritte zu Pluggable Object Databases",[78,79,40],"h2",{"id":80},"git-merge-2026-und-der-zeitplan-für-git-30",[12,82,83,84,89],{},"Der Release-Zyklus fiel mit der ",[16,85,88],{"href":86,"rel":87},"https://git-merge.com/",[],"Git Merge 2026"," in Lissabon zusammen. Die Konferenz erstreckte sich über drei Tage: einen JJ-Con-Tag, einen Tag mit Git-Vorträgen sowie einen Tag mit Unconference und Git Contributor Summit. Die Aufzeichnungen der Git-Vorträge folgen in Kürze.",[12,91,92,93,101],{},"Ein zentrales Thema des Git Contributor Summit war die Planung von Git 3.0. Das Dokument ",[16,94,97],{"href":95,"rel":96},"https://git-scm.com/docs/BreakingChanges",[],[98,99,100],"code",{},"Documentation/BreakingChanges.adoc"," beschreibt die für 3.0 erwarteten Änderungen, allerdings mit dem Hinweis, dass es für diese Version noch kein geplantes Veröffentlichungsdatum gebe. Das hat sich mit den Diskussionen auf dem Summit geändert.",[12,103,104],{},"Zu den größten für Git 3.0 geplanten Änderungen gehören:",[32,106,107,110,113],{},[35,108,109],{},"SHA-256 als Standardformat für Objekt-Hashes",[35,111,112],{},"reftable als Standardformat für die Speicherung von Referenzen",[35,114,115],{},"Rust als feste statt optionale Abhängigkeit",[12,117,118],{},"Der Code für diese Änderungen ist in aktuellen Git-Versionen bereits vorhanden. Im übrigen Git-Ökosystem, also in Git-Bibliotheken, Anwendungen und Hosting-Plattformen (Forges), ist die Unterstützung jedoch unterschiedlich weit. Fehlt sie, entsteht ein Schwebezustand: Einige Werkzeuge beherrschen die neuen Funktionen, andere scheitern daran.",[12,120,121],{},"Bei SHA-256 lag eines der größten Hindernisse bei den Forges. GitLab unterstützt SHA-256 seit rund einem Jahr. GitHub hat auf der Git Merge eine Private Beta angekündigt, und die allgemeine Verfügbarkeit soll in einigen Monaten folgen.",[12,123,124],{},"Vor diesem Hintergrund einigte sich der Summit auf folgenden Zeitplan für Git 3.0:",[126,127,128,141],"table",{},[129,130,131],"thead",{},[132,133,134,138],"tr",{},[135,136,137],"th",{},"Release",[135,139,140],{},"Zeitpunkt",[142,143,144,156,166],"tbody",{},[132,145,146,153],{},[147,148,149],"td",{},[150,151,152],"strong",{},"2.56",[147,154,155],{},"September 2026 (dieses Release)",[132,157,158,163],{},[147,159,160],{},[150,161,162],{},"2.98",[147,164,165],{},"Dezember 2026",[132,167,168,177],{},[147,169,170,173,174],{},[150,171,172],{},"2.99"," und ",[150,175,176],{},"3.0",[147,178,179],{},"Frühjahr 2027",[181,182],"br",{},[12,184,185],{},"Der Plan sieht vor, direkt von 2.56 auf 2.98 zu springen. Der große Versionssprung signalisiert Downstream-Maintainer(inne)n wie Nutzer(inne)n, dass eine größere Änderung bevorsteht. Danach erscheinen 2.99 und 3.0 gemeinsam. Der einzige Unterschied: In Git 3.0 ist das Feature-Flag für die Breaking Changes aktiviert. So bleiben 2.99 und 3.0 funktional gleich, und die Änderungen in 3.0 bleiben klein und überschaubar.",[12,187,188],{},"Version 2.99 wird ein LTS-Release, damit Plattformen ohne Rust-Toolchain weiterhin Updates erhalten. Die Details werden wie üblich auf der Mailingliste weiter diskutiert.",[78,190,46],{"id":191},"git-history1-lernt-drop",[12,193,194,195,200,201,204,205,210,211,214],{},"Im ",[16,196,199],{"href":197,"rel":198},"https://about.gitlab.com/de-de/blog/whats-new-in-git-2-55-0/#git-history1-lernt-fixup",[],"Beitrag zu Git 2.55"," ging es um den Unterbefehl ",[98,202,203],{},"fixup"," von ",[16,206,209],{"href":207,"rel":208},"https://git-scm.com/docs/git-history",[],"git-history(1)",". In diesem Release kommt der Unterbefehl ",[98,212,213],{},"drop"," hinzu.",[12,216,217,218,221,222,224],{},"Um einen bestehenden Commit zu löschen, führte der Weg bisher über ",[98,219,220],{},"git rebase -i",": Im Editor wurden einzelne Commits interaktiv zum Entfernen markiert. Mit ",[98,223,213],{}," gelingt das in einer einzigen Zeile.",[226,227,232],"pre",{"className":228,"code":229,"language":230,"meta":231,"style":231},"language-shell shiki shiki-themes github-light","$ git history drop \u003Ccommit>\n","shell","",[98,233,234],{"__ignoreMap":231},[235,236,239,243,247,250,253,257,260,264],"span",{"class":237,"line":238},"line",1,[235,240,242],{"class":241},"s7eDp","$",[235,244,246],{"class":245},"sYBdl"," git",[235,248,249],{"class":245}," history",[235,251,252],{"class":245}," drop",[235,254,256],{"class":255},"sD7c4"," \u003C",[235,258,259],{"class":245},"commi",[235,261,263],{"class":262},"sgsFI","t",[235,265,266],{"class":255},">\n",[12,268,269,270,272],{},"Der angegebene Commit wird entfernt, und seine Nachfolger werden per Rebase auf seinen Parent-Commit gesetzt. Wie bei den anderen Unterbefehlen von ",[98,271,209],{}," zeigen anschließend alle Branches, die vom ursprünglichen Commit abstammen, auf den neu geschriebenen Commit.",[12,274,275],{},[276,277,278,279,284,285,290],"em",{},"Dieser ",[16,280,283],{"href":281,"rel":282},"https://gitlab.com/git-scm/git/-/commit/d11b348f7840c7ae4aba5d273ff56c813475a88e",[],"Patch"," stammt von ",[16,286,289],{"href":287,"rel":288},"https://gitlab.com/pks-gitlab",[],"Patrick Steinhardt",".",[78,292,52],{"id":293},"git-branch1-kann-jetzt-gemergte-branches-löschen",[12,295,296],{},"Um gemergte Branches aufzuräumen, habe ich bisher meist eine Variante dieses Befehls verwendet:",[226,298,300],{"className":228,"code":299,"language":230,"meta":231,"style":231},"$ git branch --merged main | grep -v main | xargs git branch --delete\n",[98,301,302],{"__ignoreMap":231},[235,303,304,306,308,311,315,318,321,324,327,329,331,334,336,338],{"class":237,"line":238},[235,305,242],{"class":241},[235,307,246],{"class":245},[235,309,310],{"class":245}," branch",[235,312,314],{"class":313},"sYu0t"," --merged",[235,316,317],{"class":245}," main",[235,319,320],{"class":255}," |",[235,322,323],{"class":241}," grep",[235,325,326],{"class":313}," -v",[235,328,317],{"class":245},[235,330,320],{"class":255},[235,332,333],{"class":241}," xargs",[235,335,246],{"class":245},[235,337,310],{"class":245},[235,339,340],{"class":313}," --delete\n",[12,342,343,344,347,348,351],{},"Er löscht allerdings nur Branches, die in den angegebenen Branch gemergt wurden. Branches, die von ",[98,345,346],{},"main"," abgezweigt und in ",[98,349,350],{},"origin/main"," gemergt wurden, erfasst er nicht. Dieses Release führt dafür zwei neue Flags ein.",[12,353,354,355,358],{},"Das erste ist ",[98,356,357],{},"--forked",", ein Filter für die Branch-Liste. Er zeigt Branches, deren konfigurierter Upstream zur angegebenen Ref, zum Remote-Namen oder zum Branch passt.",[226,360,362],{"className":228,"code":361,"language":230,"meta":231,"style":231},"$ git switch --create feature-a origin/main\nSwitched to a new branch 'feature-a'\nbranch 'feature-a' set up to track 'origin/main'.\n\n$ git branch --forked origin\n  feature-a\n  feature-b\n* main\n",[98,363,364,382,402,425,432,447,453,459],{"__ignoreMap":231},[235,365,366,368,370,373,376,379],{"class":237,"line":238},[235,367,242],{"class":241},[235,369,246],{"class":245},[235,371,372],{"class":245}," switch",[235,374,375],{"class":313}," --create",[235,377,378],{"class":245}," feature-a",[235,380,381],{"class":245}," origin/main\n",[235,383,385,388,391,394,397,399],{"class":237,"line":384},2,[235,386,387],{"class":241},"Switched",[235,389,390],{"class":245}," to",[235,392,393],{"class":245}," a",[235,395,396],{"class":245}," new",[235,398,310],{"class":245},[235,400,401],{"class":245}," 'feature-a'\n",[235,403,405,408,411,414,417,419,422],{"class":237,"line":404},3,[235,406,407],{"class":241},"branch",[235,409,410],{"class":245}," 'feature-a'",[235,412,413],{"class":245}," set",[235,415,416],{"class":245}," up",[235,418,390],{"class":245},[235,420,421],{"class":245}," track",[235,423,424],{"class":245}," 'origin/main'.\n",[235,426,428],{"class":237,"line":427},4,[235,429,431],{"emptyLinePlaceholder":430},true,"\n",[235,433,435,437,439,441,444],{"class":237,"line":434},5,[235,436,242],{"class":241},[235,438,246],{"class":245},[235,440,310],{"class":245},[235,442,443],{"class":313}," --forked",[235,445,446],{"class":245}," origin\n",[235,448,450],{"class":237,"line":449},6,[235,451,452],{"class":241},"  feature-a\n",[235,454,456],{"class":237,"line":455},7,[235,457,458],{"class":241},"  feature-b\n",[235,460,462,465],{"class":237,"line":461},8,[235,463,464],{"class":255},"*",[235,466,467],{"class":262}," main\n",[12,469,470],{},"So wird sichtbar, welche Branches von einem bestimmten Integrations-Branch ausgegangen sind. Auch der Status jedes Branches lässt sich anzeigen:",[226,472,474],{"className":228,"code":473,"language":230,"meta":231,"style":231},"$ git branch -vv\n  feature-a b3ebf58 [origin/main: behind 1] Add feature A\n  feature-b 34c0403 [origin/main: ahead 1, behind 1] Add feature B\n* main      230a3b0 [origin/main] Document the parser\n",[98,475,476,487,513,541],{"__ignoreMap":231},[235,477,478,480,482,484],{"class":237,"line":238},[235,479,242],{"class":241},[235,481,246],{"class":245},[235,483,310],{"class":245},[235,485,486],{"class":313}," -vv\n",[235,488,489,492,495,498,501,504,507,510],{"class":237,"line":384},[235,490,491],{"class":241},"  feature-a",[235,493,494],{"class":245}," b3ebf58",[235,496,497],{"class":262}," [origin/main: ",[235,499,500],{"class":245},"behind",[235,502,503],{"class":245}," 1]",[235,505,506],{"class":245}," Add",[235,508,509],{"class":245}," feature",[235,511,512],{"class":245}," A\n",[235,514,515,518,521,523,526,529,532,534,536,538],{"class":237,"line":404},[235,516,517],{"class":241},"  feature-b",[235,519,520],{"class":245}," 34c0403",[235,522,497],{"class":262},[235,524,525],{"class":245},"ahead",[235,527,528],{"class":245}," 1,",[235,530,531],{"class":245}," behind",[235,533,503],{"class":245},[235,535,506],{"class":245},[235,537,509],{"class":245},[235,539,540],{"class":245}," B\n",[235,542,543,545],{"class":237,"line":427},[235,544,464],{"class":255},[235,546,547],{"class":262}," main      230a3b0 [origin/main] Document the parser\n",[12,549,550,553,554,556,557,559,560,563,564,567],{},[98,551,552],{},"feature-a"," liegt hinter ",[98,555,350],{}," und wurde also bereits in ",[98,558,350],{}," gemergt. ",[98,561,562],{},"feature-b"," steht dagegen noch aus. Hier setzt die neue Option ",[98,565,566],{},"--delete-merged"," an. Diese löscht alle Branches, deren Spitze von ihrem konfigurierten Upstream aus erreichbar ist, und entfernt damit jeden Feature-Branch, der bereits in den Integrations-Branch gemergt wurde.",[226,569,571],{"className":228,"code":570,"language":230,"meta":231,"style":231},"$ git branch --delete-merged origin\nDeleted branch feature-a (was b3ebf58).\n",[98,572,573,586],{"__ignoreMap":231},[235,574,575,577,579,581,584],{"class":237,"line":238},[235,576,242],{"class":241},[235,578,246],{"class":245},[235,580,310],{"class":245},[235,582,583],{"class":313}," --delete-merged",[235,585,446],{"class":245},[235,587,588,591,593,595,598,601],{"class":237,"line":384},[235,589,590],{"class":241},"Deleted",[235,592,310],{"class":245},[235,594,378],{"class":245},[235,596,597],{"class":262}," (was ",[235,599,600],{"class":245},"b3ebf58",[235,602,603],{"class":262},").\n",[605,606,607],"blockquote",{},[12,608,609,612,613,204,618,621,622,290],{},[150,610,611],{},"Tipp:"," Diese Optionen setzen voraus, dass die eigenen Branches einen Integrations-Branch tracken. Wer neue Branches üblicherweise vom lokalen Integrations-Branch abzweigt, findet in der ",[16,614,617],{"href":615,"rel":616},"https://git-scm.com/docs/git-config#Documentation/git-config.txt-inherit",[],"Konfiguration",[98,619,620],{},"branch.autoSetupMerge"," die passende Einstellung ",[98,623,624],{},"inherit",[12,626,627],{},[276,628,629,630,290],{},"Dieses Feature hat Harald Nordgren ",[16,631,634],{"href":632,"rel":633},"https://lore.kernel.org/git/pull.2285.v25.git.git.1785939877.gitgitgadget@gmail.com/",[],"eingereicht",[78,636,58],{"id":637},"git-refs1-kann-jetzt-referenzen-ändern",[12,639,640,645,646,649,650,653,654,657,658,661],{},[16,641,644],{"href":642,"rel":643},"https://git-scm.com/docs/git-refs",[],"git-refs(1)"," kam mit Git 2.46 hinzu und ist seitdem die zentrale Anlaufstelle für Operationen rund um Referenzen. Der Befehl hat bereits mehrere Unterbefehle erhalten: um Referenzen zwischen Speicher-Backends zu migrieren, Konsistenzprüfungen durchzuführen, bestehende Referenzen aufzulisten oder zu prüfen, ob eine Referenz existiert. Mit diesem Release kann er Referenzen außerdem anlegen (",[98,647,648],{},"create","), löschen (",[98,651,652],{},"delete","), aktualisieren (",[98,655,656],{},"update",") und umbenennen (",[98,659,660],{},"rename",").",[226,663,665],{"className":228,"code":664,"language":230,"meta":231,"style":231},"$ git refs list\n689f6e8164e070ed133d5176806ad69e31d22142 commit refs/heads/branch-d\n689f6e8164e070ed133d5176806ad69e31d22142 commit refs/heads/branch-r\n689f6e8164e070ed133d5176806ad69e31d22142 commit refs/heads/branch-u\n689f6e8164e070ed133d5176806ad69e31d22142 commit refs/heads/main\n\n$ git refs create refs/heads/branch-c main\n$ git refs update refs/heads/branch-u main~1\n$ git refs rename refs/heads/branch-r refs/heads/foo\n$ git refs delete refs/heads/branch-d\n\n$ git refs list\n689f6e8164e070ed133d5176806ad69e31d22142 commit refs/heads/branch-c\nc4e9b6bafb7ac9a96c5d9337cd60a0ec6d5a240d commit refs/heads/branch-u\n689f6e8164e070ed133d5176806ad69e31d22142 commit refs/heads/foo\n689f6e8164e070ed133d5176806ad69e31d22142 commit refs/heads/main\n",[98,666,667,679,690,699,708,717,721,737,754,772,786,791,802,812,822,831],{"__ignoreMap":231},[235,668,669,671,673,676],{"class":237,"line":238},[235,670,242],{"class":241},[235,672,246],{"class":245},[235,674,675],{"class":245}," refs",[235,677,678],{"class":245}," list\n",[235,680,681,684,687],{"class":237,"line":384},[235,682,683],{"class":241},"689f6e8164e070ed133d5176806ad69e31d22142",[235,685,686],{"class":245}," commit",[235,688,689],{"class":245}," refs/heads/branch-d\n",[235,691,692,694,696],{"class":237,"line":404},[235,693,683],{"class":241},[235,695,686],{"class":245},[235,697,698],{"class":245}," refs/heads/branch-r\n",[235,700,701,703,705],{"class":237,"line":427},[235,702,683],{"class":241},[235,704,686],{"class":245},[235,706,707],{"class":245}," refs/heads/branch-u\n",[235,709,710,712,714],{"class":237,"line":434},[235,711,683],{"class":241},[235,713,686],{"class":245},[235,715,716],{"class":245}," refs/heads/main\n",[235,718,719],{"class":237,"line":449},[235,720,431],{"emptyLinePlaceholder":430},[235,722,723,725,727,729,732,735],{"class":237,"line":455},[235,724,242],{"class":241},[235,726,246],{"class":245},[235,728,675],{"class":245},[235,730,731],{"class":245}," create",[235,733,734],{"class":245}," refs/heads/branch-c",[235,736,467],{"class":245},[235,738,739,741,743,745,748,751],{"class":237,"line":461},[235,740,242],{"class":241},[235,742,246],{"class":245},[235,744,675],{"class":245},[235,746,747],{"class":245}," update",[235,749,750],{"class":245}," refs/heads/branch-u",[235,752,753],{"class":245}," main~1\n",[235,755,757,759,761,763,766,769],{"class":237,"line":756},9,[235,758,242],{"class":241},[235,760,246],{"class":245},[235,762,675],{"class":245},[235,764,765],{"class":245}," rename",[235,767,768],{"class":245}," refs/heads/branch-r",[235,770,771],{"class":245}," refs/heads/foo\n",[235,773,775,777,779,781,784],{"class":237,"line":774},10,[235,776,242],{"class":241},[235,778,246],{"class":245},[235,780,675],{"class":245},[235,782,783],{"class":245}," delete",[235,785,689],{"class":245},[235,787,789],{"class":237,"line":788},11,[235,790,431],{"emptyLinePlaceholder":430},[235,792,794,796,798,800],{"class":237,"line":793},12,[235,795,242],{"class":241},[235,797,246],{"class":245},[235,799,675],{"class":245},[235,801,678],{"class":245},[235,803,805,807,809],{"class":237,"line":804},13,[235,806,683],{"class":241},[235,808,686],{"class":245},[235,810,811],{"class":245}," refs/heads/branch-c\n",[235,813,815,818,820],{"class":237,"line":814},14,[235,816,817],{"class":241},"c4e9b6bafb7ac9a96c5d9337cd60a0ec6d5a240d",[235,819,686],{"class":245},[235,821,707],{"class":245},[235,823,825,827,829],{"class":237,"line":824},15,[235,826,683],{"class":241},[235,828,686],{"class":245},[235,830,771],{"class":245},[235,832,834,836,838],{"class":237,"line":833},16,[235,835,683],{"class":241},[235,837,686],{"class":245},[235,839,716],{"class":245},[12,841,842,843,173,845,847],{},"Die Unterbefehle ",[98,844,656],{},[98,846,652],{}," akzeptieren zudem einen optionalen erwarteten alten Wert und prüfen ihn, bevor sie die Operation ausführen.",[12,849,850],{},[276,851,852,853,856,857,290],{},"Diese Patches hat ",[16,854,289],{"href":287,"rel":855},[]," ",[16,858,861],{"href":859,"rel":860},"https://lore.kernel.org/git/20260706-pks-refs-writing-subcommands-v4-0-d51f6ce7f830@pks.im/",[],"umgesetzt",[78,863,64],{"id":864},"google-summer-of-code-2026",[12,866,867,868,873],{},"Mit diesem Release sind auch alle vier Projekte aus dem ",[16,869,872],{"href":870,"rel":871},"https://summerofcode.withgoogle.com/",[],"Google Summer of Code"," erfolgreich abgeschlossen. Jedes Projekt wurde von jemandem aus dem Engineering-Team von GitLab mitbetreut.",[875,876,878],"h3",{"id":877},"remote-object-info-für-git-cat-file1","remote-object-info für git-cat-file(1)",[12,880,881,882,887,888,204,891,894,895,898],{},"In einem Partial Clone arbeitet ein Repository, ohne jedes Objekt herunterzuladen. Git lädt Objekte erst bei Bedarf nach. ",[16,883,886],{"href":884,"rel":885},"https://git-scm.com/docs/git-cat-file",[],"git-cat-file(1)"," kann zwar Objektinformationen zu einem Objekt-Hash lesen, überträgt dafür bisher aber das gesamte Objekt. Git 2.56 ergänzt den Modus ",[98,889,890],{},"--batch-command",[16,892,886],{"href":884,"rel":893},[]," um den Befehl ",[98,896,897],{},"remote-object-info",", der über Version 2 des Git-Protokolls nur die Metadaten abfragt. Ein Beispiel ist ein Blobless Clone, der überhaupt keine Blobs enthält:",[226,900,902],{"className":228,"code":901,"language":230,"meta":231,"style":231},"$ git rev-parse HEAD:model.weights\n42ec5fc0f485f764cdf0eaa85ab061c055f5f518\n\n$ git cat-file --batch-all-objects --batch-check | grep -c blob\n0\n\n$ echo \"remote-object-info origin 42ec5fc0f485f764cdf0eaa85ab061c055f5f518\" |\n    git cat-file --batch-command\n42ec5fc0f485f764cdf0eaa85ab061c055f5f518 blob 3000000\n\n$ git cat-file --batch-all-objects --batch-check | grep -c blob\n0\n",[98,903,904,916,921,925,950,955,959,972,982,993,997,1017],{"__ignoreMap":231},[235,905,906,908,910,913],{"class":237,"line":238},[235,907,242],{"class":241},[235,909,246],{"class":245},[235,911,912],{"class":245}," rev-parse",[235,914,915],{"class":245}," HEAD:model.weights\n",[235,917,918],{"class":237,"line":384},[235,919,920],{"class":241},"42ec5fc0f485f764cdf0eaa85ab061c055f5f518\n",[235,922,923],{"class":237,"line":404},[235,924,431],{"emptyLinePlaceholder":430},[235,926,927,929,931,934,937,940,942,944,947],{"class":237,"line":427},[235,928,242],{"class":241},[235,930,246],{"class":245},[235,932,933],{"class":245}," cat-file",[235,935,936],{"class":313}," --batch-all-objects",[235,938,939],{"class":313}," --batch-check",[235,941,320],{"class":255},[235,943,323],{"class":241},[235,945,946],{"class":313}," -c",[235,948,949],{"class":245}," blob\n",[235,951,952],{"class":237,"line":434},[235,953,954],{"class":241},"0\n",[235,956,957],{"class":237,"line":449},[235,958,431],{"emptyLinePlaceholder":430},[235,960,961,963,966,969],{"class":237,"line":455},[235,962,242],{"class":241},[235,964,965],{"class":245}," echo",[235,967,968],{"class":245}," \"remote-object-info origin 42ec5fc0f485f764cdf0eaa85ab061c055f5f518\"",[235,970,971],{"class":255}," |\n",[235,973,974,977,979],{"class":237,"line":461},[235,975,976],{"class":241},"    git",[235,978,933],{"class":245},[235,980,981],{"class":313}," --batch-command\n",[235,983,984,987,990],{"class":237,"line":756},[235,985,986],{"class":241},"42ec5fc0f485f764cdf0eaa85ab061c055f5f518",[235,988,989],{"class":245}," blob",[235,991,992],{"class":313}," 3000000\n",[235,994,995],{"class":237,"line":774},[235,996,431],{"emptyLinePlaceholder":430},[235,998,999,1001,1003,1005,1007,1009,1011,1013,1015],{"class":237,"line":788},[235,1000,242],{"class":241},[235,1002,246],{"class":245},[235,1004,933],{"class":245},[235,1006,936],{"class":313},[235,1008,939],{"class":313},[235,1010,320],{"class":255},[235,1012,323],{"class":241},[235,1014,946],{"class":313},[235,1016,949],{"class":245},[235,1018,1019],{"class":237,"line":793},[235,1020,954],{"class":241},[12,1022,1023],{},"So lässt sich die Größe des Blobs ermitteln, ohne den Blob selbst zu übertragen. Im Beispiel entfallen damit 3 Millionen Byte Datenübertragung.",[12,1025,1026],{},[276,1027,1028,1029,1034,1035,1040,1041,173,1045,290],{},"An dem ",[16,1030,1033],{"href":1031,"rel":1032},"https://summerofcode.withgoogle.com/programs/2026/projects/752yzmwm",[],"Projekt"," arbeitete ",[16,1036,1039],{"href":1037,"rel":1038},"https://pablosabater.dev/",[],"Pablo Sabater"," und setzte damit Vorarbeiten von Eric Ju und Calvin Wan fort. Mentoren waren ",[16,1042,7],{"href":1043,"rel":1044},"https://gitlab.com/knayakgl",[],[16,1046,1049],{"href":1047,"rel":1048},"https://chand-ra.github.io/",[],"Chandra Pratap",[875,1051,1053],{"id":1052},"freigabe-von-speicherplatz-in-partial-clones","Freigabe von Speicherplatz in Partial Clones",[12,1055,1056,1057,1062,1063,1066],{},"Partial Clones sparen viel Speicherplatz, weil sie Blobs erst bei Bedarf nachladen. Mit der Zeit summieren sich diese Nachladevorgänge jedoch. Das Repository wächst, und der Vorteil geht verloren. Im Rahmen dieses GSoC-Projekts erhielt ",[16,1058,1061],{"href":1059,"rel":1060},"https://git-scm.com/docs/git-repack",[],"git-repack(1)"," die neue Option ",[98,1064,1065],{},"--drop-filtered",". Diese findet große Promisor-Blobs oberhalb des angegebenen Filters und entfernt sie lokal.",[12,1068,1069,1070,1073],{},"Ein Beispiel ist ein gefilterter Clone eines Repositorys, dessen Historie einen Blob von 3 MB enthält. Direkt nach ",[98,1071,1072],{},"git clone"," ist das Repository klein, doch schon ein Blick auf den Blob lädt ihn auf die lokale Festplatte:",[226,1075,1077],{"className":228,"code":1076,"language":230,"meta":231,"style":231},"$ du -sh .git\n144K    .git\n\n$ git cat-file -s b8086a678595c9fce29d980f7a12ca069b466f6c\n3000000\n\n$ du -sh .git\n3.1M    .git\n",[98,1078,1079,1092,1100,1104,1118,1123,1127,1137],{"__ignoreMap":231},[235,1080,1081,1083,1086,1089],{"class":237,"line":238},[235,1082,242],{"class":241},[235,1084,1085],{"class":245}," du",[235,1087,1088],{"class":313}," -sh",[235,1090,1091],{"class":245}," .git\n",[235,1093,1094,1097],{"class":237,"line":384},[235,1095,1096],{"class":241},"144K",[235,1098,1099],{"class":245},"    .git\n",[235,1101,1102],{"class":237,"line":404},[235,1103,431],{"emptyLinePlaceholder":430},[235,1105,1106,1108,1110,1112,1115],{"class":237,"line":427},[235,1107,242],{"class":241},[235,1109,246],{"class":245},[235,1111,933],{"class":245},[235,1113,1114],{"class":313}," -s",[235,1116,1117],{"class":245}," b8086a678595c9fce29d980f7a12ca069b466f6c\n",[235,1119,1120],{"class":237,"line":434},[235,1121,1122],{"class":241},"3000000\n",[235,1124,1125],{"class":237,"line":449},[235,1126,431],{"emptyLinePlaceholder":430},[235,1128,1129,1131,1133,1135],{"class":237,"line":455},[235,1130,242],{"class":241},[235,1132,1085],{"class":245},[235,1134,1088],{"class":313},[235,1136,1091],{"class":245},[235,1138,1139,1142],{"class":237,"line":461},[235,1140,1141],{"class":241},"3.1M",[235,1143,1099],{"class":245},[12,1145,1146,1147,1149],{},"Obwohl der Blob im Arbeitsverzeichnis nicht gebraucht wird, bleibt er liegen. ",[98,1148,1065],{}," entfernt ihn wieder, und Git kann ihn bei Bedarf später erneut nachladen.",[226,1151,1153],{"className":228,"code":1152,"language":230,"meta":231,"style":231},"$ git repack -a -d --filter=blob:limit=1k --drop-filtered\n$ du -sh .git\n156K    .git\n",[98,1154,1155,1176,1186],{"__ignoreMap":231},[235,1156,1157,1159,1161,1164,1167,1170,1173],{"class":237,"line":238},[235,1158,242],{"class":241},[235,1160,246],{"class":245},[235,1162,1163],{"class":245}," repack",[235,1165,1166],{"class":313}," -a",[235,1168,1169],{"class":313}," -d",[235,1171,1172],{"class":313}," --filter=blob:limit=1k",[235,1174,1175],{"class":313}," --drop-filtered\n",[235,1177,1178,1180,1182,1184],{"class":237,"line":384},[235,1179,242],{"class":241},[235,1181,1085],{"class":245},[235,1183,1088],{"class":313},[235,1185,1091],{"class":245},[235,1187,1188,1191],{"class":237,"line":404},[235,1189,1190],{"class":241},"156K",[235,1192,1099],{"class":245},[12,1194,1195],{},[276,1196,1028,1197,1034,1201,1206,1207,173,1212,290],{},[16,1198,1033],{"href":1199,"rel":1200},"https://summerofcode.withgoogle.com/programs/2026/projects/hs14IFAn",[],[16,1202,1205],{"href":1203,"rel":1204},"https://siddharth.shrimali.info/",[],"Siddharth Shrimali",", betreut von ",[16,1208,1211],{"href":1209,"rel":1210},"https://gitlab.com/chriscool",[],"Christian Couder",[16,1213,1216],{"href":1214,"rel":1215},"https://gitlab.com/edith007",[],"Siddharth Asthana",[875,1218,1220],{"id":1219},"verbesserungen-am-neuen-befehl-git-repo","Verbesserungen am neuen Befehl git repo",[12,1222,1223,1224,1229,1230,1233,1234,173,1237,1240],{},"Der Befehl ",[16,1225,1228],{"href":1226,"rel":1227},"https://git-scm.com/docs/git-repo",[],"git-repo(1)"," liefert Informationen über das Repository. Im Rahmen des GSoC-Projekts erhielt der Unterbefehl ",[98,1231,1232],{},"git repo info"," die Schlüssel ",[98,1235,1236],{},"path.gitdir",[98,1238,1239],{},"path.commondir",", jeweils als absolute und als relative Angabe.",[226,1242,1244],{"className":228,"code":1243,"language":230,"meta":231,"style":231},"$ git repo info --all\nlayout.bare=false\nlayout.shallow=false\nobject.format=sha1\npath.commondir.absolute=/home/karthik/code/git/.git\npath.commondir.relative=.git\npath.gitdir.absolute=/home/karthik/code/git/.git\npath.gitdir.relative=.git\nreferences.format=reftable\n",[98,1245,1246,1261,1272,1281,1289,1297,1305,1312,1319],{"__ignoreMap":231},[235,1247,1248,1250,1252,1255,1258],{"class":237,"line":238},[235,1249,242],{"class":241},[235,1251,246],{"class":245},[235,1253,1254],{"class":245}," repo",[235,1256,1257],{"class":245}," info",[235,1259,1260],{"class":313}," --all\n",[235,1262,1263,1266,1269],{"class":237,"line":384},[235,1264,1265],{"class":241},"layout.bare",[235,1267,1268],{"class":245},"=",[235,1270,1271],{"class":313},"false\n",[235,1273,1274,1277,1279],{"class":237,"line":404},[235,1275,1276],{"class":241},"layout.shallow",[235,1278,1268],{"class":245},[235,1280,1271],{"class":313},[235,1282,1283,1286],{"class":237,"line":427},[235,1284,1285],{"class":241},"object.format",[235,1287,1288],{"class":245},"=sha1\n",[235,1290,1291,1294],{"class":237,"line":434},[235,1292,1293],{"class":241},"path.commondir.absolute",[235,1295,1296],{"class":245},"=/home/karthik/code/git/.git\n",[235,1298,1299,1302],{"class":237,"line":449},[235,1300,1301],{"class":241},"path.commondir.relative",[235,1303,1304],{"class":245},"=.git\n",[235,1306,1307,1310],{"class":237,"line":455},[235,1308,1309],{"class":241},"path.gitdir.absolute",[235,1311,1296],{"class":245},[235,1313,1314,1317],{"class":237,"line":461},[235,1315,1316],{"class":241},"path.gitdir.relative",[235,1318,1304],{"class":245},[235,1320,1321,1324],{"class":237,"line":756},[235,1322,1323],{"class":241},"references.format",[235,1325,1326],{"class":245},"=reftable\n",[12,1328,1329,1330,290],{},"Weitere Patches mit zusätzlichen Pfadangaben liegen derzeit auf der ",[16,1331,1334],{"href":1332,"rel":1333},"https://lore.kernel.org/git/20260911144519.1011780-1-jayatheerthkulkarni2005@gmail.com/",[],"Mailingliste",[12,1336,1337],{},[276,1338,1028,1339,1034,1343,1206,1348,173,1353,290],{},[16,1340,1033],{"href":1341,"rel":1342},"https://summerofcode.withgoogle.com/programs/2026/projects/O1nF3zMT",[],[16,1344,1347],{"href":1345,"rel":1346},"https://jayatheerth.com/",[],"K Jayatheerth",[16,1349,1352],{"href":1350,"rel":1351},"https://gitlab.com/justintobler",[],"Justin Tobler",[16,1354,1357],{"href":1355,"rel":1356},"https://lucasoshiro.github.io/en/",[],"Lucas Seiki Oshiro",[875,1359,1361],{"id":1360},"weniger-globaler-zustand-in-git","Weniger globaler Zustand in Git",[12,1363,1364,1365,1368,1369,1372,1373,1376,1377,1379,1380,1382],{},"Der Kerncode von Git stützt sich noch stark auf globalen Zustand, von der bekannten Variable ",[98,1366,1367],{},"the_repository"," bis zu zahlreichen Konfigurationsoptionen. Das bremst die Bemühungen, Git als Bibliothek nutzbar zu machen (Libification). Das Projekt verschiebt einige globale Konfigurationsvariablen in die neue Struktur ",[98,1370,1371],{},"repo_config_values"," innerhalb von ",[98,1374,1375],{},"struct repository",". Aufrufstellen übergeben ",[98,1378,1375],{}," nun explizit, statt auf das globale ",[98,1381,1367],{}," zuzugreifen.",[12,1384,1385],{},[276,1386,1028,1387,1034,1391,1206,1396,1399,1400,173,1405,290],{},[16,1388,1033],{"href":1389,"rel":1390},"https://summerofcode.withgoogle.com/programs/2026/projects/Lx1PmL4k",[],[16,1392,1395],{"href":1393,"rel":1394},"https://malon7782.github.io/gsoc-blog-2026/",[],"Tian Yuchen",[16,1397,1211],{"href":1209,"rel":1398},[],", ",[16,1401,1404],{"href":1402,"rel":1403},"https://ayu-ch.github.io/",[],"Ayush Chandekar",[16,1406,1409],{"href":1407,"rel":1408},"https://cloobtech.hashnode.dev/",[],"Bello Caleb Olamide",[78,1411,70],{"id":1412},"linearisierte-historie-mit-git-replay1",[12,1414,1415,1420],{},[16,1416,1419],{"href":1417,"rel":1418},"https://git-scm.com/docs/git-replay",[],"git-replay(1)"," ist ein experimenteller Git-Befehl für Rebases auf dem Server, der kein Arbeitsverzeichnis benötigt:",[226,1422,1424],{"className":228,"code":1423,"language":230,"meta":231,"style":231},"$ git log --oneline --graph --all\n* 1756840 (main) main: unrelated upstream work\n| * 286e7f1 (topic) topic: add two\n| * 4324bcd topic: add one\n|/\n* 9497867 Initial commit\n\n$ git replay --ref-action=print --onto main topic\nupdate refs/heads/topic a144de2fc13ac40c8a481052be5e4d42071c4908 286e7f186f229ac4dd5ecb68a372951003f16224\n\n$ git log --oneline --graph a144de2fc13ac40c8a481052be5e4d42071c4908\n* a144de2 topic: add two\n* 6422f37 topic: add one\n* 1756840 (main) main: unrelated upstream work\n* 9497867 Initial commit\n",[98,1425,1426,1443,1455,1469,1487,1494,1501,1505,1525,1538,1542,1557,1564,1571,1581],{"__ignoreMap":231},[235,1427,1428,1430,1432,1435,1438,1441],{"class":237,"line":238},[235,1429,242],{"class":241},[235,1431,246],{"class":245},[235,1433,1434],{"class":245}," log",[235,1436,1437],{"class":313}," --oneline",[235,1439,1440],{"class":313}," --graph",[235,1442,1260],{"class":313},[235,1444,1445,1447,1450,1452],{"class":237,"line":384},[235,1446,464],{"class":255},[235,1448,1449],{"class":262}," 1756840 (",[235,1451,346],{"class":241},[235,1453,1454],{"class":262},") main: unrelated upstream work\n",[235,1456,1457,1460,1463,1466],{"class":237,"line":404},[235,1458,1459],{"class":255},"|",[235,1461,1462],{"class":241}," *",[235,1464,1465],{"class":245}," 286e7f1",[235,1467,1468],{"class":262}," (topic) topic: add two\n",[235,1470,1471,1473,1475,1478,1481,1484],{"class":237,"line":427},[235,1472,1459],{"class":255},[235,1474,1462],{"class":241},[235,1476,1477],{"class":245}," 4324bcd",[235,1479,1480],{"class":245}," topic:",[235,1482,1483],{"class":245}," add",[235,1485,1486],{"class":245}," one\n",[235,1488,1489,1491],{"class":237,"line":434},[235,1490,1459],{"class":255},[235,1492,1493],{"class":241},"/\n",[235,1495,1496,1498],{"class":237,"line":449},[235,1497,464],{"class":255},[235,1499,1500],{"class":262}," 9497867 Initial commit\n",[235,1502,1503],{"class":237,"line":455},[235,1504,431],{"emptyLinePlaceholder":430},[235,1506,1507,1509,1511,1514,1517,1520,1522],{"class":237,"line":461},[235,1508,242],{"class":241},[235,1510,246],{"class":245},[235,1512,1513],{"class":245}," replay",[235,1515,1516],{"class":313}," --ref-action=print",[235,1518,1519],{"class":313}," --onto",[235,1521,317],{"class":245},[235,1523,1524],{"class":245}," topic\n",[235,1526,1527,1529,1532,1535],{"class":237,"line":756},[235,1528,656],{"class":241},[235,1530,1531],{"class":245}," refs/heads/topic",[235,1533,1534],{"class":245}," a144de2fc13ac40c8a481052be5e4d42071c4908",[235,1536,1537],{"class":245}," 286e7f186f229ac4dd5ecb68a372951003f16224\n",[235,1539,1540],{"class":237,"line":774},[235,1541,431],{"emptyLinePlaceholder":430},[235,1543,1544,1546,1548,1550,1552,1554],{"class":237,"line":788},[235,1545,242],{"class":241},[235,1547,246],{"class":245},[235,1549,1434],{"class":245},[235,1551,1437],{"class":313},[235,1553,1440],{"class":313},[235,1555,1556],{"class":245}," a144de2fc13ac40c8a481052be5e4d42071c4908\n",[235,1558,1559,1561],{"class":237,"line":793},[235,1560,464],{"class":255},[235,1562,1563],{"class":262}," a144de2 topic: add two\n",[235,1565,1566,1568],{"class":237,"line":804},[235,1567,464],{"class":255},[235,1569,1570],{"class":262}," 6422f37 topic: add one\n",[235,1572,1573,1575,1577,1579],{"class":237,"line":814},[235,1574,464],{"class":255},[235,1576,1449],{"class":262},[235,1578,346],{"class":241},[235,1580,1454],{"class":262},[235,1582,1583,1585],{"class":237,"line":824},[235,1584,464],{"class":255},[235,1586,1500],{"class":262},[12,1588,1589,1590,1593,1594,1597,1598,1600,1601,1603],{},"Ein Problem gab es bisher: Mit Commit-Bereichen, die Merge-Commits enthalten, funktionierte der Befehl nicht. Ein Beispiel: In einem ",[98,1591,1592],{},"feature","-Branch wird gearbeitet, und ein ",[98,1595,1596],{},"bugfix",", der in ",[98,1599,346],{}," landet, wird auch in den Feature-Branch gemergt. Der ",[98,1602,1592],{},"-Branch enthält dadurch einen Merge-Commit:",[226,1605,1607],{"className":228,"code":1606,"language":230,"meta":231,"style":231},"$ git log --graph --oneline --decorate --all\n* cb996b6 (HEAD -> feature) feature: handle the empty-input edge case\n*   4f76f3d Merge branch 'bugfix' into feature\n|\\\n| * 4959734 (main, bugfix) bugfix: do not crash on null input\n* | 829b62c feature: add parser tests\n* | 7fd60db feature: add the parser\n|/\n* 9497867 Initial commit\n\n$ git replay --onto main main..feature\nfatal: replaying merge commits is not supported yet!\n",[98,1608,1609,1626,1647,1660,1667,1702,1722,1741,1747,1753,1757,1772],{"__ignoreMap":231},[235,1610,1611,1613,1615,1617,1619,1621,1624],{"class":237,"line":238},[235,1612,242],{"class":241},[235,1614,246],{"class":245},[235,1616,1434],{"class":245},[235,1618,1440],{"class":313},[235,1620,1437],{"class":313},[235,1622,1623],{"class":313}," --decorate",[235,1625,1260],{"class":313},[235,1627,1628,1630,1633,1636,1639,1642,1644],{"class":237,"line":384},[235,1629,464],{"class":255},[235,1631,1632],{"class":262}," cb996b6 (",[235,1634,1635],{"class":241},"HEAD",[235,1637,1638],{"class":262}," -",[235,1640,1641],{"class":255},">",[235,1643,509],{"class":245},[235,1645,1646],{"class":262},") feature: handle the empty-input edge case\n",[235,1648,1649,1651,1654,1657],{"class":237,"line":404},[235,1650,464],{"class":255},[235,1652,1653],{"class":262},"   4f76f3d Merge branch ",[235,1655,1656],{"class":245},"'bugfix'",[235,1658,1659],{"class":262}," into feature\n",[235,1661,1662,1664],{"class":237,"line":427},[235,1663,1459],{"class":255},[235,1665,1666],{"class":313},"\\\n",[235,1668,1669,1671,1673,1676,1679,1681,1684,1687,1690,1693,1696,1699],{"class":237,"line":434},[235,1670,1459],{"class":255},[235,1672,1462],{"class":241},[235,1674,1675],{"class":313}," 4959734",[235,1677,1678],{"class":262}," (main, ",[235,1680,1596],{"class":245},[235,1682,1683],{"class":262},") bugfix: ",[235,1685,1686],{"class":255},"do",[235,1688,1689],{"class":241}," not",[235,1691,1692],{"class":245}," crash",[235,1694,1695],{"class":245}," on",[235,1697,1698],{"class":245}," null",[235,1700,1701],{"class":245}," input\n",[235,1703,1704,1706,1708,1711,1714,1716,1719],{"class":237,"line":449},[235,1705,464],{"class":255},[235,1707,320],{"class":255},[235,1709,1710],{"class":241}," 829b62c",[235,1712,1713],{"class":245}," feature:",[235,1715,1483],{"class":245},[235,1717,1718],{"class":245}," parser",[235,1720,1721],{"class":245}," tests\n",[235,1723,1724,1726,1728,1731,1733,1735,1738],{"class":237,"line":455},[235,1725,464],{"class":255},[235,1727,320],{"class":255},[235,1729,1730],{"class":241}," 7fd60db",[235,1732,1713],{"class":245},[235,1734,1483],{"class":245},[235,1736,1737],{"class":245}," the",[235,1739,1740],{"class":245}," parser\n",[235,1742,1743,1745],{"class":237,"line":461},[235,1744,1459],{"class":255},[235,1746,1493],{"class":241},[235,1748,1749,1751],{"class":237,"line":756},[235,1750,464],{"class":255},[235,1752,1500],{"class":262},[235,1754,1755],{"class":237,"line":774},[235,1756,431],{"emptyLinePlaceholder":430},[235,1758,1759,1761,1763,1765,1767,1769],{"class":237,"line":788},[235,1760,242],{"class":241},[235,1762,246],{"class":245},[235,1764,1513],{"class":245},[235,1766,1519],{"class":313},[235,1768,317],{"class":245},[235,1770,1771],{"class":245}," main..feature\n",[235,1773,1774,1777,1780,1783,1786,1789,1791,1794],{"class":237,"line":793},[235,1775,1776],{"class":241},"fatal:",[235,1778,1779],{"class":245}," replaying",[235,1781,1782],{"class":245}," merge",[235,1784,1785],{"class":245}," commits",[235,1787,1788],{"class":245}," is",[235,1790,1689],{"class":245},[235,1792,1793],{"class":245}," supported",[235,1795,1796],{"class":245}," yet!\n",[12,1798,1799,1801,1802,1805,1806,1809,1810,1813],{},[98,1800,1419],{}," verweigert den Rebase also wegen des Merge-Commits. Git 2.56 bringt dafür ",[98,1803,1804],{},"--linearize",", vergleichbar mit der Option ",[98,1807,1808],{},"--no-rebase-merges",", die bei ",[98,1811,1812],{},"git-rebase(1)"," bereits Standard ist.",[226,1815,1817],{"className":228,"code":1816,"language":230,"meta":231,"style":231},"$ git replay --linearize --onto main main..feature\n$ git log --graph --oneline --decorate --all\n* da8df6e (HEAD -> feature) feature: handle the empty-input edge case\n* f68889f feature: add parser tests\n* f13885b feature: add the parser\n* 4959734 (main, bugfix) bugfix: do not crash on null input\n* 9497867 Initial commit\n",[98,1818,1819,1836,1852,1869,1876,1883,1910],{"__ignoreMap":231},[235,1820,1821,1823,1825,1827,1830,1832,1834],{"class":237,"line":238},[235,1822,242],{"class":241},[235,1824,246],{"class":245},[235,1826,1513],{"class":245},[235,1828,1829],{"class":313}," --linearize",[235,1831,1519],{"class":313},[235,1833,317],{"class":245},[235,1835,1771],{"class":245},[235,1837,1838,1840,1842,1844,1846,1848,1850],{"class":237,"line":384},[235,1839,242],{"class":241},[235,1841,246],{"class":245},[235,1843,1434],{"class":245},[235,1845,1440],{"class":313},[235,1847,1437],{"class":313},[235,1849,1623],{"class":313},[235,1851,1260],{"class":313},[235,1853,1854,1856,1859,1861,1863,1865,1867],{"class":237,"line":404},[235,1855,464],{"class":255},[235,1857,1858],{"class":262}," da8df6e (",[235,1860,1635],{"class":241},[235,1862,1638],{"class":262},[235,1864,1641],{"class":255},[235,1866,509],{"class":245},[235,1868,1646],{"class":262},[235,1870,1871,1873],{"class":237,"line":427},[235,1872,464],{"class":255},[235,1874,1875],{"class":262}," f68889f feature: add parser tests\n",[235,1877,1878,1880],{"class":237,"line":434},[235,1879,464],{"class":255},[235,1881,1882],{"class":262}," f13885b feature: add the parser\n",[235,1884,1885,1887,1890,1893,1896,1898,1900,1902,1904,1906,1908],{"class":237,"line":449},[235,1886,464],{"class":255},[235,1888,1889],{"class":262}," 4959734 (",[235,1891,1892],{"class":241},"main,",[235,1894,1895],{"class":245}," bugfix",[235,1897,1683],{"class":262},[235,1899,1686],{"class":255},[235,1901,1689],{"class":241},[235,1903,1692],{"class":245},[235,1905,1695],{"class":245},[235,1907,1698],{"class":245},[235,1909,1701],{"class":245},[235,1911,1912,1914],{"class":237,"line":455},[235,1913,464],{"class":255},[235,1915,1500],{"class":262},[12,1917,1918],{},[276,1919,1920,1921,856,1926,290],{},"Dieses Feature hat ",[16,1922,1925],{"href":1923,"rel":1924},"https://gitlab.com/toon",[],"Toon Claes",[16,1927,634],{"href":1928,"rel":1929},"https://lore.kernel.org/git/20260831-toon-git-replay-drop-merges-v9-0-61c4232c6f36@iotcl.com/",[],[78,1931,76],{"id":1932},"weitere-schritte-zu-pluggable-object-databases",[12,1934,194,1935,1940,1941,1944],{},[16,1936,1939],{"href":1937,"rel":1938},"https://about.gitlab.com/de-de/blog/whats-new-in-git-2-54-0/#pluggable-object-databases",[],"Beitrag zu Git 2.54"," ging es darum, was Pluggable Object Databases sind und wie sie funktionieren. Zur Erinnerung: Git speichert seine Objekte (Blobs, Trees und Commits) unter ",[98,1942,1943],{},".git/objects"," in zwei Formaten. Loose Objects sind einzelne Dateien, Packfiles fassen mehrere Objekte komprimiert zusammen. Da es keine Abstraktionsschicht gab, griffen verschiedene Subsysteme direkt auf die Speicherebene zu. Mit 2.54 wurde diese Abstraktionsschicht schließlich eingeführt.",[12,1946,1947],{},"Dieses Release geht weitere Schritte, um in den Backends die Schnittstellen bereitzustellen, die sie wirklich austauschbar machen:",[32,1949,1950,1959,1971,1988,1994,2000,2010],{},[35,1951,1952,1955,1956,1958],{},[150,1953,1954],{},"Anlegen der Datenstrukturen auf der Festplatte."," Beim Initialisieren des Repositorys wird der Ordner ",[98,1957,1943],{}," angelegt. Diese Aufgabe liegt jetzt bei den einzelnen Backends.",[35,1960,1961,1964,1965,1970],{},[150,1962,1963],{},"Konsistenzprüfungen."," Die Konsistenzprüfungen aus ",[16,1966,1969],{"href":1967,"rel":1968},"https://git-scm.com/docs/git-fsck",[],"git-fsck(1)"," sind in die Ebene der Objektquellen gewandert, sodass Backends eigene Prüfungen umsetzen können.",[35,1972,1973,1976,1977,173,1982,1987],{},[150,1974,1975],{},"Housekeeping."," Die Housekeeping-Logik des Files-Backends in ",[16,1978,1981],{"href":1979,"rel":1980},"https://git-scm.com/docs/git-gc",[],"git-gc(1)",[16,1983,1986],{"href":1984,"rel":1985},"https://git-scm.com/docs/git-maintenance",[],"git-maintenance(1)"," (inkrementelles Repacking, geometrisches Repacking und Pruning) wurde aus dem Befehl in die Files-Objektquelle verlagert.",[35,1989,1990,1993],{},[150,1991,1992],{},"Erzeugen von Packfiles."," Beim Fetch und Push erzeugt Git als Teil des Protokolls Packfiles, indem es git-pack-objects(1) aufruft. Backends können Packfiles jetzt selbst bereitstellen.",[35,1995,1996,1999],{},[150,1997,1998],{},"Eigene Objektquellen."," Nach dem Backend für Loose Objects im letzten Release hat jetzt auch das Backend für gepackte Objekte eine eigene Objektquelle.",[35,2001,2002,2005,2006,2009],{},[150,2003,2004],{},"Lese- und Schreib-Streams."," Die getrennten Streams zum Lesen und Schreiben von Objekten sind jetzt in einer gemeinsamen ",[98,2007,2008],{},"struct odb_stream"," vereint, sodass sich beliebige Objekttypen streamen lassen.",[35,2011,2012,2015],{},[150,2013,2014],{},"ODB-Transaktionen."," git-receive-pack(1) nutzt jetzt ODB-Transaktionen und schreibt Objekte damit über die Schnittstelle, ohne Annahmen über das Backend zu treffen.",[12,2017,2018],{},"Dazu kommt noch einiges mehr. So viele Änderungen dieses Release auch enthält: Aus Sicht der Nutzer(innen) bleibt alles beim Alten, und genau so ist es gewollt. GitLab erhält damit die Infrastruktur, um Git im großen Maßstab zu betreiben. Das Backend lässt sich bei Bedarf austauschen, und zwar im Rahmen der Git-Community. Weitere Details folgen.",[12,2020,2021],{},[276,2022,2023,2024,173,2027,2030],{},"Diese Änderungen haben ",[16,2025,1352],{"href":1350,"rel":2026},[],[16,2028,289],{"href":287,"rel":2029},[]," gemeinsam eingereicht.",[78,2032,2034],{"id":2033},"weiterlesen","Weiterlesen",[12,2036,2037,2038,2042,2043,2048],{},"Dieser Artikel stellt nur einige der Neuerungen vor, zu denen GitLab und die Git-Community beigetragen haben. Mehr dazu steht in der ",[16,2039,2041],{"href":18,"rel":2040},[],"offiziellen Release-Ankündigung"," des Git-Projekts. Die ",[16,2044,2047],{"href":2045,"rel":2046},"https://about.gitlab.com/de-de/blog/tags/git/",[],"bisherigen Beiträge zu Git-Releases"," zeigen weitere Highlights aus der Arbeit des GitLab-Teams.",[2050,2051,2052],"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 pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}",{"title":231,"searchDepth":384,"depth":384,"links":2054},[2055,2056,2057,2058,2059,2065,2066,2067],{"id":80,"depth":384,"text":40},{"id":191,"depth":384,"text":46},{"id":293,"depth":384,"text":52},{"id":637,"depth":384,"text":58},{"id":864,"depth":384,"text":64,"children":2060},[2061,2062,2063,2064],{"id":877,"depth":404,"text":878},{"id":1052,"depth":404,"text":1053},{"id":1219,"depth":404,"text":1220},{"id":1360,"depth":404,"text":1361},{"id":1412,"depth":384,"text":70},{"id":1932,"depth":384,"text":76},{"id":2033,"depth":384,"text":2034},"open-source","2026-09-28","Git 2.56.0 steckt den Weg zu Git 3.0 ab und bringt neue Werkzeuge für den Alltag: Commits mit git-history(1) entfernen, Referenzen mit git-refs(1) ändern und Historie mit git-replay(1) linearisieren.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1782732487/ztwgrvlolpifo01vj8qc.png",{},"/de-de/blog/whats-new-in-git-2-56-0",{"config":2078,"title":2079,"description":2080},{"noIndex":2073},"Git 2.56.0: Zeitplan für Git 3.0 und neue Befehle","Git 2.56.0 legt den Zeitplan für Git 3.0 fest und bringt neue Befehle, darunter git history drop und schreibende Unterbefehle für git refs.","whats-new-in-git-2-56-0","de-de/blog/whats-new-in-git-2-56-0",[2084,2085,2086],"open source","git","community","BlogPost","f_z0d510drTyiZMTKFJT8AYh8yvHrM7ktfrEkbJC3jg",{"logo":2090,"freeTrial":2095,"sales":2100,"login":2105,"items":2110,"search":2440,"minimal":2475,"duo":2494,"switchNav":2503,"pricingDeployment":2514},{"config":2091},{"href":2092,"dataGaName":2093,"dataGaLocation":2094},"/de-de/","gitlab logo","header",{"text":2096,"config":2097},"Kostenlose Testversion anfordern",{"href":2098,"dataGaName":2099,"dataGaLocation":2094},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/de-de&glm_content=default-saas-trial/","free trial",{"text":2101,"config":2102},"Demo anfordern",{"href":2103,"dataGaName":2104,"dataGaLocation":2094},"/request-a-demo/","sales",{"text":2106,"config":2107},"Anmelden",{"href":2108,"dataGaName":2109,"dataGaLocation":2094},"https://gitlab.com/users/sign_in/","sign in",[2111,2197,2285,2290,2364,2418],{"text":2112,"left":430,"config":2113,"menu":2115},"Plattform",{"dataNavLevelOne":2114},"platform",{"type":2116,"link":2117,"columns":2121,"feature":2186},"lists",{"text":2118,"config":2119},"Die Plattform erkunden",{"href":2120,"dataGaName":2114,"dataGaLocation":2094},"/de-de/platform/",[2122,2145,2168],{"title":2123,"items":2124},"Ausführung und Workflows",[2125,2130,2135,2140],{"text":2126,"config":2127},"CI/CD",{"href":2128,"dataGaLocation":2094,"dataGaName":2129},"/de-de/solutions/continuous-integration/","ci/cd",{"text":2131,"config":2132},"Quellcodeverwaltung",{"href":2133,"dataGaLocation":2094,"dataGaName":2134},"/de-de/solutions/source-code-management/","source code management",{"text":2136,"config":2137},"Agile Delivery",{"href":2138,"dataGaLocation":2094,"dataGaName":2139},"/de-de/solutions/agile-delivery/","agile delivery",{"text":2141,"config":2142},"Artefaktverwaltung",{"href":2143,"dataGaLocation":2094,"dataGaName":2144},"/de-de/artifact-central/","artifact management",{"title":2146,"items":2147},"Sicherheit und Governance",[2148,2153,2158,2163],{"text":2149,"config":2150},"Anwendungssicherheitstests",{"href":2151,"dataGaLocation":2094,"dataGaName":2152},"/de-de/solutions/application-security-testing/","application security testing",{"text":2154,"config":2155},"Governance und Compliance",{"href":2156,"dataGaLocation":2094,"dataGaName":2157},"/de-de/solutions/software-compliance/","governance and compliance",{"text":2159,"config":2160},"Secrets-Management",{"href":2161,"dataGaLocation":2094,"dataGaName":2162},"/de-de/gitlab-secrets-manager/","secrets management",{"text":2164,"config":2165},"Lieferkettensicherheit",{"href":2166,"dataGaLocation":2094,"dataGaName":2167},"/de-de/solutions/supply-chain/","supply chain security",{"title":2169,"items":2170},"Kontext und KI",[2171,2176,2181],{"text":2172,"config":2173},"Agentische Orchestrierung",{"href":2174,"dataGaLocation":2094,"dataGaName":2175},"/de-de/gitlab-duo-agent-platform/","agentic orchestration",{"text":2177,"config":2178},"Kontextgraph",{"href":2179,"dataGaLocation":2094,"dataGaName":2180},"/de-de/gitlab-orbit/","context graph",{"text":2182,"config":2183},"Sichtbarkeit und Messung",{"href":2184,"dataGaLocation":2094,"dataGaName":2185},"/de-de/solutions/visibility-measurement/","visibility and measurement",{"config":2187,"title":2190,"text":2191,"link":2192},{"background":2188,"textColor":2189},"url('https://res.cloudinary.com/about-gitlab-com/image/upload/v1790185102/o7dn32anqcb6z8dgd3as.jpg')","#000","Warum GitLab","Eine Plattform für Schnelligkeit und Kontrolle im gesamten Software-Lebenszyklus.",{"text":2193,"config":2194},"Mehr erfahren",{"href":2195,"dataGaName":2196,"dataGaLocation":2094},"/de-de/why-gitlab/","why gitlab",{"text":2198,"left":430,"config":2199,"menu":2201},"Lösungen",{"dataNavLevelOne":2200},"solutions",{"type":2116,"link":2202,"columns":2206,"feature":2276},{"text":2203,"config":2204},"Alle Lösungen anzeigen",{"href":2205,"dataGaName":2200,"dataGaLocation":2094},"/de-de/solutions/",[2207,2225,2243],{"title":2208,"items":2209},"Ergebnisse",[2210,2215,2220],{"text":2211,"config":2212},"DevOps-Modernisierung",{"href":2213,"dataGaLocation":2094,"dataGaName":2214},"/de-de/assessments/devops-modernization-assessment/","devops modernization",{"text":2216,"config":2217},"Sicherheitsmodernisierung",{"href":2218,"dataGaLocation":2094,"dataGaName":2219},"/de-de/assessments/security-modernization-assessment/","security modernization",{"text":2221,"config":2222},"KI-Modernisierung",{"href":2223,"dataGaLocation":2094,"dataGaName":2224},"/de-de/assessments/ai-modernization-assessment/","ai modernization",{"title":2226,"items":2227},"Nach Größe",[2228,2233,2238],{"text":2229,"config":2230},"Große Unternehmen",{"href":2231,"dataGaLocation":2094,"dataGaName":2232},"/de-de/enterprise/","enterprise",{"text":2234,"config":2235},"Kleine Unternehmen",{"href":2236,"dataGaLocation":2094,"dataGaName":2237},"/de-de/small-business/","small business",{"text":2239,"config":2240},"Start-ups",{"href":2241,"dataGaLocation":2094,"dataGaName":2242},"/de-de/solutions/startups/","startups",{"title":2244,"items":2245},"Branchen",[2246,2251,2256,2261,2266,2271],{"text":2247,"config":2248},"Finanzdienstleistungen",{"href":2249,"dataGaLocation":2094,"dataGaName":2250},"/de-de/solutions/finance/","financial services",{"text":2252,"config":2253},"Öffentlicher Sektor",{"href":2254,"dataGaLocation":2094,"dataGaName":2255},"/de-de/solutions/public-sector/","public sector",{"text":2257,"config":2258},"Telekommunikation",{"href":2259,"dataGaLocation":2094,"dataGaName":2260},"/de-de/solutions/telecommunications/","telecommunications",{"text":2262,"config":2263},"Automobilindustrie",{"href":2264,"dataGaLocation":2094,"dataGaName":2265},"/de-de/solutions/automotive/","automotive",{"text":2267,"config":2268},"Bildungswesen",{"href":2269,"dataGaLocation":2094,"dataGaName":2270},"/de-de/solutions/education/","education",{"text":2272,"config":2273},"Luft- und Raumfahrt",{"href":2274,"dataGaLocation":2094,"dataGaName":2275},"/de-de/solutions/aerospace/","aerospace",{"config":2277,"title":2278,"text":2279,"link":2280},{"background":2188,"textColor":2189},"GitLab-Sicherheitsstandard","Mehr dazu, wie du deine Software Factory stärkst und KI-Agenten Autonomie gewinnen lässt, ohne an Sicherheit einzubüßen.",{"text":2281,"config":2282},"Standard entdecken",{"href":2283,"dataGaName":2284,"dataGaLocation":2094},"/gitlab-security-standard/","gitlab security standard",{"text":2286,"config":2287},"Preise",{"href":2288,"dataGaName":2289,"dataGaLocation":2094,"dataNavLevelOne":2289},"/de-de/pricing/","pricing",{"text":2291,"config":2292,"menu":2294},"Ressourcen",{"dataNavLevelOne":2293},"resources",{"type":2116,"link":2295,"columns":2299,"feature":2355},{"text":2296,"config":2297},"Alle Ressourcen anzeigen",{"href":2298,"dataGaName":2293,"dataGaLocation":2094},"/de-de/resources/",[2300,2328],{"title":2301,"items":2302},"Entdecken",[2303,2308,2313,2318,2323],{"text":2304,"config":2305},"Dokumentation",{"href":2306,"dataGaName":2307,"dataGaLocation":2094},"https://docs.gitlab.com/","docs",{"text":2309,"config":2310},"GitLab University",{"href":2311,"dataGaName":2312,"dataGaLocation":2094},"https://university.gitlab.com/","university",{"text":2314,"config":2315},"Demo-Reihe",{"href":2316,"dataGaName":2317,"dataGaLocation":2094},"/de-de/gitlab-technical-demo-series/","demo series",{"text":2319,"config":2320},"Demo-Hub",{"href":2321,"dataGaName":2322,"dataGaLocation":2094},"/de-de/demo-hub/","demo hub",{"text":2324,"config":2325},"Dienste",{"href":2326,"dataGaName":2327,"dataGaLocation":2094},"/de-de/services/","services",{"title":2329,"items":2330},"Vernetzen",[2331,2336,2340,2345,2350],{"text":2332,"config":2333},"Blog",{"href":2334,"dataGaName":2335,"dataGaLocation":2094},"/de-de/blog/","blog",{"text":2337,"config":2338},"Community",{"href":2339,"dataGaName":2086,"dataGaLocation":2094},"/community/",{"text":2341,"config":2342},"Kunden",{"href":2343,"dataGaName":2344,"dataGaLocation":2094},"/de-de/customers/","customers",{"text":2346,"config":2347},"Partner",{"href":2348,"dataGaName":2349,"dataGaLocation":2094},"/de-de/partners/","partners",{"text":2351,"config":2352},"Veranstaltungen",{"href":2353,"dataGaName":2354,"dataGaLocation":2094},"/events/","events",{"config":2356,"title":2357,"text":2358,"link":2359},{"background":2188,"textColor":2189},"Neues bei GitLab","Über die neuesten Funktionen und Verbesserungen auf dem Laufenden bleiben.",{"text":2360,"config":2361},"Aktuelle Nachrichten",{"href":2362,"dataGaName":2363,"dataGaLocation":2094},"/de-de/whats-new/","whats new",{"text":2365,"config":2366,"menu":2368},"Unternehmen",{"dataNavLevelOne":2367},"company",{"type":2116,"columns":2369},[2370],{"items":2371},[2372,2377,2383,2388,2393,2398,2403,2408,2413],{"text":2373,"config":2374},"Über",{"href":2375,"dataGaName":2376,"dataGaLocation":2094},"/de-de/company/","about",{"text":2378,"config":2379,"footerGa":2382},"Karriere",{"href":2380,"dataGaName":2381,"dataGaLocation":2094},"/jobs/","jobs",{"dataGaName":2381},{"text":2384,"config":2385},"Presse",{"href":2386,"dataGaName":2387,"dataGaLocation":2094},"/press/","press",{"text":2389,"config":2390},"Handbuch",{"href":2391,"dataGaName":2392,"dataGaLocation":2094},"https://handbook.gitlab.com/","handbook",{"text":2394,"config":2395},"Geschäftsführung",{"href":2396,"dataGaName":2397,"dataGaLocation":2094},"/company/team/e-group/","leadership",{"text":2399,"config":2400},"Investor Relations",{"href":2401,"dataGaName":2402,"dataGaLocation":2094},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":2404,"config":2405},"Trust Center",{"href":2406,"dataGaName":2407,"dataGaLocation":2094},"/de-de/security/","trust center",{"text":2409,"config":2410},"AI Transparency Center",{"href":2411,"dataGaName":2412,"dataGaLocation":2094},"/de-de/ai-transparency-center/","ai transparency center",{"text":2414,"config":2415},"Newsletter",{"href":2416,"dataGaName":2417,"dataGaLocation":2094},"/company/contact/#contact-forms","newsletter",{"text":2419,"config":2420,"menu":2421},"Kontakt",{"dataNavLevelOne":2367},{"type":2116,"columns":2422},[2423],{"items":2424},[2425,2430,2435],{"text":2426,"config":2427},"Vertrieb kontaktieren",{"href":2428,"dataGaName":2429,"dataGaLocation":2094},"/de-de/sales/","talk to sales",{"text":2431,"config":2432},"Support-Portal",{"href":2433,"dataGaName":2434,"dataGaLocation":2094},"https://support.gitlab.com/hc/en-us","support portal",{"text":2436,"config":2437},"Kundenportal",{"href":2438,"dataGaName":2439,"dataGaLocation":2094},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":2441,"login":2442,"suggestions":2449},"Schließen",{"text":2443,"link":2444},"Um Repositorys und Projekte zu durchsuchen, melde dich an bei",{"text":2445,"config":2446},"gitlab.com",{"href":2108,"dataGaName":2447,"dataGaLocation":2448},"search login","search",{"text":2450,"default":2451},"Vorschläge",[2452,2455,2459,2461,2466,2471],{"text":2453,"config":2454},"GitLab Duo Agent Platform",{"href":2174,"dataGaName":2453,"dataGaLocation":2448},{"text":2456,"config":2457},"Codevorschläge (KI)",{"href":2174,"dataGaName":2458,"dataGaLocation":2448},"Code Suggestions (AI)",{"text":2126,"config":2460},{"href":2128,"dataGaName":2126,"dataGaLocation":2448},{"text":2462,"config":2463},"GitLab auf AWS",{"href":2464,"dataGaName":2465,"dataGaLocation":2448},"/de-de/partners/technology-partners/aws/","GitLab on AWS",{"text":2467,"config":2468},"GitLab auf Google Cloud",{"href":2469,"dataGaName":2470,"dataGaLocation":2448},"/de-de/partners/technology-partners/google-cloud-platform/","GitLab on Google Cloud",{"text":2472,"config":2473},"Warum GitLab?",{"href":2195,"dataGaName":2474,"dataGaLocation":2448},"Why GitLab?",{"freeTrial":2476,"mobileIcon":2481,"desktopIcon":2486,"secondaryButton":2489},{"text":2477,"config":2478},"Kostenlos testen",{"href":2479,"dataGaName":2099,"dataGaLocation":2480},"https://gitlab.com/-/trials/new/","nav",{"altText":2482,"config":2483},"GitLab-Symbol",{"src":2484,"dataGaName":2485,"dataGaLocation":2480},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":2482,"config":2487},{"src":2488,"dataGaName":2485,"dataGaLocation":2480},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":2490,"config":2491},"Erste Schritte",{"href":2492,"dataGaName":2493,"dataGaLocation":2480},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/de-de/get-started/","get started",{"freeTrial":2495,"mobileIcon":2499,"desktopIcon":2501},{"text":2496,"config":2497},"Mehr über GitLab Duo erfahren",{"href":2174,"dataGaName":2498,"dataGaLocation":2480},"gitlab duo",{"altText":2482,"config":2500},{"src":2484,"dataGaName":2485,"dataGaLocation":2480},{"altText":2482,"config":2502},{"src":2488,"dataGaName":2485,"dataGaLocation":2480},{"button":2504,"mobileIcon":2509,"desktopIcon":2511},{"text":2505,"config":2506},"/Option",{"href":2507,"dataGaName":2508,"dataGaLocation":2480},"#contact","switch",{"altText":2482,"config":2510},{"src":2484,"dataGaName":2485,"dataGaLocation":2480},{"altText":2482,"config":2512},{"src":2513,"dataGaName":2485,"dataGaLocation":2480},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":2515,"mobileIcon":2520,"desktopIcon":2522},{"text":2516,"config":2517},"Zurück zur Preisübersicht",{"href":2288,"dataGaName":2518,"dataGaLocation":2480,"icon":2519},"back to pricing","GoBack",{"altText":2482,"config":2521},{"src":2484,"dataGaName":2485,"dataGaLocation":2480},{"altText":2482,"config":2523},{"src":2488,"dataGaName":2485,"dataGaLocation":2480},{"title":2525,"button":2526,"config":2529},"GitLab Orbit ist da: die Kontextebene für KI-Agenten",{"text":2193,"config":2527},{"href":2179,"dataGaName":2528,"dataGaLocation":2094},"orbit",{"layout":2530,"disabled":2073},"release",{"data":2532},{"text":2533,"source":2534,"edit":2540,"contribute":2545,"config":2550,"items":2555,"minimal":2777},"Git ist eine Marke von Software Freedom Conservancy und unsere Verwendung von „GitLab“ erfolgt unter Lizenz.",{"text":2535,"config":2536},"Quelltext der Seite anzeigen",{"href":2537,"dataGaName":2538,"dataGaLocation":2539},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":2541,"config":2542},"Diese Seite bearbeiten",{"href":2543,"dataGaName":2544,"dataGaLocation":2539},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":2546,"config":2547},"Beteilige dich",{"href":2548,"dataGaName":2549,"dataGaLocation":2539},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":2551,"facebook":2552,"youtube":2553,"linkedin":2554},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[2556,2601,2659,2702,2744],{"title":2286,"links":2557,"subMenu":2572},[2558,2562,2567],{"text":2559,"config":2560},"Tarife anzeigen",{"href":2288,"dataGaName":2561,"dataGaLocation":2539},"view plans",{"text":2563,"config":2564},"Vorteile von Premium",{"href":2565,"dataGaName":2566,"dataGaLocation":2539},"/de-de/pricing/premium/","why premium",{"text":2568,"config":2569},"Vorteile von Ultimate",{"href":2570,"dataGaName":2571,"dataGaLocation":2539},"/de-de/pricing/ultimate/","why ultimate",[2573],{"title":2419,"links":2574},[2575,2577,2579,2581,2586,2591,2596],{"text":2426,"config":2576},{"href":2428,"dataGaName":2104,"dataGaLocation":2539},{"text":2431,"config":2578},{"href":2433,"dataGaName":2434,"dataGaLocation":2539},{"text":2436,"config":2580},{"href":2438,"dataGaName":2439,"dataGaLocation":2539},{"text":2582,"config":2583},"Status",{"href":2584,"dataGaName":2585,"dataGaLocation":2539},"https://status.gitlab.com/","status",{"text":2587,"config":2588},"Nutzungsbedingungen",{"href":2589,"dataGaName":2590,"dataGaLocation":2539},"/terms/","terms of use",{"text":2592,"config":2593},"Datenschutzerklärung",{"href":2594,"dataGaName":2595,"dataGaLocation":2539},"/de-de/privacy/","privacy statement",{"text":2597,"config":2598},"Cookie-Einstellungen",{"dataGaName":2599,"dataGaLocation":2539,"id":2600,"isOneTrustButton":430},"cookie preferences","ot-sdk-btn",{"title":2112,"links":2602,"subMenu":2616},[2603,2606,2608,2610,2612,2614],{"text":2604,"config":2605},"Plattform entdecken",{"href":2120,"dataGaName":2114,"dataGaLocation":2539},{"text":2172,"config":2607},{"href":2174,"dataGaName":2175,"dataGaLocation":2539},{"text":2126,"config":2609},{"href":2128,"dataGaName":2129,"dataGaLocation":2539},{"text":2177,"config":2611},{"href":2179,"dataGaName":2180,"dataGaLocation":2539},{"text":2159,"config":2613},{"href":2161,"dataGaName":2162,"dataGaLocation":2539},{"text":2190,"config":2615},{"href":2195,"dataGaName":2196,"dataGaLocation":2539},[2617],{"title":2618,"links":2619},"Themen",[2620,2624,2629,2634,2639,2644,2649,2654],{"text":2126,"config":2621},{"href":2622,"dataGaName":2623,"dataGaLocation":2539},"/de-de/topics/ci-cd/","cicd",{"text":2625,"config":2626},"GitOps",{"href":2627,"dataGaName":2628,"dataGaLocation":2539},"/de-de/topics/gitops/","gitops",{"text":2630,"config":2631},"DevOps",{"href":2632,"dataGaName":2633,"dataGaLocation":2539},"/de-de/topics/devops/","devops",{"text":2635,"config":2636},"Versionskontrolle",{"href":2637,"dataGaName":2638,"dataGaLocation":2539},"/de-de/topics/version-control/","version control",{"text":2640,"config":2641},"DevSecOps",{"href":2642,"dataGaName":2643,"dataGaLocation":2539},"/de-de/topics/devsecops/","devsecops",{"text":2645,"config":2646},"Cloud-nativ",{"href":2647,"dataGaName":2648,"dataGaLocation":2539},"/de-de/topics/cloud-native/","cloud native",{"text":2650,"config":2651},"KI für das Programmieren",{"href":2652,"dataGaName":2653,"dataGaLocation":2539},"/de-de/topics/devops/ai-for-coding/","ai for coding",{"text":2655,"config":2656},"Agentische KI",{"href":2657,"dataGaName":2658,"dataGaLocation":2539},"/de-de/topics/agentic-ai/","agentic ai",{"title":2198,"links":2660},[2661,2663,2665,2667,2669,2671,2673,2675,2677,2679,2682,2685,2687,2690,2694,2698],{"text":2211,"config":2662},{"href":2213,"dataGaName":2214,"dataGaLocation":2539},{"text":2216,"config":2664},{"href":2218,"dataGaName":2219,"dataGaLocation":2539},{"text":2221,"config":2666},{"href":2223,"dataGaName":2224,"dataGaLocation":2539},{"text":2247,"config":2668},{"href":2249,"dataGaName":2250,"dataGaLocation":2539},{"text":2252,"config":2670},{"href":2254,"dataGaName":2255,"dataGaLocation":2539},{"text":2257,"config":2672},{"href":2259,"dataGaName":2260,"dataGaLocation":2539},{"text":2262,"config":2674},{"href":2264,"dataGaName":2265,"dataGaLocation":2539},{"text":2267,"config":2676},{"href":2269,"dataGaName":2270,"dataGaLocation":2539},{"text":2272,"config":2678},{"href":2274,"dataGaName":2275,"dataGaLocation":2539},{"text":2680,"config":2681},"Enterprise",{"href":2231,"dataGaName":2232,"dataGaLocation":2539},{"text":2683,"config":2684},"Kleinunternehmen",{"href":2236,"dataGaName":2237,"dataGaLocation":2539},{"text":2239,"config":2686},{"href":2241,"dataGaName":2242,"dataGaLocation":2539},{"text":2625,"config":2688},{"href":2689,"dataGaName":2628,"dataGaLocation":2539},"/de-de/solutions/gitops/",{"text":2691,"config":2692},"Analyse der Softwarezusammensetzung (SCA)",{"href":2166,"dataGaName":2693,"dataGaLocation":2539},"software composition analysis",{"text":2695,"config":2696},"Wertstrommanagement",{"href":2184,"dataGaName":2697,"dataGaLocation":2539},"value stream management",{"text":2699,"config":2700},"Alle Lösungen",{"href":2205,"dataGaName":2701,"dataGaLocation":2539},"all solutions",{"title":2291,"links":2703},[2704,2709,2714,2716,2718,2720,2722,2724,2726,2728,2731,2733,2735,2737,2740],{"text":2705,"config":2706},"Installieren",{"href":2707,"dataGaName":2708,"dataGaLocation":2539},"/de-de/install/","install",{"text":2710,"config":2711},"Kurzanleitungen",{"href":2712,"dataGaName":2713,"dataGaLocation":2539},"/de-de/get-started/","quick setup checklists",{"text":2304,"config":2715},{"href":2306,"dataGaName":2307,"dataGaLocation":2539},{"text":2309,"config":2717},{"href":2311,"dataGaName":2312,"dataGaLocation":2539},{"text":2314,"config":2719},{"href":2316,"dataGaName":2317,"dataGaLocation":2539},{"text":2319,"config":2721},{"href":2321,"dataGaName":2322,"dataGaLocation":2539},{"text":2324,"config":2723},{"href":2326,"dataGaName":2327,"dataGaLocation":2539},{"text":2332,"config":2725},{"href":2334,"dataGaName":2335,"dataGaLocation":2539},{"text":2337,"config":2727},{"href":2339,"dataGaName":2086,"dataGaLocation":2539},{"text":2729,"config":2730},"Kund(inn)en",{"href":2343,"dataGaName":2344,"dataGaLocation":2539},{"text":2346,"config":2732},{"href":2348,"dataGaName":2349,"dataGaLocation":2539},{"text":2351,"config":2734},{"href":2353,"dataGaName":2354,"dataGaLocation":2539},{"text":2414,"config":2736},{"href":2416,"dataGaName":2417,"dataGaLocation":2539},{"text":2738,"config":2739},"Neuerungen",{"href":2362,"dataGaName":2363,"dataGaLocation":2539},{"text":2741,"config":2742},"Alle Ressourcen",{"href":2298,"dataGaName":2743,"dataGaLocation":2539},"all resources",{"title":2365,"links":2745},[2746,2748,2750,2752,2754,2756,2758,2760,2762,2767,2772],{"text":2373,"config":2747},{"href":2375,"dataGaName":2367,"dataGaLocation":2539},{"text":2378,"config":2749},{"href":2380,"dataGaName":2381,"dataGaLocation":2539},{"text":2384,"config":2751},{"href":2386,"dataGaName":2387,"dataGaLocation":2539},{"text":2389,"config":2753},{"href":2391,"dataGaName":2392,"dataGaLocation":2539},{"text":2394,"config":2755},{"href":2396,"dataGaName":2397,"dataGaLocation":2539},{"text":2399,"config":2757},{"href":2401,"dataGaName":2402,"dataGaLocation":2539},{"text":2404,"config":2759},{"href":2406,"dataGaName":2407,"dataGaLocation":2539},{"text":2409,"config":2761},{"href":2411,"dataGaName":2412,"dataGaLocation":2539},{"text":2763,"config":2764},"Nachhaltigkeit",{"href":2765,"dataGaName":2766,"dataGaLocation":2539},"/sustainability/","Sustainability",{"text":2768,"config":2769},"Vielfalt, Inklusion und Zugehörigkeit",{"href":2770,"dataGaName":2771,"dataGaLocation":2539},"/de-de/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":2773,"config":2774},"Transparenzerklärung zu moderner Sklaverei",{"href":2775,"dataGaName":2776,"dataGaLocation":2539},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":2778},[2779,2782,2785],{"text":2780,"config":2781},"Terms",{"href":2589,"dataGaName":2590,"dataGaLocation":2539},{"text":2783,"config":2784},"Cookies",{"dataGaName":2599,"dataGaLocation":2539,"id":2600,"isOneTrustButton":430},{"text":2786,"config":2787},"Datenschutz",{"href":2594,"dataGaName":2595,"dataGaLocation":2539},[2789],{"id":2790,"title":7,"body":2072,"config":2791,"content":2793,"description":2072,"extension":2797,"meta":2798,"navigation":430,"path":2799,"seo":2800,"stem":2801,"__hash__":2802},"blogAuthors/en-us/blog/authors/karthik-nayak.yml",{"template":2792},"BlogAuthor",{"name":7,"config":2794},{"headshot":2795,"ctfId":2796},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659809/Blog/Author%20Headshots/Screenshot_2025-06-04_at_8.49.51%C3%A2__AM.png","3Q6ZKvaiCRw7tFZdDGlecg","yml",{},"/en-us/blog/authors/karthik-nayak",{},"en-us/blog/authors/karthik-nayak","pDQbfmQk6aaJ6PA9L68AzPlzIUBcosTh7WBoq680gpk",[2804,2812,2818],{"title":2805,"description":2806,"heroImage":2807,"category":2068,"date":2808,"authors":2809,"slug":2811,"externalUrl":2072},"Was ist Git? Ein Leitfaden zu Rolle und Funktionsweise","Jede Änderung am Code nachvollziehen, parallel am selben Projekt arbeiten und bei Bedarf zu einem früheren Stand zurückkehren: Dafür ist Git gebaut.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749687231/Blog/Hero%20Images/Git.jpg","2026-09-24",[2810],"GitLab Germany Team","what-is-git",{"title":2813,"description":2814,"heroImage":2815,"category":2068,"date":2808,"authors":2816,"slug":2817,"externalUrl":2072},"Git unter Windows nutzen – der Einstieg mit Git Bash","Welche Schritte führen zu einer funktionierenden Git-Umgebung unter Windows? Hier geht es um Installation, Funktionsweise und die ersten Befehle mit Git Bash.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749665174/Blog/Hero%20Images/git-bash.jpg",[2810],"git-bash",{"title":2819,"description":2820,"heroImage":2821,"category":2068,"date":2822,"authors":2823,"slug":2825,"externalUrl":2072},"Anerkennung im Team: GitLab Achievements erstellen und vergeben","Die Menschen auszeichnen, die ein Team ausmachen — im Unternehmen, in der Community oder im Open-Source-Projekt. Wie GitLab Achievements funktionieren.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1757950181/q9kb7zfiw1cyxx9fcafp.png","2026-08-27",[2824],"Lee Tickett","how-to-recognize-your-team-with-gitlab-achievements",{"header":2827,"text":2828,"button":2832,"disclaimer":2835},"Kostenlose 30-tägige\n\nGitLab-Testversion starten\n",[2829,2830,2831],"GitLab Duo Agent Platform nutzen","Unsere fortschrittlichsten Funktionen ausprobieren","Komplexe Aufgaben mit KI automatisieren",{"text":2477,"config":2833},{"href":2834,"dataGaName":2099,"dataGaLocation":2335},"https://gitlab.com/-/trials/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/de-de/blog/","Keine Kreditkarte erforderlich.",{"header":2837,"blurb":2838,"button":2839,"secondaryButton":2843},"Beginne noch heute, schneller zu entwickeln","Entdecke, was dein Team mit der intelligenten Orchestrierungsplattform für DevSecOps erreichen kann.\n",{"text":2840,"config":2841},"Kostenlosen Test starten",{"href":2842,"dataGaName":2099,"dataGaLocation":1592},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/de-de/",{"text":2426,"config":2844},{"href":2428,"dataGaName":2104,"dataGaLocation":1592},1791944913380]