[{"data":1,"prerenderedAt":2105},["ShallowReactive",2],{"/de-de/blog/journey-through-gits-20-year-history":3,"navigation-de-de":1321,"banner-de-de":1753,"footer-de-de":1761,"blog-post-authors-de-de-Patrick Steinhardt":2002,"blog-related-posts-de-de-journey-through-gits-20-year-history":2017,"blog-promotions-de-de":2041,"next-steps-de-de":2095},{"id":4,"title":5,"authors":6,"body":8,"category":1301,"date":1302,"description":1303,"extension":1304,"externalUrl":1305,"faq":1305,"featured":654,"heroImage":1306,"meta":1307,"navigation":654,"path":1308,"seo":1309,"slug":1314,"stem":1315,"tags":1316,"template":1318,"updatedDate":1319,"__hash__":1320},"blogPosts/de-de/blog/journey-through-gits-20-year-history.md","20 Jahre GitLab: Begib dich mit uns auf eine Reise",[7],"Patrick Steinhardt",{"type":9,"value":10,"toc":1281},"minimark",[11,22,25,30,44,47,220,223,263,270,273,276,345,356,359,365,380,385,392,416,419,541,544,664,670,674,681,802,808,811,828,832,835,838,858,864,880,884,887,896,899,909,913,916,923,927,930,946,953,1039,1042,1052,1056,1063,1070,1079,1085,1094,1100,1103,1109,1113,1116,1123,1128,1131,1145,1148,1151,1157,1173,1177,1180,1183,1206,1209,1213,1216,1219,1230,1233,1241,1244,1248,1277],[12,13,14,15,21],"p",{},"Das Git-Projekt ist gerade 20 Jahre alt geworden. In diesen Jahren ist viel passiert – während das konzeptionelle Design von ",[16,17,20],"a",{"href":18,"rel":19},"https://about.gitlab.com/de-de/",[],"GitLab"," seit seiner Entstehung nicht wesentlich verändert wurde, hat sich doch die Art und Weise, wie Benutzer(innen) mit dem Tool interagieren, deutlich geändert. Wir bei GitLab sind stolz darauf, auf dieser wichtigen Software aufzubauen und Teil ihrer Erfolgsgeschichte zu sein.",[12,23,24],{},"Begleite uns auf einer Reise durch die Geschichte von Git und entdecke, wie sich das System im Laufe der Jahre entwickelt hat.",[26,27,29],"h2",{"id":28},"der-erste-commit","Der erste Commit",[12,31,32,33,38,39,43],{},"Der erste Commit wurde am 7. April 2005 von ",[16,34,37],{"href":35,"rel":36},"https://about.gitlab.com/de-de/blog/celebrating-gits-20th-anniversary-with-creator-linus-torvalds/",[],"Linus Torvalds",", dem Schöpfer des Linux-Kernels, vorgenommen: ",[40,41,42],"code",{},"e83c5163316 (Initial revision of \"git\", the information manager from hell, 2005-04-07)",".",[12,45,46],{},"Wie wir sehen können, enthält dieser Commit nicht viele Dateien:",[48,49,54],"pre",{"className":50,"code":51,"language":52,"meta":53,"style":53},"language-shell shiki shiki-themes github-light","$ git ls-tree e83c5163316\n100644 blob a6bba79ba1f46a1bbf7773449c3bd2bb9bf48e8b    Makefile\n100644 blob 27577f76849c09d3405397244eb3d8ae1d11b0f3    README\n100644 blob 98a32a9ad39883c6d05a000a68511d4b1ee2b3c7    cache.h\n100644 blob 74a0a234dd346fff51c773aa57d82fc4b83a8557    cat-file.c\n100644 blob 840307af0cfaab31555795ce7175d5e9c9f981a0    commit-tree.c\n100644 blob 25dc13fe101b219f74007f3194b787dd99e863da    init-db.c\n100644 blob c924a6e0fc4c36bad6f23cb87ee59518c771f936    read-cache.c\n100644 blob 1b47742d8cbc0d98903777758b7b519980e7499e    read-tree.c\n100644 blob b8522886a15db861508fb6d03d4d88d6de912a4b    show-diff.c\n100644 blob 5085a5cb53ee52e1886ff6d46c609bdb2fc6d6cd    update-cache.c\n100644 blob 921f981353229db0c56103a52609d35aff16f41b    write-tree.c\n","shell","",[40,55,56,75,90,103,116,129,142,155,168,181,194,207],{"__ignoreMap":53},[57,58,61,65,69,72],"span",{"class":59,"line":60},"line",1,[57,62,64],{"class":63},"s7eDp","$",[57,66,68],{"class":67},"sYBdl"," git",[57,70,71],{"class":67}," ls-tree",[57,73,74],{"class":67}," e83c5163316\n",[57,76,78,81,84,87],{"class":59,"line":77},2,[57,79,80],{"class":63},"100644",[57,82,83],{"class":67}," blob",[57,85,86],{"class":67}," a6bba79ba1f46a1bbf7773449c3bd2bb9bf48e8b",[57,88,89],{"class":67},"    Makefile\n",[57,91,93,95,97,100],{"class":59,"line":92},3,[57,94,80],{"class":63},[57,96,83],{"class":67},[57,98,99],{"class":67}," 27577f76849c09d3405397244eb3d8ae1d11b0f3",[57,101,102],{"class":67},"    README\n",[57,104,106,108,110,113],{"class":59,"line":105},4,[57,107,80],{"class":63},[57,109,83],{"class":67},[57,111,112],{"class":67}," 98a32a9ad39883c6d05a000a68511d4b1ee2b3c7",[57,114,115],{"class":67},"    cache.h\n",[57,117,119,121,123,126],{"class":59,"line":118},5,[57,120,80],{"class":63},[57,122,83],{"class":67},[57,124,125],{"class":67}," 74a0a234dd346fff51c773aa57d82fc4b83a8557",[57,127,128],{"class":67},"    cat-file.c\n",[57,130,132,134,136,139],{"class":59,"line":131},6,[57,133,80],{"class":63},[57,135,83],{"class":67},[57,137,138],{"class":67}," 840307af0cfaab31555795ce7175d5e9c9f981a0",[57,140,141],{"class":67},"    commit-tree.c\n",[57,143,145,147,149,152],{"class":59,"line":144},7,[57,146,80],{"class":63},[57,148,83],{"class":67},[57,150,151],{"class":67}," 25dc13fe101b219f74007f3194b787dd99e863da",[57,153,154],{"class":67},"    init-db.c\n",[57,156,158,160,162,165],{"class":59,"line":157},8,[57,159,80],{"class":63},[57,161,83],{"class":67},[57,163,164],{"class":67}," c924a6e0fc4c36bad6f23cb87ee59518c771f936",[57,166,167],{"class":67},"    read-cache.c\n",[57,169,171,173,175,178],{"class":59,"line":170},9,[57,172,80],{"class":63},[57,174,83],{"class":67},[57,176,177],{"class":67}," 1b47742d8cbc0d98903777758b7b519980e7499e",[57,179,180],{"class":67},"    read-tree.c\n",[57,182,184,186,188,191],{"class":59,"line":183},10,[57,185,80],{"class":63},[57,187,83],{"class":67},[57,189,190],{"class":67}," b8522886a15db861508fb6d03d4d88d6de912a4b",[57,192,193],{"class":67},"    show-diff.c\n",[57,195,197,199,201,204],{"class":59,"line":196},11,[57,198,80],{"class":63},[57,200,83],{"class":67},[57,202,203],{"class":67}," 5085a5cb53ee52e1886ff6d46c609bdb2fc6d6cd",[57,205,206],{"class":67},"    update-cache.c\n",[57,208,210,212,214,217],{"class":59,"line":209},12,[57,211,80],{"class":63},[57,213,83],{"class":67},[57,215,216],{"class":67}," 921f981353229db0c56103a52609d35aff16f41b",[57,218,219],{"class":67},"    write-tree.c\n",[12,221,222],{},"Neben der Build-Infrastruktur bietet der erste Commit sieben Top-Level-Befehle:",[224,225,226,233,239,245,251,257],"ul",{},[227,228,229,232],"li",{},[40,230,231],{},"init-db"," zum Initialisieren eines neuen Git-Repositorys",[227,234,235,238],{},[40,236,237],{},"update-cache"," zum Hinzufügen von Dateien zum Index",[227,240,241,244],{},[40,242,243],{},"write-tree",", um den Inhalt des Index heranzuziehen und daraus einen neuen Baum zu erstellen",[227,246,247,250],{},[40,248,249],{},"read-tree"," zum Lesen eines Baum-Objekts",[227,252,253,256],{},[40,254,255],{},"commit-tree"," zum Erstellen eines Commits aus einem Baum",[227,258,259,262],{},[40,260,261],{},"cat-file"," zum Lesen eines spezifischen Objekts in eine temporäre Datei",[12,264,265,266,269],{},"Beachte, dass der Befehl ",[40,267,268],{},"git"," zu der Zeit noch gar nicht existierte.",[12,271,272],{},"Stattdessen mussten diese Befehle direkt ausgeführt werden.",[12,274,275],{},"Erstellen wir zum Beispiel ein neues Repository:",[48,277,279],{"className":50,"code":278,"language":52,"meta":53,"style":53},"$ mkdir repo\n$ cd repo\n$ init-db\ndefaulting to private storage area\n$ ls -a\n.  ..  .dircache\n",[40,280,281,291,300,307,324,335],{"__ignoreMap":53},[57,282,283,285,288],{"class":59,"line":60},[57,284,64],{"class":63},[57,286,287],{"class":67}," mkdir",[57,289,290],{"class":67}," repo\n",[57,292,293,295,298],{"class":59,"line":77},[57,294,64],{"class":63},[57,296,297],{"class":67}," cd",[57,299,290],{"class":67},[57,301,302,304],{"class":59,"line":92},[57,303,64],{"class":63},[57,305,306],{"class":67}," init-db\n",[57,308,309,312,315,318,321],{"class":59,"line":105},[57,310,311],{"class":63},"defaulting",[57,313,314],{"class":67}," to",[57,316,317],{"class":67}," private",[57,319,320],{"class":67}," storage",[57,322,323],{"class":67}," area\n",[57,325,326,328,331],{"class":59,"line":118},[57,327,64],{"class":63},[57,329,330],{"class":67}," ls",[57,332,334],{"class":333},"sYu0t"," -a\n",[57,336,337,339,342],{"class":59,"line":131},[57,338,43],{"class":333},[57,340,341],{"class":67},"  ..",[57,343,344],{"class":67},"  .dircache\n",[12,346,347,348,351,352,355],{},"Das sieht ziemlich unbekannt aus: Es gibt kein ",[40,349,350],{},".git","-Verzeichnis, aber dafür gibt es das Verzeichnis ",[40,353,354],{},".dircache",". Und wo war der private Speicherbereich?",[12,357,358],{},"Das frühe Design von Git unterschied zwischen einem „geteilten“ und einem „privaten“ Objektspeicherbereich. In diesem Objektspeicherbereich befanden sich alle Git-Objekte. Zum Beispiel deine Commits und Blobs.",[12,360,361,362,364],{},"Standardmäßig erstellte ",[40,363,231],{}," einen privaten Objektspeicherbereich, der nur für das verwaltete Verzeichnis verwendet wurde, in dem es erstellt wurde. Ein „geteilter“ Objektspeicherbereich hingegen teilte Objektinhalte über mehrere verwaltete Verzeichnisse, so dass dasselbe Objekt nicht zweimal gespeichert werden musste.",[366,367,368],"blockquote",{},[12,369,370,374,375],{},[371,372,373],"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,376,379],{"href":377,"rel":378},"https://about.gitlab.com/de-de/customers/siemens/",[],"Erfolgsstory lesen",[381,382,384],"h3",{"id":383},"einen-commit-erstellen","Einen Commit erstellen",[12,386,387,388,391],{},"Wir haben nun ein Repository, doch wie wurde damals ein Commit erstellt? Das war nicht ganz so einfach wie heute mit ",[40,389,390],{},"git add . && git commit",". Stattdessen musste man wie folgt vorgehen:",[393,394,395,401,407,410],"ol",{},[227,396,397,398,400],{},"Man musste den Index aktualisieren, indem man ",[40,399,237],{}," für jede Datei aufrief, die man hinzufügen wollte.",[227,402,403,404,406],{},"Dann schrieb man einen neuen Baum, indem man ",[40,405,243],{}," aufrief, wodurch alles herangezogen wurde, was zum Index hinzugefügt worden war.",[227,408,409],{},"Man richtete Umgebungsvariablen ein, um Git mitzuteilen, wer man ist.",[227,411,412,413,415],{},"Dann schrieb man ein Commit-Objekt, indem man ",[40,414,255],{}," aufrief.",[12,417,418],{},"Erstellen wir einen Commit im Repository:",[48,420,422],{"className":50,"code":421,"language":52,"meta":53,"style":53},"$ echo content-1 >file-a\n$ update-cache file-a\n$ echo content-2 >file-b\n$ update-cache file-b\n$ write-tree\n3f143dfb48f2d84936626e2e5402e1f10c2050fb\n$ export COMMITTER_NAME=\"Patrick Steinhardt\"\n$ export COMMITER_EMAIL=ps@pks.im\n$ echo \"commit message\" | commit-tree 3f143dfb48f2d84936626e2e5402e1f10c2050fb\nCommitting initial tree 3f143dfb48f2d84936626e2e5402e1f10c2050fb\n5f8e928066c03cebe5fd0a0cc1b93d058155b969\n",[40,423,424,441,451,465,474,481,486,496,505,523,536],{"__ignoreMap":53},[57,425,426,428,431,434,438],{"class":59,"line":60},[57,427,64],{"class":63},[57,429,430],{"class":67}," echo",[57,432,433],{"class":67}," content-1",[57,435,437],{"class":436},"sD7c4"," >",[57,439,440],{"class":67},"file-a\n",[57,442,443,445,448],{"class":59,"line":77},[57,444,64],{"class":63},[57,446,447],{"class":67}," update-cache",[57,449,450],{"class":67}," file-a\n",[57,452,453,455,457,460,462],{"class":59,"line":92},[57,454,64],{"class":63},[57,456,430],{"class":67},[57,458,459],{"class":67}," content-2",[57,461,437],{"class":436},[57,463,464],{"class":67},"file-b\n",[57,466,467,469,471],{"class":59,"line":105},[57,468,64],{"class":63},[57,470,447],{"class":67},[57,472,473],{"class":67}," file-b\n",[57,475,476,478],{"class":59,"line":118},[57,477,64],{"class":63},[57,479,480],{"class":67}," write-tree\n",[57,482,483],{"class":59,"line":131},[57,484,485],{"class":63},"3f143dfb48f2d84936626e2e5402e1f10c2050fb\n",[57,487,488,490,493],{"class":59,"line":144},[57,489,64],{"class":63},[57,491,492],{"class":67}," export",[57,494,495],{"class":67}," COMMITTER_NAME=\"Patrick Steinhardt\"\n",[57,497,498,500,502],{"class":59,"line":157},[57,499,64],{"class":63},[57,501,492],{"class":67},[57,503,504],{"class":67}," COMMITER_EMAIL=ps@pks.im\n",[57,506,507,509,511,514,517,520],{"class":59,"line":170},[57,508,64],{"class":63},[57,510,430],{"class":67},[57,512,513],{"class":67}," \"commit message\"",[57,515,516],{"class":436}," |",[57,518,519],{"class":63}," commit-tree",[57,521,522],{"class":67}," 3f143dfb48f2d84936626e2e5402e1f10c2050fb\n",[57,524,525,528,531,534],{"class":59,"line":183},[57,526,527],{"class":63},"Committing",[57,529,530],{"class":67}," initial",[57,532,533],{"class":67}," tree",[57,535,522],{"class":67},[57,537,538],{"class":59,"line":196},[57,539,540],{"class":63},"5f8e928066c03cebe5fd0a0cc1b93d058155b969\n",[12,542,543],{},"Das ist nicht gerade ergonomisch, aber es funktioniert! Werfen wir einen Blick auf den generierten Commit:",[48,545,547],{"className":50,"code":546,"language":52,"meta":53,"style":53},"$ cat-file 5f8e928066c03cebe5fd0a0cc1b93d058155b969\ntemp_git_file_rlTXtE: commit\n$ cat temp_git_file_rlTXtE\ntree 3f143dfb48f2d84936626e2e5402e1f10c2050fb\nauthor Patrick Steinhardt \u003Cps@pks.im> Wed Mar 26 13:10:16 2025\ncommitter Patrick Steinhardt \u003Cps@pks.im> Wed Mar 26 13:10:16 2025\n\ncommit message\n",[40,548,549,559,567,577,584,623,650,656],{"__ignoreMap":53},[57,550,551,553,556],{"class":59,"line":60},[57,552,64],{"class":63},[57,554,555],{"class":67}," cat-file",[57,557,558],{"class":67}," 5f8e928066c03cebe5fd0a0cc1b93d058155b969\n",[57,560,561,564],{"class":59,"line":77},[57,562,563],{"class":63},"temp_git_file_rlTXtE:",[57,565,566],{"class":67}," commit\n",[57,568,569,571,574],{"class":59,"line":92},[57,570,64],{"class":63},[57,572,573],{"class":67}," cat",[57,575,576],{"class":67}," temp_git_file_rlTXtE\n",[57,578,579,582],{"class":59,"line":105},[57,580,581],{"class":63},"tree",[57,583,522],{"class":67},[57,585,586,589,592,595,598,601,605,608,611,614,617,620],{"class":59,"line":118},[57,587,588],{"class":63},"author",[57,590,591],{"class":67}," Patrick",[57,593,594],{"class":67}," Steinhardt",[57,596,597],{"class":436}," \u003C",[57,599,600],{"class":67},"ps@pks.i",[57,602,604],{"class":603},"sgsFI","m",[57,606,607],{"class":436},">",[57,609,610],{"class":67}," Wed",[57,612,613],{"class":67}," Mar",[57,615,616],{"class":333}," 26",[57,618,619],{"class":67}," 13:10:16",[57,621,622],{"class":333}," 2025\n",[57,624,625,628,630,632,634,636,638,640,642,644,646,648],{"class":59,"line":131},[57,626,627],{"class":63},"committer",[57,629,591],{"class":67},[57,631,594],{"class":67},[57,633,597],{"class":436},[57,635,600],{"class":67},[57,637,604],{"class":603},[57,639,607],{"class":436},[57,641,610],{"class":67},[57,643,613],{"class":67},[57,645,616],{"class":333},[57,647,619],{"class":67},[57,649,622],{"class":333},[57,651,652],{"class":59,"line":144},[57,653,655],{"emptyLinePlaceholder":654},true,"\n",[57,657,658,661],{"class":59,"line":157},[57,659,660],{"class":63},"commit",[57,662,663],{"class":67}," message\n",[12,665,666,667,669],{},"Beachte, dass ",[40,668,261],{}," den Inhalt nicht direkt gedruckt hat, sondern ihn zuerst in eine temporäre Datei geschrieben hat. Der Inhalt der Datei sieht jedoch genauso aus, wie ein moderner Commit aussehen würde.",[381,671,673],{"id":672},"änderungen-vornehmen","Änderungen vornehmen",[12,675,676,677,680],{},"Wie können wir nun den Status der Dateien ermitteln? Vielleicht hast du es erraten: mit ",[40,678,679],{},"show-diff",":",[48,682,684],{"className":50,"code":683,"language":52,"meta":53,"style":53},"$ show-diff\nfile-a: ok\nfile-b: ok\n\n$ echo modified-content >file-a\n$ show-diff\n--- -   2025-03-26 13:14:53.457611094 +0100\n+++ file-a  2025-03-26 13:14:52.230085756 +0100\n@@ -1 +1 @@\n-content-1\n+modified-content\nfile-a:  46d8be14cdec97aac6a769fdbce4db340e888bf8\nfile-b: ok\n",[40,685,686,693,701,708,712,725,731,748,764,778,783,788,795],{"__ignoreMap":53},[57,687,688,690],{"class":59,"line":60},[57,689,64],{"class":63},[57,691,692],{"class":67}," show-diff\n",[57,694,695,698],{"class":59,"line":77},[57,696,697],{"class":63},"file-a:",[57,699,700],{"class":67}," ok\n",[57,702,703,706],{"class":59,"line":92},[57,704,705],{"class":63},"file-b:",[57,707,700],{"class":67},[57,709,710],{"class":59,"line":105},[57,711,655],{"emptyLinePlaceholder":654},[57,713,714,716,718,721,723],{"class":59,"line":118},[57,715,64],{"class":63},[57,717,430],{"class":67},[57,719,720],{"class":67}," modified-content",[57,722,437],{"class":436},[57,724,440],{"class":67},[57,726,727,729],{"class":59,"line":131},[57,728,64],{"class":63},[57,730,692],{"class":67},[57,732,733,736,739,742,745],{"class":59,"line":144},[57,734,735],{"class":63},"---",[57,737,738],{"class":67}," -",[57,740,741],{"class":67},"   2025-03-26",[57,743,744],{"class":67}," 13:14:53.457611094",[57,746,747],{"class":67}," +0100\n",[57,749,750,753,756,759,762],{"class":59,"line":157},[57,751,752],{"class":63},"+++",[57,754,755],{"class":67}," file-a",[57,757,758],{"class":67},"  2025-03-26",[57,760,761],{"class":67}," 13:14:52.230085756",[57,763,747],{"class":67},[57,765,766,769,772,775],{"class":59,"line":170},[57,767,768],{"class":63},"@@",[57,770,771],{"class":333}," -1",[57,773,774],{"class":67}," +1",[57,776,777],{"class":67}," @@\n",[57,779,780],{"class":59,"line":183},[57,781,782],{"class":63},"-content-1\n",[57,784,785],{"class":59,"line":196},[57,786,787],{"class":63},"+modified-content\n",[57,789,790,792],{"class":59,"line":209},[57,791,697],{"class":63},[57,793,794],{"class":67},"  46d8be14cdec97aac6a769fdbce4db340e888bf8\n",[57,796,798,800],{"class":59,"line":797},13,[57,799,705],{"class":63},[57,801,700],{"class":67},[12,803,804,805,807],{},"Lustigerweise konnte ",[40,806,679],{}," bereits diffs zwischen dem alten und neuen Zustand der geänderten Datei generieren! Git hat das jedoch erreicht, indem es einfach das Unix-Tool diff(1) ausgeführt hat.",[12,809,810],{},"Zusammenfassend lässt sich sagen, dass dies zwar alles noch recht spartanisch war, aber das Nötige bot, um den Verlauf nachzuverfolgen. Es gab aber noch viele Einschränkungen:",[224,812,813,816,819,825],{},[227,814,815],{},"Es gab noch keine einfache Möglichkeit, zwischen Commits zu wechseln.",[227,817,818],{},"Es gab keine Möglichkeit, Protokolle anzuzeigen.",[227,820,821,822,824],{},"Es gab keine Branches, Tags und nicht einmal Referenzen. Von den Benutzer(inne)n wurde erwartet, dass sie die Objekt-IDs manuell verfolgen.- Es gab keine Möglichkeit, zwei Repositories miteinander zu synchronisieren. Stattdessen wurde von den Benutzer(inne)n erwartet, dass sie „rsync(1)“ verwenden, um die ",[40,823,354],{},"-Verzeichnisse zu synchronisieren.",[227,826,827],{},"Es gab keine Möglichkeit, Merges durchzuführen.",[26,829,831],{"id":830},"git099","Git 0.99",[12,833,834],{},"Die erste Testversion von Git war Version 0.99. Diese Release kam nur zwei Monate nach dem ersten Commit auf, enthielt aber bereits 1.076 Commits. Es waren fast 50 verschiedene Entwickler(innen) beteiligt. Der häufigste Commiter war zu diesem Zeitpunkt Linus selbst, dicht gefolgt von Junio Hamano, dem aktuellen Betreuer.",[12,836,837],{},"Viele Dinge hatten sich seit dem ersten Commit geändert:",[224,839,840,843,846,855],{},[227,841,842],{},"Git begann, verschiedene Entwicklungs-Branches mithilfe von Referenzen zu verfolgen, wodurch in den meisten Fällen Objekt-IDs nicht mehr manuell nachverfolgt werden mussten.",[227,844,845],{},"Es gab ein neues Remote-Protokoll, das es zwei Repositories ermöglichte, Objekte miteinander auszutauschen.",[227,847,848,849,851,852,854],{},"Das Verzeichnis ",[40,850,354],{}," wurde in ",[40,853,350],{}," umbenannt.",[227,856,857],{},"Es wurde möglich, einzelne Dateien zusammenzuführen.",[12,859,860,861,863],{},"Die wichtigste offensichtliche Änderung war jedoch die Einführung des Top-Level-Befehls ",[40,862,268],{}," und seiner Unterbefehle. Interessanterweise wurden mit dieser Version auch die Befehle „Plumbing“ und „Porcelain“ eingeführt:",[224,865,866,869],{},[227,867,868],{},"„Plumbing“-Tools sind Low-Level-Befehle, die auf das zugrunde liegende Git-Repository zugreifen.",[227,870,871,872,879],{},"„Porcelain“-Tools sind Shell-Skripte, die die Plumbing-Befehle einpacken, um eine schönere, hochwertige Benutzeroberfläche zu bieten.Diese Aufteilung existiert auch heute noch, wie in ",[16,873,876],{"href":874,"rel":875},"https://git-scm.com/docs/git#_high_level_commands_porcelain",[],[40,877,878],{},"git(1)"," dokumentiert ist. Da die meisten Porcelain-Tools jedoch von Shell-Skripten zu C umgeschrieben wurden, verschwimmt die Trennung zwischen den beiden Kategorien mittlerweile deutlich.",[26,881,883],{"id":882},"linus-übergibt-die-leitung","Linus übergibt die Leitung",[12,885,886],{},"Linus hat Git nie gegründet, weil sein Herz für Versionskontrollsysteme schlägt, sondern weil er für die Entwicklung des Linux-Kernels eine brauchbare Alternative zu BitKeeper suchte. Daher hatte er nie vor, Git für immer zu leiten. Die Absicht war, es so lange zu leiten, bis er eine(n) vertrauenswürdige(n) Nachfolger(in) gefunden hatte.",[12,888,889,890,895],{},"Dieser Jemand war Junio Hamano. Junio stieg etwa eine Woche nach dem ersten Commit von Linus bei Git ein und hatte nach der Veröffentlichung von Git 0.99 bereits einige hundert Commits im Verlauf. Am 26. Juli 2005 machte ",[16,891,894],{"href":892,"rel":893},"https://lore.kernel.org/git/Pine.LNX.4.58.0507262004320.3227@g5.osdl.org/",[],"Linus daher Junio zum neuen Betreuer des Git-Projekts",". Linus trug zwar weiter zu Git bei, doch seine Beteiligung wurde nach und nach immer weniger – nicht verwunderlich, da er als Leiter des Linux-Projektes ziemlich beschäftigt ist.",[12,897,898],{},"Junio leitet das Git-Projekt auch heute noch.",[366,900,901],{},[12,902,903,904,908],{},"Lies unser großes ",[16,905,907],{"href":35,"rel":906},[],"Interview mit Linus Torvalds"," und erfahre noch mehr über die Geschichte von Git.",[26,910,912],{"id":911},"git10","Git 1.0",[12,914,915],{},"Die erste größere Version von Git wurde am 21. Dezember 2005 von Junio veröffentlicht. Interessanterweise gab es 34 Releases zwischen Version 0.99 und Version 1.0: 0.99.1 bis 0.99.7, 0.99.7a bis 0.99.7d, 0.99.8 bis 0.99.8g und 0.99.9 bis 0.99.9n.",[12,917,918,919,922],{},"Einer der wichtigsten Meilensteine seit Version 0.99 war wahrscheinlich der Befehl ",[40,920,921],{},"git-merge(1)",", der hinzugefügt wurde und mit dem man zwei Bäume zusammenführen kann. Dies ist eine enorme Veränderung zu vorher, wo man im Grunde die Zusammenführungen Datei für Datei skripten musste.",[381,924,926],{"id":925},"remotes","Remotes",[12,928,929],{},"Eine weitere wesentliche Änderung war die Einführung der Kurzschreibweise für Remote-Repositories. Während Git bereits wusste, wie man mit Remote-Repositories kommuniziert, mussten Benutzer(innen) jedes Mal die URL angeben, von der sie abrufen wollten, um Änderungen daran vorzunehmen. Dies war ziemlich unpraktisch für die Benutzer(innen), da sie im Normalfall immer wieder mit demselben Remote interagieren wollten.",[12,931,932,933,936,937,940,941,945],{},"Du weißt vielleicht, wie Remotes jetzt funktionieren, aber der Vorgang war damals noch deutlich anders. Es gab keinen ",[40,934,935],{},"git-remote(1)","-Befehl, mit dem man seine Remotes verwalten konnte. Remotes wurden nicht einmal in der Datei ",[40,938,939],{},".git/config"," gespeichert. Als Remotes in Version 0.99.2 eingeführt wurden, ",[942,943,944],"em",{},"gab"," es in Git nicht einmal Konfigurationsdateien.",[12,947,948,949,952],{},"Stattdessen musste man Remotes konfigurieren, indem man eine Datei in das Verzeichnis ",[40,950,951],{},".git/branches"," schrieb, was dem heutigen Empfinden nach gegen jegliche Intuition geht. Aber der Mechanismus funktioniert auch heute noch:",[48,954,956],{"className":50,"code":955,"language":52,"meta":53,"style":53},"$ git init repo --\nInitialized empty Git repository in /tmp/repo/.git/\n$ cd repo\n$ mkdir .git/branches\n$ echo https://gitlab.com/git-scm/git.git >.git/branches/origin\n$ git fetch origin refs/heads/master\n",[40,957,958,973,993,1001,1010,1024],{"__ignoreMap":53},[57,959,960,962,964,967,970],{"class":59,"line":60},[57,961,64],{"class":63},[57,963,68],{"class":67},[57,965,966],{"class":67}," init",[57,968,969],{"class":67}," repo",[57,971,972],{"class":333}," --\n",[57,974,975,978,981,984,987,990],{"class":59,"line":77},[57,976,977],{"class":63},"Initialized",[57,979,980],{"class":67}," empty",[57,982,983],{"class":67}," Git",[57,985,986],{"class":67}," repository",[57,988,989],{"class":67}," in",[57,991,992],{"class":67}," /tmp/repo/.git/\n",[57,994,995,997,999],{"class":59,"line":92},[57,996,64],{"class":63},[57,998,297],{"class":67},[57,1000,290],{"class":67},[57,1002,1003,1005,1007],{"class":59,"line":105},[57,1004,64],{"class":63},[57,1006,287],{"class":67},[57,1008,1009],{"class":67}," .git/branches\n",[57,1011,1012,1014,1016,1019,1021],{"class":59,"line":118},[57,1013,64],{"class":63},[57,1015,430],{"class":67},[57,1017,1018],{"class":67}," https://gitlab.com/git-scm/git.git",[57,1020,437],{"class":436},[57,1022,1023],{"class":67},".git/branches/origin\n",[57,1025,1026,1028,1030,1033,1036],{"class":59,"line":131},[57,1027,64],{"class":63},[57,1029,68],{"class":67},[57,1031,1032],{"class":67}," fetch",[57,1034,1035],{"class":67}," origin",[57,1037,1038],{"class":67}," refs/heads/master\n",[12,1040,1041],{},"Aber das ist noch nicht alles! Das Verzeichnis wurde bald darauf mit der Git-Version 0.99.5 in „remotes“ umbenannt, also gibt es in einem modernen Git-Client insgesamt drei verschiedene Möglichkeiten, Remotes zu konfigurieren.",[12,1043,1044,1045,1047,1048,1051],{},"Die meisten von euch haben wahrscheinlich weder ",[40,1046,951],{}," noch ",[40,1049,1050],{},".git/remotes"," verwendet, denn beide Mechanismen gelten seit 2005 bzw. 2011 als veraltet. Darüber hinaus werden diese Verzeichnisse in Git 3.0 endgültig entfernt.",[26,1053,1055],{"id":1054},"git-branding","Git-Branding",[12,1057,1058,1059,1062],{},"Im Jahr 2007 wurde das erste Git-Logo erstellt. Ob man das schon als Logo bezeichnen kann, ist fraglich, da es nur aus drei roten Minuszeichen über drei grünen Pluszeichen bestand. Dies sollte widerspiegeln, wie die Ausgabe von ",[40,1060,1061],{},"git diff"," aussah:",[12,1064,1065],{},[1066,1067],"img",{"alt":1068,"src":1069},"Drei rote Minuszeichen über drei grünen Pluszeichen, die die Ausgabe von git diff widerspiegeln","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097388/Blog/Content%20Images/Blog/Content%20Images/image3_aHR0cHM6_1750097387927.png",[12,1071,1072,1073,1078],{},"Etwas später, im Jahr 2008, wurde die Website ",[16,1074,1077],{"href":1075,"rel":1076},"https://git-scm.com",[],"git-scm.com"," veröffentlicht:",[12,1080,1081],{},[1066,1082],{"alt":1083,"src":1084},"Startseite für git-scm.com im Jahr 2006","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097388/Blog/Content%20Images/Blog/Content%20Images/image4_aHR0cHM6_1750097387930.png",[12,1086,1087,1088,1093],{},"Im Jahr 2012 wurde die Git-Webseite von Scott Chacon und Jason Long ",[16,1089,1092],{"href":1090,"rel":1091},"https://lore.kernel.org/git/CAP2yMaJy=1c3b4F72h6jL_454+0ydEQNXYiC6E-ZeQQgE0PcVA@mail.gmail.com/",[],"überarbeitet",". Sie sieht ziemlich ähnlich aus wie heute:",[12,1095,1096],{},[1066,1097],{"alt":1098,"src":1099},"Die Git-Website wurde 2012 überarbeitet","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097388/Blog/Content%20Images/Blog/Content%20Images/image2_aHR0cHM6_1750097387932.png",[12,1101,1102],{},"Dieses neue Design der Website weist das neue rot-orangefarbene Logo von Jason Long auf, das auch derzeit verwendet wird:",[12,1104,1105],{},[1066,1106],{"alt":1107,"src":1108},"Git-Logo","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097388/Blog/Content%20Images/Blog/Content%20Images/image1_aHR0cHM6_1750097387934.png",[26,1110,1112],{"id":1111},"git20","Git 2.0",[12,1114,1115],{},"Git begann schon in der Version 1.0, dem modernen Git sehr ähnlich zu sehen. Daher folgt nun der große historische Sprung zu Git 2.0. Diese Version wurde etwa 10 Jahre nach Git 1.0 veröffentlicht und war die erste Version, die absichtlich abwärtskompatible Änderungen in zentralen Workflows enthielt.",[381,1117,1119,1120],{"id":1118},"standardverhalten-von-git-push1","Standardverhalten von ",[40,1121,1122],{},"git-push(1)",[12,1124,1125,1126,43],{},"Die Änderung, die wohl die meiste Verwirrung in dieser Version verursachte, war das geänderte Standardverhalten von ",[40,1127,1122],{},[12,1129,1130],{},"Es gibt ein paar verschiedene Aktionen, die Git ausführen kann, wenn du in ein Remote-Repository pusht und nicht genau angibst, was genau du pushen möchtest:",[224,1132,1133,1136,1139,1142],{},[227,1134,1135],{},"Git kann verweigern, irgendetwas zu tun, und bittet dich um weitere Informationen darüber, was genau du pushen möchtest.",[227,1137,1138],{},"Git kann den aktuell ausgecheckten Branch pushen.",[227,1140,1141],{},"Git kann den aktuell ausgecheckten Branch pushen, aber nur, wenn es weiß, dass es ein Äquivalent auf der Remote-Seite gibt.",[227,1143,1144],{},"Git kann alle deine Branches pushen, die ein Äquivalent auf der Remote-Seite haben.",[12,1146,1147],{},"Das Verhalten des modernen Git ist die sogenannte „einfache“ Strategie, also die dritte der oben angeführten Optionen. Vor Git 2.0 war das Standardverhalten jedoch die „Matching“-Strategie, also die letzte der genannten Optionen.",[12,1149,1150],{},"Die „Matching“-Strategie war deutlich riskanter. Man musste vor dem Pushen immer sicherstellen, dass es in Ordnung war, alle lokalen Branches zu pushen, die ein Äquivalent auf der Remote-Seite haben. Andernfalls hätte man möglicherweise unbeabsichtigt Änderungen gepusht. Daher wurde beschlossen, die Strategie auf die „einfache“ Strategie zu ändern, um das Risiko zu verringern und Einsteiger(inne)n die ersten Schritte mit Git zu erleichtern.",[381,1152,1154],{"id":1153},"git-add1",[40,1155,1156],{},"git-add(1)",[12,1158,1159,1160,1162,1163,1165,1166,1169,1170,1172],{},"Eine weitere große Änderung war das Standardverhalten von ",[40,1161,1156],{}," im Hinblick auf nachverfolgte Dateien, die gelöscht wurden. Vor Git 2.0 hätte ",[40,1164,1156],{}," gelöschte Dateien nicht automatisch gestaged, sondern du hättest jede gelöschte Datei manuell mit ",[40,1167,1168],{},"git-rm(1)"," hinzufügen müssen, damit sie Teil des Commits ist. Mit Git 2.0 wurde dieses Verhalten geändert, sodass ",[40,1171,1156],{}," auch gelöschte Dateien zum Index hinzufügt.",[26,1174,1176],{"id":1175},"wir-feiern-die-git-community","Wir feiern die Git-Community",[12,1178,1179],{},"Ich werde dich nicht mit Details darüber langweilen, wie Git heute funktioniert – du nutzt es wahrscheinlich ohnehin täglich, und wenn nicht, gibt es viele tolle Tutorials, die dir beim Einstieg helfen. Stattdessen wollen wir die Git-Community hochleben lassen – sie ist es nämlich, dank der Git auch 20 Jahre später noch wunderbar funktioniert.",[12,1181,1182],{},"Im Laufe der Zeit hat Git:",[224,1184,1185,1188,1191],{},[227,1186,1187],{},"56 721 Commits seit der Veröffentlichung von Git 2.49 erhalten.",[227,1189,1190],{},"Beiträge von mehr als 2 000 verschiedenen Personen erhalten.",[227,1192,1193,1194,1199,1200,1205],{},"60 Hauptversionen veröffentlicht.Das Git-Projekt hat auch einen stetigen Zustrom neuer Mitwirkender durch die Teilnahme am ",[16,1195,1198],{"href":1196,"rel":1197},"https://summerofcode.withgoogle.com/",[],"Google Summer of Code"," und ",[16,1201,1204],{"href":1202,"rel":1203},"https://www.outreachy.org/",[],"Outreachy"," erfahren. Neue Mitwirkende wie diese werden dafür sorgen, dass das Git-Projekt auch langfristig weitergeführt wird.",[12,1207,1208],{},"Daher möchte ich allen Mitwirkenden von Herzen danken. Es sind eure Beiträge, die Git erst möglich gemacht haben.",[26,1210,1212],{"id":1211},"ein-blick-in-die-zukunft","Ein Blick in die Zukunft",[12,1214,1215],{},"Es steht außer Frage, dass Git den Wettlauf um das beste Versionskontrollsystem gewonnen hat. Es hat einen bedeutenden Marktanteil, und es ist nicht einfach, Open-Source-Projekte zu finden, die ein anderes Versionskontrollsystem als Git verwenden. Git hat also eindeutig vieles richtig gemacht.",[12,1217,1218],{},"Dennoch ist die Entwicklung nicht stillgestanden und auch in Zukunft werden viele Herausforderungen auf Git warten. Einerseits sind das technische Herausforderungen:",[224,1220,1221,1224,1227],{},[227,1222,1223],{},"Modernisierung einer alternden Codebasis",[227,1225,1226],{},"Skalierung mit der ständig wachsenden Größe von Monorepos",[227,1228,1229],{},"Bessere Handhabung großer Binärdateien",[12,1231,1232],{},"Andererseits tauchen Probleme sozialer Art auf:",[224,1234,1235,1238],{},[227,1236,1237],{},"Verbesserung der Benutzerfreundlichkeit von Git",[227,1239,1240],{},"Förderung der Git-Community, damit das Projekt langfristig gesund bleibt",[12,1242,1243],{},"Es gibt immer noch viel zu tun und wir bei GitLab sind stolz darauf, Teil dieser Bemühungen zu sein. Gemeinsam können wir sicherstellen, dass Git auch in den nächsten 20 Jahren ein so fantastisches Versionskontrollsystem bleibt.",[26,1245,1247],{"id":1246},"erfahre-mehr-über-git","Erfahre mehr über Git",[224,1249,1250,1256,1263,1270],{},[227,1251,1252],{},[16,1253,1255],{"href":35,"rel":1254},[],"Wir feiern das 20-jährige Git-Jubiläum mit dessen Erfinder Linus Torvalds",[227,1257,1258],{},[16,1259,1262],{"href":1260,"rel":1261},"https://about.gitlab.com/de-de/blog/whats-new-in-git-2-49-0/",[],"Was gibt es Neues in Git 2.49.0?",[227,1264,1265],{},[16,1266,1269],{"href":1267,"rel":1268},"https://about.gitlab.com/de-de/blog/whats-new-in-git-2-48-0/",[],"Was gibt es Neues in Git 2.48.0?",[227,1271,1272],{},[16,1273,1276],{"href":1274,"rel":1275},"https://about.gitlab.com/de-de/blog/a-beginners-guide-to-the-git-reftable-format/",[],"Der Anfängerleitfaden zum „reftable“-Format von Git",[1278,1279,1280],"style",{},"html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}",{"title":53,"searchDepth":77,"depth":77,"links":1282},[1283,1287,1288,1289,1292,1293,1298,1299,1300],{"id":28,"depth":77,"text":29,"children":1284},[1285,1286],{"id":383,"depth":92,"text":384},{"id":672,"depth":92,"text":673},{"id":830,"depth":77,"text":831},{"id":882,"depth":77,"text":883},{"id":911,"depth":77,"text":912,"children":1290},[1291],{"id":925,"depth":92,"text":926},{"id":1054,"depth":77,"text":1055},{"id":1111,"depth":77,"text":1112,"children":1294},[1295,1297],{"id":1118,"depth":92,"text":1296},"Standardverhalten von git-push(1)",{"id":1153,"depth":92,"text":1156},{"id":1175,"depth":77,"text":1176},{"id":1211,"depth":77,"text":1212},{"id":1246,"depth":77,"text":1247},"open-source","2025-04-14","Begib dich mit uns auf die Spuren des ersten Commits, die einzigartigen Aspekte der frühen Releases und die Verwirrung, die ein Update des Standardverhaltens von git-push(1) ausgelöst hat.","md",null,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097380/Blog/Hero%20Images/Blog/Hero%20Images/git-20-years-opt2_TWNsNk8KH43b3jP0KLD0U_1750097380123.png",{},"/de-de/blog/journey-through-gits-20-year-history",{"ogTitle":5,"ogImage":1306,"ogDescription":1303,"ogSiteName":1310,"noIndex":1311,"ogType":1312,"ogUrl":1313,"title":5,"canonicalUrls":1313,"description":1303},"https://about.gitlab.com",false,"article","https://about.gitlab.com/blog/journey-through-gits-20-year-history","journey-through-gits-20-year-history","de-de/blog/journey-through-gits-20-year-history",[1317,268],"open source","BlogPost","2025-05-20","9icvpSYeTYsPy31FOaROwR1kWBDfQe1MXuHWUVLGI1w",{"logo":1322,"freeTrial":1327,"sales":1332,"login":1337,"items":1342,"search":1671,"minimal":1705,"duo":1723,"switchNav":1732,"pricingDeployment":1743},{"config":1323},{"href":1324,"dataGaName":1325,"dataGaLocation":1326},"/de-de/","gitlab logo","header",{"text":1328,"config":1329},"Kostenlose Testversion anfordern",{"href":1330,"dataGaName":1331,"dataGaLocation":1326},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/de-de&glm_content=default-saas-trial/","free trial",{"text":1333,"config":1334},"Demo anfordern",{"href":1335,"dataGaName":1336,"dataGaLocation":1326},"/de-de/sales/?contact-topic=request-demo","sales",{"text":1338,"config":1339},"Anmelden",{"href":1340,"dataGaName":1341,"dataGaLocation":1326},"https://gitlab.com/users/sign_in/","sign in",[1343,1372,1474,1479,1593,1649],{"text":1344,"config":1345,"menu":1347},"Plattform",{"dataNavLevelOne":1346},"platform",{"type":1348,"columns":1349},"cards",[1350,1356,1364],{"title":1344,"description":1351,"link":1352},"Die intelligente Orchestrierungsplattform für DevSecOps",{"text":1353,"config":1354},"Die Plattform erkunden",{"href":1355,"dataGaName":1346,"dataGaLocation":1326},"/de-de/platform/",{"title":1357,"description":1358,"link":1359},"GitLab Duo Agent Platform","Agentische KI für den gesamten Software-Lebenszyklus",{"text":1360,"config":1361},"Lerne GitLab Duo kennen",{"href":1362,"dataGaName":1363,"dataGaLocation":1326},"/de-de/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":1365,"description":1366,"link":1367},"Warum GitLab?","Erfahre, warum sich Unternehmen für GitLab entscheiden",{"text":1368,"config":1369},"Mehr erfahren",{"href":1370,"dataGaName":1371,"dataGaLocation":1326},"/de-de/why-gitlab/","why gitlab",{"text":1373,"left":654,"config":1374,"menu":1376},"Produkt",{"dataNavLevelOne":1375},"solutions",{"type":1377,"link":1378,"columns":1382,"feature":1453},"lists",{"text":1379,"config":1380},"Alle Lösungen anzeigen",{"href":1381,"dataGaName":1375,"dataGaLocation":1326},"/de-de/solutions/",[1383,1408,1431],{"title":1384,"description":1385,"link":1386,"items":1391},"Automatisierung","CI/CD und Automatisierung zur Beschleunigung der Bereitstellung",{"config":1387},{"icon":1388,"href":1389,"dataGaName":1390,"dataGaLocation":1326},"AutomatedCodeAlt","/de-de/solutions/delivery-automation/","automated software delivery",[1392,1396,1399,1404],{"text":1393,"config":1394},"CI/CD",{"href":1395,"dataGaLocation":1326,"dataGaName":1393},"/de-de/solutions/continuous-integration/",{"text":1357,"config":1397},{"href":1362,"dataGaLocation":1326,"dataGaName":1398},"gitlab duo agent platform - product menu",{"text":1400,"config":1401},"Quellcodeverwaltung",{"href":1402,"dataGaLocation":1326,"dataGaName":1403},"/de-de/solutions/source-code-management/","Source Code Management",{"text":1405,"config":1406},"Automatische Softwarebereitstellung",{"href":1389,"dataGaLocation":1326,"dataGaName":1407},"Automated software delivery",{"title":1409,"description":1410,"link":1411,"items":1416},"Sicherheit","Entwickle Code schneller ohne Abstriche bei der Sicherheit",{"config":1412},{"href":1413,"dataGaName":1414,"dataGaLocation":1326,"icon":1415},"/de-de/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[1417,1421,1426],{"text":1418,"config":1419},"Anwendungssicherheitstests",{"href":1413,"dataGaName":1420,"dataGaLocation":1326},"Application security testing",{"text":1422,"config":1423},"Schutz der Software-Lieferkette",{"href":1424,"dataGaLocation":1326,"dataGaName":1425},"/de-de/solutions/supply-chain/","Software supply chain security",{"text":1427,"config":1428},"Software-Compliance",{"href":1429,"dataGaName":1430,"dataGaLocation":1326},"/de-de/solutions/software-compliance/","software compliance",{"title":1432,"link":1433,"items":1438},"Messung",{"config":1434},{"icon":1435,"href":1436,"dataGaName":1437,"dataGaLocation":1326},"DigitalTransformation","/de-de/solutions/visibility-measurement/","visibility and measurement",[1439,1443,1448],{"text":1440,"config":1441},"Sichtbarkeit und Messung",{"href":1436,"dataGaLocation":1326,"dataGaName":1442},"Visibility and Measurement",{"text":1444,"config":1445},"Wertstrommanagement",{"href":1446,"dataGaLocation":1326,"dataGaName":1447},"/de-de/solutions/value-stream-management/","Value Stream Management",{"text":1449,"config":1450},"Analysen und Einblicke",{"href":1451,"dataGaLocation":1326,"dataGaName":1452},"/de-de/solutions/analytics-and-insights/","Analytics and insights",{"title":1454,"type":1377,"items":1455},"GitLab für",[1456,1462,1468],{"text":1457,"config":1458},"Enterprise",{"icon":1459,"href":1460,"dataGaLocation":1326,"dataGaName":1461},"Building","/de-de/enterprise/","enterprise",{"text":1463,"config":1464},"Kleinunternehmen",{"icon":1465,"href":1466,"dataGaLocation":1326,"dataGaName":1467},"Work","/de-de/small-business/","small business",{"text":1469,"config":1470},"Öffentlicher Sektor",{"icon":1471,"href":1472,"dataGaLocation":1326,"dataGaName":1473},"Organization","/de-de/solutions/public-sector/","public sector",{"text":1475,"config":1476},"Preise",{"href":1477,"dataGaName":1478,"dataGaLocation":1326,"dataNavLevelOne":1478},"/de-de/pricing/","pricing",{"text":1480,"config":1481,"menu":1483},"Ressourcen",{"dataNavLevelOne":1482},"resources",{"type":1377,"link":1484,"columns":1488,"feature":1582},{"text":1485,"config":1486},"Alle Ressourcen anzeigen",{"href":1487,"dataGaName":1482,"dataGaLocation":1326},"/de-de/resources/",[1489,1522,1549],{"title":1490,"items":1491},"Erste Schritte",[1492,1497,1502,1507,1512,1517],{"text":1493,"config":1494},"Installieren",{"href":1495,"dataGaName":1496,"dataGaLocation":1326},"/de-de/install/","install",{"text":1498,"config":1499},"Kurzanleitungen",{"href":1500,"dataGaName":1501,"dataGaLocation":1326},"/de-de/get-started/","quick setup checklists",{"text":1503,"config":1504},"Lernen",{"href":1505,"dataGaLocation":1326,"dataGaName":1506},"https://university.gitlab.com/","learn",{"text":1508,"config":1509},"Produktdokumentation",{"href":1510,"dataGaName":1511,"dataGaLocation":1326},"https://docs.gitlab.com/","product documentation",{"text":1513,"config":1514},"Best-Practice-Videos",{"href":1515,"dataGaName":1516,"dataGaLocation":1326},"/de-de/getting-started-videos/","best practice videos",{"text":1518,"config":1519},"Integrationen",{"href":1520,"dataGaName":1521,"dataGaLocation":1326},"/de-de/integrations/","integrations",{"title":1523,"items":1524},"Entdecken",[1525,1530,1535,1540,1544],{"text":1526,"config":1527},"Kundenerfolge",{"href":1528,"dataGaName":1529,"dataGaLocation":1326},"/de-de/customers/","customer success stories",{"text":1531,"config":1532},"Blog",{"href":1533,"dataGaName":1534,"dataGaLocation":1326},"/de-de/blog/","blog",{"text":1536,"config":1537},"Demo-Hub",{"href":1538,"dataGaName":1539,"dataGaLocation":1326},"/de-de/demo-hub/","demo hub",{"text":1541,"config":1542},"The Source",{"href":1543,"dataGaName":1534,"dataGaLocation":1326},"/de-de/the-source/",{"text":1545,"config":1546},"Remote",{"href":1547,"dataGaName":1548,"dataGaLocation":1326},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":1550,"items":1551},"Vernetzen",[1552,1557,1562,1567,1572,1577],{"text":1553,"config":1554},"GitLab-Services",{"href":1555,"dataGaName":1556,"dataGaLocation":1326},"/de-de/services/","services",{"text":1558,"config":1559},"Beitragen",{"href":1560,"dataGaName":1561,"dataGaLocation":1326},"https://contributors.gitlab.com","contribute",{"text":1563,"config":1564},"Community",{"href":1565,"dataGaName":1566,"dataGaLocation":1326},"/community/","community",{"text":1568,"config":1569},"Forum",{"href":1570,"dataGaName":1571,"dataGaLocation":1326},"https://forum.gitlab.com/","forum",{"text":1573,"config":1574},"Veranstaltungen",{"href":1575,"dataGaName":1576,"dataGaLocation":1326},"/events/","events",{"text":1578,"config":1579},"Partner",{"href":1580,"dataGaName":1581,"dataGaLocation":1326},"/de-de/partners/","partners",{"config":1583,"title":1586,"text":1587,"link":1588},{"background":1584,"textColor":1585},"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":1589,"config":1590},"Aktuelle Nachrichten",{"href":1591,"dataGaName":1592,"dataGaLocation":1326},"/de-de/whats-new/","whats new",{"text":1594,"config":1595,"menu":1597},"Unternehmen",{"dataNavLevelOne":1596},"company",{"type":1377,"columns":1598},[1599],{"items":1600},[1601,1606,1612,1614,1619,1624,1629,1634,1639,1644],{"text":1602,"config":1603},"Über",{"href":1604,"dataGaName":1605,"dataGaLocation":1326},"/de-de/company/","about",{"text":1607,"config":1608,"footerGa":1611},"Karriere",{"href":1609,"dataGaName":1610,"dataGaLocation":1326},"/jobs/","jobs",{"dataGaName":1610},{"text":1573,"config":1613},{"href":1575,"dataGaName":1576,"dataGaLocation":1326},{"text":1615,"config":1616},"Geschäftsführung",{"href":1617,"dataGaName":1618,"dataGaLocation":1326},"/company/team/e-group/","leadership",{"text":1620,"config":1621},"Handbuch",{"href":1622,"dataGaName":1623,"dataGaLocation":1326},"https://handbook.gitlab.com/","handbook",{"text":1625,"config":1626},"Investor Relations",{"href":1627,"dataGaName":1628,"dataGaLocation":1326},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":1630,"config":1631},"Trust Center",{"href":1632,"dataGaName":1633,"dataGaLocation":1326},"/de-de/security/","trust center",{"text":1635,"config":1636},"AI Transparency Center",{"href":1637,"dataGaName":1638,"dataGaLocation":1326},"/de-de/ai-transparency-center/","ai transparency center",{"text":1640,"config":1641},"Newsletter",{"href":1642,"dataGaName":1643,"dataGaLocation":1326},"/company/contact/#contact-forms","newsletter",{"text":1645,"config":1646},"Presse",{"href":1647,"dataGaName":1648,"dataGaLocation":1326},"/press/","press",{"text":1650,"config":1651,"menu":1652},"Kontakt",{"dataNavLevelOne":1596},{"type":1377,"columns":1653},[1654],{"items":1655},[1656,1661,1666],{"text":1657,"config":1658},"Vertrieb kontaktieren",{"href":1659,"dataGaName":1660,"dataGaLocation":1326},"/de-de/sales/","talk to sales",{"text":1662,"config":1663},"Support-Portal",{"href":1664,"dataGaName":1665,"dataGaLocation":1326},"https://support.gitlab.com/hc/en-us","support portal",{"text":1667,"config":1668},"Kundenportal",{"href":1669,"dataGaName":1670,"dataGaLocation":1326},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":1672,"login":1673,"suggestions":1680},"Schließen",{"text":1674,"link":1675},"Um Repositorys und Projekte zu durchsuchen, melde dich an bei",{"text":1676,"config":1677},"gitlab.com",{"href":1340,"dataGaName":1678,"dataGaLocation":1679},"search login","search",{"text":1681,"default":1682},"Vorschläge",[1683,1685,1690,1692,1697,1702],{"text":1357,"config":1684},{"href":1362,"dataGaName":1357,"dataGaLocation":1679},{"text":1686,"config":1687},"Codevorschläge (KI)",{"href":1688,"dataGaName":1689,"dataGaLocation":1679},"/de-de/solutions/code-suggestions/","Code Suggestions (AI)",{"text":1393,"config":1691},{"href":1395,"dataGaName":1393,"dataGaLocation":1679},{"text":1693,"config":1694},"GitLab auf AWS",{"href":1695,"dataGaName":1696,"dataGaLocation":1679},"/de-de/partners/technology-partners/aws/","GitLab on AWS",{"text":1698,"config":1699},"GitLab auf Google Cloud",{"href":1700,"dataGaName":1701,"dataGaLocation":1679},"/de-de/partners/technology-partners/google-cloud-platform/","GitLab on Google Cloud",{"text":1365,"config":1703},{"href":1370,"dataGaName":1704,"dataGaLocation":1679},"Why GitLab?",{"freeTrial":1706,"mobileIcon":1711,"desktopIcon":1716,"secondaryButton":1719},{"text":1707,"config":1708},"Kostenlos testen",{"href":1709,"dataGaName":1331,"dataGaLocation":1710},"https://gitlab.com/-/trials/new/","nav",{"altText":1712,"config":1713},"GitLab-Symbol",{"src":1714,"dataGaName":1715,"dataGaLocation":1710},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":1712,"config":1717},{"src":1718,"dataGaName":1715,"dataGaLocation":1710},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":1490,"config":1720},{"href":1721,"dataGaName":1722,"dataGaLocation":1710},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/de-de/get-started/","get started",{"freeTrial":1724,"mobileIcon":1728,"desktopIcon":1730},{"text":1725,"config":1726},"Mehr über GitLab Duo erfahren",{"href":1362,"dataGaName":1727,"dataGaLocation":1710},"gitlab duo",{"altText":1712,"config":1729},{"src":1714,"dataGaName":1715,"dataGaLocation":1710},{"altText":1712,"config":1731},{"src":1718,"dataGaName":1715,"dataGaLocation":1710},{"button":1733,"mobileIcon":1738,"desktopIcon":1740},{"text":1734,"config":1735},"/Option",{"href":1736,"dataGaName":1737,"dataGaLocation":1710},"#contact","switch",{"altText":1712,"config":1739},{"src":1714,"dataGaName":1715,"dataGaLocation":1710},{"altText":1712,"config":1741},{"src":1742,"dataGaName":1715,"dataGaLocation":1710},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":1744,"mobileIcon":1749,"desktopIcon":1751},{"text":1745,"config":1746},"Zurück zur Preisübersicht",{"href":1477,"dataGaName":1747,"dataGaLocation":1710,"icon":1748},"back to pricing","GoBack",{"altText":1712,"config":1750},{"src":1714,"dataGaName":1715,"dataGaLocation":1710},{"altText":1712,"config":1752},{"src":1718,"dataGaName":1715,"dataGaLocation":1710},{"title":1754,"button":1755,"config":1759},"GitLab Orbit ist da: die Kontextebene für KI-Agenten",{"text":1368,"config":1756},{"href":1757,"dataGaName":1758,"dataGaLocation":1326},"/de-de/gitlab-orbit/","orbit",{"layout":1760,"disabled":1311},"release",{"data":1762},{"text":1763,"source":1764,"edit":1770,"contribute":1775,"config":1780,"items":1785,"minimal":1991},"Git ist eine Marke von Software Freedom Conservancy und unsere Verwendung von „GitLab“ erfolgt unter Lizenz.",{"text":1765,"config":1766},"Quelltext der Seite anzeigen",{"href":1767,"dataGaName":1768,"dataGaLocation":1769},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":1771,"config":1772},"Diese Seite bearbeiten",{"href":1773,"dataGaName":1774,"dataGaLocation":1769},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":1776,"config":1777},"Beteilige dich",{"href":1778,"dataGaName":1779,"dataGaLocation":1769},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":1781,"facebook":1782,"youtube":1783,"linkedin":1784},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[1786,1831,1884,1926,1958],{"title":1475,"links":1787,"subMenu":1802},[1788,1792,1797],{"text":1789,"config":1790},"Tarife anzeigen",{"href":1477,"dataGaName":1791,"dataGaLocation":1769},"view plans",{"text":1793,"config":1794},"Vorteile von Premium",{"href":1795,"dataGaName":1796,"dataGaLocation":1769},"/de-de/pricing/premium/","why premium",{"text":1798,"config":1799},"Vorteile von Ultimate",{"href":1800,"dataGaName":1801,"dataGaLocation":1769},"/de-de/pricing/ultimate/","why ultimate",[1803],{"title":1650,"links":1804},[1805,1807,1809,1811,1816,1821,1826],{"text":1657,"config":1806},{"href":1659,"dataGaName":1336,"dataGaLocation":1769},{"text":1662,"config":1808},{"href":1664,"dataGaName":1665,"dataGaLocation":1769},{"text":1667,"config":1810},{"href":1669,"dataGaName":1670,"dataGaLocation":1769},{"text":1812,"config":1813},"Status",{"href":1814,"dataGaName":1815,"dataGaLocation":1769},"https://status.gitlab.com/","status",{"text":1817,"config":1818},"Nutzungsbedingungen",{"href":1819,"dataGaName":1820,"dataGaLocation":1769},"/terms/","terms of use",{"text":1822,"config":1823},"Datenschutzerklärung",{"href":1824,"dataGaName":1825,"dataGaLocation":1769},"/de-de/privacy/","privacy statement",{"text":1827,"config":1828},"Cookie-Einstellungen",{"dataGaName":1829,"dataGaLocation":1769,"id":1830,"isOneTrustButton":654},"cookie preferences","ot-sdk-btn",{"title":1373,"links":1832,"subMenu":1841},[1833,1837],{"text":1834,"config":1835},"DevSecOps-Plattform",{"href":1355,"dataGaName":1836,"dataGaLocation":1769},"devsecops platform",{"text":1838,"config":1839},"KI-unterstützte Entwicklung",{"href":1362,"dataGaName":1840,"dataGaLocation":1769},"ai-assisted development",[1842],{"title":1843,"links":1844},"Themen",[1845,1849,1854,1859,1864,1869,1874,1879],{"text":1393,"config":1846},{"href":1847,"dataGaName":1848,"dataGaLocation":1769},"/de-de/topics/ci-cd/","cicd",{"text":1850,"config":1851},"GitOps",{"href":1852,"dataGaName":1853,"dataGaLocation":1769},"/de-de/topics/gitops/","gitops",{"text":1855,"config":1856},"DevOps",{"href":1857,"dataGaName":1858,"dataGaLocation":1769},"/de-de/topics/devops/","devops",{"text":1860,"config":1861},"Versionskontrolle",{"href":1862,"dataGaName":1863,"dataGaLocation":1769},"/de-de/topics/version-control/","version control",{"text":1865,"config":1866},"DevSecOps",{"href":1867,"dataGaName":1868,"dataGaLocation":1769},"/de-de/topics/devsecops/","devsecops",{"text":1870,"config":1871},"Cloud-nativ",{"href":1872,"dataGaName":1873,"dataGaLocation":1769},"/de-de/topics/cloud-native/","cloud native",{"text":1875,"config":1876},"KI für das Programmieren",{"href":1877,"dataGaName":1878,"dataGaLocation":1769},"/de-de/topics/devops/ai-for-coding/","ai for coding",{"text":1880,"config":1881},"Agentische KI",{"href":1882,"dataGaName":1883,"dataGaLocation":1769},"/de-de/topics/agentic-ai/","agentic ai",{"title":1885,"links":1886},"Lösungen",[1887,1890,1892,1897,1901,1904,1907,1910,1912,1914,1916,1921],{"text":1418,"config":1888},{"href":1413,"dataGaName":1889,"dataGaLocation":1769},"Application Security Testing",{"text":1405,"config":1891},{"href":1389,"dataGaName":1390,"dataGaLocation":1769},{"text":1893,"config":1894},"Agile Entwicklung",{"href":1895,"dataGaName":1896,"dataGaLocation":1769},"/de-de/solutions/agile-delivery/","agile delivery",{"text":1898,"config":1899},"SCM",{"href":1402,"dataGaName":1900,"dataGaLocation":1769},"source code management",{"text":1393,"config":1902},{"href":1395,"dataGaName":1903,"dataGaLocation":1769},"continuous integration & delivery",{"text":1444,"config":1905},{"href":1446,"dataGaName":1906,"dataGaLocation":1769},"value stream management",{"text":1850,"config":1908},{"href":1909,"dataGaName":1853,"dataGaLocation":1769},"/de-de/solutions/gitops/",{"text":1457,"config":1911},{"href":1460,"dataGaName":1461,"dataGaLocation":1769},{"text":1463,"config":1913},{"href":1466,"dataGaName":1467,"dataGaLocation":1769},{"text":1469,"config":1915},{"href":1472,"dataGaName":1473,"dataGaLocation":1769},{"text":1917,"config":1918},"Bildungswesen",{"href":1919,"dataGaName":1920,"dataGaLocation":1769},"/de-de/solutions/education/","education",{"text":1922,"config":1923},"Finanzdienstleistungen",{"href":1924,"dataGaName":1925,"dataGaLocation":1769},"/de-de/solutions/finance/","financial services",{"title":1480,"links":1927},[1928,1930,1932,1934,1937,1939,1942,1944,1946,1948,1950,1952,1954,1956],{"text":1493,"config":1929},{"href":1495,"dataGaName":1496,"dataGaLocation":1769},{"text":1498,"config":1931},{"href":1500,"dataGaName":1501,"dataGaLocation":1769},{"text":1503,"config":1933},{"href":1505,"dataGaName":1506,"dataGaLocation":1769},{"text":1508,"config":1935},{"href":1510,"dataGaName":1936,"dataGaLocation":1769},"docs",{"text":1531,"config":1938},{"href":1533,"dataGaName":1534,"dataGaLocation":1769},{"text":1940,"config":1941},"Neuerungen",{"href":1591,"dataGaName":1592,"dataGaLocation":1769},{"text":1526,"config":1943},{"href":1528,"dataGaName":1529,"dataGaLocation":1769},{"text":1545,"config":1945},{"href":1547,"dataGaName":1548,"dataGaLocation":1769},{"text":1553,"config":1947},{"href":1555,"dataGaName":1556,"dataGaLocation":1769},{"text":1558,"config":1949},{"href":1560,"dataGaName":1561,"dataGaLocation":1769},{"text":1563,"config":1951},{"href":1565,"dataGaName":1566,"dataGaLocation":1769},{"text":1568,"config":1953},{"href":1570,"dataGaName":1571,"dataGaLocation":1769},{"text":1573,"config":1955},{"href":1575,"dataGaName":1576,"dataGaLocation":1769},{"text":1578,"config":1957},{"href":1580,"dataGaName":1581,"dataGaLocation":1769},{"title":1594,"links":1959},[1960,1962,1964,1966,1968,1970,1975,1980,1982,1984,1986],{"text":1602,"config":1961},{"href":1604,"dataGaName":1596,"dataGaLocation":1769},{"text":1607,"config":1963},{"href":1609,"dataGaName":1610,"dataGaLocation":1769},{"text":1615,"config":1965},{"href":1617,"dataGaName":1618,"dataGaLocation":1769},{"text":1620,"config":1967},{"href":1622,"dataGaName":1623,"dataGaLocation":1769},{"text":1625,"config":1969},{"href":1627,"dataGaName":1628,"dataGaLocation":1769},{"text":1971,"config":1972},"Nachhaltigkeit",{"href":1973,"dataGaName":1974,"dataGaLocation":1769},"/sustainability/","Sustainability",{"text":1976,"config":1977},"Vielfalt, Inklusion und Zugehörigkeit",{"href":1978,"dataGaName":1979,"dataGaLocation":1769},"/de-de/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":1630,"config":1981},{"href":1632,"dataGaName":1633,"dataGaLocation":1769},{"text":1640,"config":1983},{"href":1642,"dataGaName":1643,"dataGaLocation":1769},{"text":1645,"config":1985},{"href":1647,"dataGaName":1648,"dataGaLocation":1769},{"text":1987,"config":1988},"Transparenzerklärung zu moderner Sklaverei",{"href":1989,"dataGaName":1990,"dataGaLocation":1769},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1992},[1993,1996,1999],{"text":1994,"config":1995},"Terms",{"href":1819,"dataGaName":1820,"dataGaLocation":1769},{"text":1997,"config":1998},"Cookies",{"dataGaName":1829,"dataGaLocation":1769,"id":1830,"isOneTrustButton":654},{"text":2000,"config":2001},"Datenschutz",{"href":1824,"dataGaName":1825,"dataGaLocation":1769},[2003],{"id":2004,"title":7,"body":1305,"config":2005,"content":2007,"description":1305,"extension":2011,"meta":2012,"navigation":654,"path":2013,"seo":2014,"stem":2015,"__hash__":2016},"blogAuthors/en-us/blog/authors/patrick-steinhardt.yml",{"template":2006},"BlogAuthor",{"name":7,"config":2008},{"headshot":2009,"ctfId":2010},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749661952/Blog/Author%20Headshots/pks-gitlab-headshot.png","pksgitlab","yml",{},"/en-us/blog/authors/patrick-steinhardt",{},"en-us/blog/authors/patrick-steinhardt","SV9Yd_vW69UbvntDP-SEOV9NKT_VwUAj5nfftf2ElSw",[2018,2026,2034],{"title":2019,"description":2020,"heroImage":2021,"category":1301,"date":2022,"authors":2023,"slug":2025,"externalUrl":1305},"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",[2024],"Toon Claes","whats-new-in-git-2-55-0",{"title":2027,"description":2028,"heroImage":2029,"category":1301,"date":2030,"authors":2031,"slug":2033,"externalUrl":1305},"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",[2032],"Nick Veenhof","gitlab-ai-hackathon-2026-meet-the-winners",{"title":2035,"description":2036,"heroImage":2037,"category":1301,"date":2038,"authors":2039,"slug":2040,"externalUrl":1305},"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",[7],"whats-new-in-git-2-54-0",{"promotions":2042},[2043,2057,2069,2081],{"id":2044,"categories":2045,"header":2047,"text":2048,"button":2049,"image":2054},"ai-modernization",[2046],"ai","Hält KI, was uns versprochen wurde?","Das Quiz dauert maximal 5 Minuten.",{"text":2050,"config":2051},"Ermittle deinen KI-Reifegrad",{"href":2052,"dataGaName":2053,"dataGaLocation":1534},"/de-de/assessments/ai-modernization-assessment/","modernization assessment",{"config":2055},{"src":2056},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":2058,"categories":2059,"header":2061,"text":2048,"button":2062,"image":2066},"devops-modernization",[2060,1868],"product","Verwaltest du Tool-Chaos oder stellst du Innovationen bereit?",{"text":2063,"config":2064},"Ermittle deinen DevOps-Reifegrad",{"href":2065,"dataGaName":2053,"dataGaLocation":1534},"/de-de/assessments/devops-modernization-assessment/",{"config":2067},{"src":2068},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":2070,"categories":2071,"header":2073,"text":2048,"button":2074,"image":2078},"security-modernization",[2072],"security","Tauschst du Schnelligkeit gegen Sicherheit ein?",{"text":2075,"config":2076},"Ermittle deinen Sicherheitsreifegrad",{"href":2077,"dataGaName":2053,"dataGaLocation":1534},"/de-de/assessments/security-modernization-assessment/",{"config":2079},{"src":2080},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":2082,"paths":2083,"header":2086,"text":2087,"button":2088,"image":2093},"github-azure-migration",[2084,2085],"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":2089,"config":2090},"Erfahre, wie GitLab im Vergleich zu GitHub abschneidet",{"href":2091,"dataGaName":2092,"dataGaLocation":1534},"/de-de/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":2094},{"src":2068},{"header":2096,"blurb":2097,"button":2098,"secondaryButton":2103},"Beginne noch heute, schneller zu entwickeln","Entdecke, was dein Team mit der intelligenten Orchestrierungsplattform für DevSecOps erreichen kann.\n",{"text":2099,"config":2100},"Kostenlosen Test starten",{"href":2101,"dataGaName":1331,"dataGaLocation":2102},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/de-de/","feature",{"text":1657,"config":2104},{"href":1659,"dataGaName":1336,"dataGaLocation":2102},1786803749722]