[{"data":1,"prerenderedAt":702},["ShallowReactive",2],{"/de-de/blog/what-s-new-in-git-2-50-0/":3,"navigation-de-de":34,"banner-de-de":452,"footer-de-de":465,"Justin Tobler":674,"next-steps-de-de":687},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"seo":8,"content":11,"config":23,"_id":27,"_type":28,"title":29,"_source":30,"_file":31,"_stem":32,"_extension":33},"/de-de/blog/what-s-new-in-git-2-50-0","blog",false,"",{"noIndex":6,"title":9,"description":10},"GitLab: Was gibt es Neues in Git 2.50.0?","Beiträge des Git-Teams von GitLab und der Git-Community, inklusive der Befehl git-diff-pairs(1) und die Option git-rev-list(1) für gebündelte Referenz-Updates.",{"title":12,"description":10,"authors":13,"heroImage":15,"body":16,"date":17,"category":18,"tags":19},"Was gibt es Neues in Git 2.50.0?",[14],"Justin Tobler","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663087/Blog/Hero%20Images/git3-cover.png","Das Git-Projekt hat kürzlich\n[Git Version 2.50.0](https://lore.kernel.org/git/xmqq1prj1umb.fsf@gitster.g/T/#u)\nveröffentlicht. Werfen wir einen Blick auf die Highlights dieser\nVeröffentlichung, die Beiträge des Git-Teams von GitLab und der gesamten\nGit-Community enthält.\n\n\n## Neuer Befehl git-diff-pairs(1)\n\n\nDiffs sind das Herzstück jeder Code Review und zeigen alle Änderungen, die zwischen zwei Revisionen vorgenommen wurden. GitLab zeigt Diffs an verschiedenen Stellen an, am häufigsten aber auf der [Registerkarte „Änderungen“ (in englischer Sprache verfügbar)](https://docs.gitlab.com/user/project/merge_requests/changes/) eines Merge Requests.\n\n\nIm Hintergrund wird die Diff-Generierung von [`git-diff(1)`](https://git-scm.com/docs/git-diff/de) verwendet. Ein Beispiel:\n\n\n```shell\n\n$ git diff HEAD~1 HEAD\n\n```\n\n\nDieser Befehl gibt das vollständige Diff für alle geänderten Dateien zurück. Dies kann eine Herausforderung für die Skalierbarkeit darstellen, vor allem, wenn die Anzahl der Dateien, die innerhalb einer Reihe von Revisionen geändert wurden, sehr groß ist. Dies kann dazu führen, dass der Befehl selbst auferlegte Zeitlimits für das GitLab-Backend erreicht. Bei großen Änderungen wäre es besser, wenn\n\nes eine Möglichkeit gäbe, die Diff-Berechnung in kleinere, leichter verarbeitbare Blöcke zu unterteilen.\n\n\nEine Möglichkeit dafür ist die Verwendung von\n\n[`git-diff-tree(1)` (in englischer Sprache verfügbar)](https://git-scm.com/docs/git-diff-tree), um Informationen\n\nüber alle geänderten Dateien abzurufen:\n\n\n```shell\n\n$ git diff-tree -r -M --abbrev HEAD~ HEAD\n\n:100644 100644 c9adfed339 99acf81487 M      Documentation/RelNotes/2.50.0.adoc\n\n:100755 100755 1047b8d11d 208e91a17f M      GIT-VERSION-GEN\n\n```\n\n\nGit bezeichnet diese Ausgabe als [„unbearbeitetes“ Format (in englischer Sprache verfügbar)](https://git-scm.com/docs/git-diff-tree#_raw_output_format).\n\nKurz gesagt, listet jede Zeile der Ausgabe Dateipaare und die dazugehörigen Metadaten\n\ndarüber auf, was sich zwischen dem Anfangscode und der letzten Revision geändert hat. Im Vergleich zur\n\nErzeugung der „Patch“-Ausgabe für große Änderungen verläuft dieser Prozess relativ\n\nschnell und liefert eine Zusammenfassung aller Änderungen. Dieser Befehl kann optional eine Umbenennungserkennung durchführen, indem das Flag `-M` angehängt wird. So kannst du überprüfen, ob identifizierte Änderungen auf eine Dateiumbenennung zurückzuführen sind.\n\n\nMit diesen Informationen könnten wir `git-diff(1)` verwenden, um jedes der\n\nDateipaar-Diffs einzeln zu erstellen. Zum Beispiel können wir die Blob-IDs\n\ndirekt angeben:\n\n\n```shell\n\n$ git diff 1047b8d11de767d290170979a9a20de1f5692e26 208e91a17f04558ca66bc19d73457ca64d5385f\n\n```\n\n\nWir können diesen Vorgang für jedes der Dateipaare wiederholen, aber es ist nicht sehr effizient, für jede einzelne Datei einen\n\nseparaten Git-Prozess zu starten.\n\nAußerdem verliert das Diff bei der Verwendung von Blob-IDs einige Kontextinformationen,\n\nwie den Änderungsstatus und die Dateimodi, die im übergeordneten\n\nBaumobjekt gespeichert sind. Was wir wirklich möchten, ist ein Mechanismus, um „unbearbeitete“ Dateipaarinformationen einzuspeisen und\n\ndie entsprechende Patch-Ausgabe zu generieren.\n\n\nMit der Version 2.50 bietet Git einen neuen integrierten Befehl mit der Bezeichnung\n\n[`git-diff-pairs(1)` (in englischer Sprache verfügbar](https://git-scm.com/docs/git-diff-pairs). Dieser Befehl\n\nakzeptiert „unbearbeitete“ formatierte Dateipaarinformationen als Eingabe auf stdin, um exakt zu bestimmen, welche Patches ausgegeben werden sollen. Das folgende Beispiel zeigt, wie dieser Befehl\n\nverwendet werden kann:\n\n\n```shell\n\n$ git diff-tree -r -z -M HEAD~ HEAD | git diff-pairs -z\n\n```\n\n\nBei dieser Nutzung ist die resultierende Ausgabe identisch mit der Verwendung von `git-diff(1)`.\n\nDurch einen separaten Befehl zur Generierung der Patch-Ausgabe kann die „unbearbeitete“ Ausgabe von\n\n`git-diff-tree(1)` in kleinere Chargen von Dateipaaren aufgeteilt und separaten\n\n`git-diff-pairs(1)`-Prozessen zugeführt werden. Dies löst das zuvor erwähnte\n\nSkalierbarkeitsproblem, da die Diffs nicht länger alle auf einmal berechnet werden müssen. Zukünftige\n\nGitLab-Versionen könnten auf diesem Mechanismus aufbauen, um die Leistung der\n\nDiff-Generierung zu verbessern, insbesondere wenn es sich um große Änderungssätze\n\nhandelt. Weitere Informationen zu dieser Änderung findest du im entsprechenden\n\n[Mailinglisten-Thread](https://lore.kernel.org/git/20250228213346.1335224-1-jltobler@gmail.com/).\n\n\n*Dieses Projekt wurde von [Justin Tobler](https://gitlab.com/justintobler) geleitet.*\n\n\n## Gesammelte Referenz-Updates\n\n\nMit dem Git-Befehl [`git-update-ref(1)` (in englischer Sprache verfügbar)](https://git-scm.com/docs/git-update-ref)\n\n kannst du Referenzaktualisierungen durchführen. Bei Verwendung mit dem Flag `--stdin` können\n\nmehrere Referenzaktualisierungen in einer einzigen Transaktion gebündelt werden, indem Anweisungen für jede Referenzaktualisierung\n\nangegeben werden, die auf stdin durchgeführt werden soll.\n\nDie Massenaktualisierung von Referenzen auf diese Weise zeigt auch ein atomares Verhalten, bei dem ein\n\neinzelner Fehler bei der Referenzaktualisierung eine Transaktion abbricht und\n\nReferenzen nicht aktualisiert werden. Hier ist ein Beispiel für dieses Verhalten:\n\n\n```shell\n\n# Erstelle ein Repository mit drei leeren Commits und einem Branch mit dem Namen „foo“\n\n$ git init\n\n$ git commit --allow-empty -m 1\n\n$ git commit --allow-empty -m 2\n\n$ git commit --allow-empty -m 3\n\n$ git branch foo\n\n\n# Gib die Commit-IDs aus\n\n$ git rev-list HEAD\n\ncf469bdf5436ea1ded57670b5f5a0797f72f1afc\n\n5a74cd330f04b96ce0666af89682d4d7580c354c\n\n5a6b339a8ebffde8c0590553045403dbda831518\n\n\n# Versuche, eine neue Referenz zu erstellen und die vorhandene Referenz in der Transaktion zu aktualisieren.\n\n# Es wird erwartet, dass die Aktualisierung fehlschlägt, da die angegebene alte Objekt-ID nicht richtig ist.\n\n$ git update-ref --stdin \u003C\u003CEOF\n\n> create refs/heads/bar cf469bdf5436ea1ded57670b5f5a0797f72f1afc\n\n> update refs/heads/foo 5a6b339a8ebffde8c0590553045403dbda831518 5a74cd330f04b96ce0666af89682d4d7580c354c\n\n> EOF\n\nfatal: cannot lock ref 'refs/heads/foo': is at cf469bdf5436ea1ded57670b5f5a0797f72f1afc but expected 5a74cd330f04b96ce0666af89682d4d7580c354c\n\n\n# Die Referenz „bar“ wurde nicht erstellt.\n\n$ git switch bar\n\nfatal: invalid reference: bar\n\n```\n\n\nIm Vergleich zur einzelnen Aktualisierung vieler Referenzen ist die Massenaktualisierung\n\nauch viel effizienter. Das ist zwar grundsätzlich eine gute Lösung, aber es kann bestimmte\n\nUmstände geben, unter denen es akzeptabel ist, wenn ein Teil der angeforderten Referenzaktualisierungen\n\nfehlschlägt, wir aber dennoch die Effizienzvorteile von\n\nMassenaktualisierungen nutzen möchten.\n\n\nAb dieser Version verfügt `git-update-ref(1)` über die neue Option `--batch-updates`, mit\n\nder die Aktualisierungen auch dann fortgesetzt werden können, wenn eine oder mehrere Referenzaktualisierungen\n\nfehlschlagen. In diesem Modus werden einzelne Fehler im folgenden Format gemeldet:\n\n\n```text\n\nrejected SP (\u003Cold-oid> | \u003Cold-target>) SP (\u003Cnew-oid> | \u003Cnew-target>) SP \u003Crejection-reason> LF\n\n```\n\n\nDadurch können erfolgreiche Referenzaktualisierungen fortgesetzt werden, während gleichzeitig angegeben wird, unter welchen Umständen Aktualisierungen abgelehnt wurden und aus welchem Grund. Wir verwenden noch einmal das gleiche beispielhafte Repository wie im vorherigen Beispiel:\n\n\n```shell\n\n# Versuche, eine neue Referenz zu erstellen und die vorhandene Referenz in der Transaktion zu aktualisieren.\n\n$ git update-ref --stdin --batch-updates \u003C\u003CEOF\n\n> create refs/heads/bar cf469bdf5436ea1ded57670b5f5a0797f72f1afc\n\n> update refs/heads/foo 5a6b339a8ebffde8c0590553045403dbda831518 5a74cd330f04b96ce0666af89682d4d7580c354c\n\n> EOF\n\nrejected refs/heads/foo 5a6b339a8ebffde8c0590553045403dbda831518 5a74cd330f04b96ce0666af89682d4d7580c354c incorrect old value provided\n\n\n# Die Referenz „bar“ wurde erstellt, obwohl die Aktualisierung auf „foo“ abgelehnt wurde.\n\n$ git switch bar\n\nSwitched to branch 'bar'\n\n```\n\n\nMit der Option `--batch-updates` war die Referenzerstellung diesmal erfolgreich,\n\nobwohl die Aktualisierung nicht funktioniert hat. Diese Patch-Serie legt den Grundstein für\n\nzukünftige Leistungsverbesserungen in `git-fetch(1)` und `git-receive-pack(1)`,\n\nwenn Referenzen in großer Zahl aktualisiert werden. Weitere Informationen findest du im\n\n[Mailinglisten-Thread](https://lore.kernel.org/git/20250408085120.614893-1-karthik.188@gmail.com/)\n\n\n*Dieses Projekt wurde von [Karthik Nayak](https://gitlab.com/knayakgl) geleitet.*\n\n\n## Neue Filteroption für git-cat-file(1)\n\n\nMit [`git-cat-file(1)` (in englischer Sprache verfügbar)](https://git-scm.com/docs/git-cat-file) ist es möglich,\n\nInformationen für alle im Repository enthaltenen Objekte über die Option\n\n`--batch–all-objects` auszugeben. Zum Beispiel:\n\n\n```shell\n\n# Richte ein einfaches Repository ein.\n\n$ git init\n\n$ echo foo >foo\n\n$ git add foo\n\n$ git commit -m init\n\n\n# Erstelle ein nicht erreichbares Objekt.\n\n$ git commit --amend --no-edit\n\n\n# Verwende git-cat-file(1), um Informationen über alle Objekte einschließlich nicht erreichbarer Objekte auszugeben.\n\n$ git cat-file --batch-all-objects --batch-check='%(objecttype) %(objectname)'\n\ncommit 0b07e71d14897f218f23d9a6e39605b466454ece\n\ntree 205f6b799e7d5c2524468ca006a0131aa57ecce7\n\nblob 257cc5642cb1a054f08cc83f2d943e56fd3ebe99\n\ncommit c999f781fd7214b3caab82f560ffd079ddad0115\n\n```\n\n\nIn einigen Situationen möchte ein(e) Benutzer(in) möglicherweise alle Objekte im\n\nRepository durchsuchen, aber nur eine Teilmenge basierend auf einem bestimmten Attribut ausgeben. Wenn\n\nwir beispielsweise nur die Objekte anzeigen möchten, die Commits sind, könnten wir\n\n`grep(1)` verwenden:\n\n\n```shell\n\n$ git cat-file --batch-all-objects --batch-check='%(objecttype) %(objectname)' | grep ^commit\n\ncommit 0b07e71d14897f218f23d9a6e39605b466454ece\n\ncommit c999f781fd7214b3caab82f560ffd079ddad0115\n\n```\n\n\nDas funktioniert zwar, aber ein Nachteil beim Filtern der Ausgabe ist, dass\n\n`git-cat-file(1)` nach wie vor alle Objekte im Repository durchlaufen muss, auch\n\ndiejenigen, an denen wir nicht interessiert sind. Dies kann ziemlich ineffizient sein.\n\n\nMit dieser Version verfügt `git-cat-file(1)` jetzt über die Option `--filter`, die nur jene Objekte\n\nanzeigt, die den angegebenen Kriterien entsprechen. Dies ähnelt der gleichnamigen Option\n\nfür `git-rev-list(1)`, unterstützt jedoch nur eine Teilmenge der\n\nFilter. Die folgenden Filter werden unterstützt: `blob:none`, `blob:limit=` und\n\n`object:type=`. Ähnlich wie im vorherigen Beispiel können Objekte mit Git direkt nach\n\nihrem Typ gefiltert werden:\n\n\n```shell\n\n$ git cat-file --batch-all-objects --batch-check='%(objecttype) %(objectname)' --filter='object:type=commit'\n\ncommit 0b07e71d14897f218f23d9a6e39605b466454ece\n\ncommit c999f781fd7214b3caab82f560ffd079ddad0115\n\n```\n\n\nEs ist nicht nur praktisch, dass Git die Verarbeitung übernimmt, sondern bei großen\n\nRepositories mit vielen Objekten ist dies möglicherweise auch effizienter. Wenn ein\n\nRepository über Bitmap-Indizes verfügt, kann Git Objekte eines bestimmten Typs effizient\n\nnachschlagen und so das Durchsuchen der\n\nPaketierungsdatei vermeiden, wodurch die Geschwindigkeit deutlich erhöht wird. Benchmarks, die im\n\n[Chromium-Repository](https://github.com/chromium/chromium.git) durchgeführt wurden, zeigen signifikante Verbesserungen:\n\n\n```text\n\nBenchmark 1: git cat-file --batch-check --batch-all-objects --unordered --buffer --no-filter Time (mean ± σ):     82.806 s ±  6.363 s    [User: 30.956 s, System: 8.264 s] Range (min … max):   73.936 s … 89.690 s    10 runs\n\nBenchmark 2: git cat-file --batch-check --batch-all-objects --unordered --buffer --filter=object:type=tag Time (mean ± σ):      20.8 ms ±   1.3 ms    [User: 6.1 ms, System: 14.5 ms] Range (min … max):    18.2 ms …  23.6 ms    127 runs\n\nBenchmark 3: git cat-file --batch-check --batch-all-objects --unordered --buffer --filter=object:type=commit Time (mean ± σ):      1.551 s ±  0.008 s    [User: 1.401 s, System: 0.147 s] Range (min … max):    1.541 s …  1.566 s    10 runs\n\nBenchmark 4: git cat-file --batch-check --batch-all-objects --unordered --buffer --filter=object:type=tree Time (mean ± σ):     11.169 s ±  0.046 s    [User: 10.076 s, System: 1.063 s] Range (min … max):   11.114 s … 11.245 s    10 runs\n\nBenchmark 5: git cat-file --batch-check --batch-all-objects --unordered --buffer --filter=object:type=blob Time (mean ± σ):     67.342 s ±  3.368 s    [User: 20.318 s, System: 7.787 s] Range (min … max):   62.836 s … 73.618 s    10 runs\n\nBenchmark 6: git cat-file --batch-check --batch-all-objects --unordered --buffer --filter=blob:none Time (mean ± σ):     13.032 s ±  0.072 s    [User: 11.638 s, System: 1.368 s] Range (min … max):   12.960 s … 13.199 s    10 runs\n\nSummary git cat-file --batch-check --batch-all-objects --unordered --buffer --filter=object:type=tag 74.75 ± 4.61 times faster than git cat-file --batch-check --batch-all-objects --unordered --buffer --filter=object:type=commit 538.17 ± 33.17 times faster than git cat-file --batch-check --batch-all-objects --unordered --buffer --filter=object:type=tree 627.98 ± 38.77 times faster than git cat-file --batch-check --batch-all-objects --unordered --buffer --filter=blob:none 3244.93 ± 257.23 times faster than git cat-file --batch-check --batch-all-objects --unordered --buffer --filter=object:type=blob 3990.07 ± 392.72 times faster than git cat-file --batch-check --batch-all-objects --unordered --buffer --no-filter\n\n```\n\n\nInteressanterweise zeigen diese Ergebnisse, dass die Berechnungszeit jetzt mit\n\nder Anzahl der Objekte für einen bestimmten Typ skaliert, anstatt mit der Anzahl der gesamten Objekte\n\nin der Paketierungsdatei. Den ursprünglichen (englischsprachigen) Mailinglisten-Thread findest du\n\n[hier](https://lore.kernel.org/git/20250221-pks-cat-file-object-type-filter-v1-0-0852530888e2@pks.im/).\n\n\n*Dieses Projekt wurde von [Patrick Steinhardt](https://gitlab.com/pks-gitlab) geleitet.*\n\n\n## Verbesserte Leistung beim Generieren von Bundles\n\n\nGit bietet die Möglichkeit, über den Befehl\n\n[`git-bundle(1)` (in englischer Sprache verfügbar)](https://git-scm.com/docs/git-bundle) ein Archiv eines Repositories zu generieren, das einen\n\nbestimmten Satz von Referenzen und zugehörigen erreichbaren Objekten enthält. Dieser Vorgang\n\nwird von GitLab verwendet, um Repository-Backups zu erstellen, und ist auch ein Teil des\n\n[Bundle-URI (in englischer Sprache verfügbar)](https://git-scm.com/docs/bundle-uri)-Mechanismus.\n\n\nBei großen Repositories mit Millionen von Referenzen kann dieser Vorgang Stunden oder sogar Tage\n\ndauern. Zum Beispiel lagen die Backup-Zeiten für das Haupt-GitLab-Repository\n\n([gitlab-org/gitlab](https://gitlab.com/gitlab-org/gitlab)), bei\n\netwa 48 Stunden. Die Untersuchung zeigte einen Leistungsengpass, der\n\nauf die Art zurückzuführen war, wie Git eine Überprüfung durchführte, um zu vermeiden, dass doppelte Referenzen\n\nin das Bundle aufgenommen wurden. Die Implementierung verwendete eine verschachtelte `for`-Schleife, um alle aufgelisteten Referenzen zu durchlaufen und zu\n\nvergleichen, was zu einer Zeitkomplexität von O(N^2) führte. Die Skalierbarkeit\n\nist sehr schlecht, wenn die Anzahl der Referenzen in einem Repository zunimmt.\n\n\nIn dieser Version wurde dieses Problem behoben, indem die verschachtelten Schleifen durch eine \n\nDatenzuordnungsstruktur ersetzt wurden, was die Geschwindigkeit erheblich erhöht. Der folgende Benchmark zeigt\n\ndie Leistungssteigerung beim Erstellen eines Bundles mit einem Repository, das\n\n100 000 Referenzen enthält:\n\n\n```text\n\nBenchmark 1: bundle (refcount = 100000, revision = master) Time (mean ± σ):     14.653 s ±  0.203 s    [User: 13.940 s, System: 0.762 s] Range (min … max):   14.237 s … 14.920 s    10 runs\n\nBenchmark 2: bundle (refcount = 100000, revision = HEAD) Time (mean ± σ):      2.394 s ±  0.023 s    [User: 1.684 s, System: 0.798 s] Range (min … max):    2.364 s …  2.425 s    10 runs\n\nSummary bundle (refcount = 100000, revision = HEAD) ran 6.12 ± 0.10 times faster than bundle (refcount = 100000, revision = master)\n\n```\n\n\nWeitere Informationen findest du in unserem Blogbeitrag\n\n[Wie wir die Backup-Zeiten für GitLab-Repos von 48 Stunden auf 41 Minuten verringerten (in englischer Sprache verfügbar)](https://about.gitlab.com/blog/how-we-decreased-gitlab-repo-backup-times-from-48-hours-to-41-minutes/).\n\nDen ursprünglichen englischsprachigen Mailinglisten-Thread findest du\n\n[hier](https://lore.kernel.org/git/20250401-488-generating-bundles-with-many-references-has-non-linear-performance-v1-0-6d23b2d96557@gmail.com/).\n\n\n*Dieses Projekt wurde von [Karthik Nayak](https://gitlab.com/knayakgl) geleitet.*\n\n\n## Bessere Auflösung von URI-Bundles\n\n\nDurch den [Bundle-URI (in englischer Sprache verfügbar)](https://git-scm.com/docs/bundle-uri)-Mechanismus in Git können den Clients\n\nOrte zum Abrufen von Bundles zur Verfügung gestellt werden, um\n\nKlone und Abrufe zu beschleunigen. Wenn ein Client ein Bundle herunterlädt, werden Referenzen\n\nunter `refs/heads/*` zusammen mit\n\nden zugehörigen Objekten aus dem Bundle in das Repository kopiert. Ein Bundle kann zusätzliche Referenzen\n\naußerhalb von `refs/heads/*` enthalten, wie z. B. `refs/tags/*`, die einfach ignoriert werden, wenn\n\ndie Bundle-URI beim Klonen verwendet wird.\n\n\nIn Git 2.50 wird diese Einschränkung aufgehoben und alle Referenzen, die mit\n\n`refs/*` übereinstimmen und im heruntergeladenen Bundle enthalten sind, werden kopiert.\n\n[Scott Chacon](https://github.com/schacon), der diese Funktionalität beigesteuert hat,\n\ndemonstriert den Unterschied beim Klonen von\n\n[gitlab-org/gitlab-foss](https://gitlab.com/gitlab-org/gitlab-foss):\n\n\n```shell\n\n$ git-v2.49 clone --bundle-uri=gitlab-base.bundle https://gitlab.com/gitlab-org/gitlab-foss.git gl-2.49\n\nCloning into 'gl2.49'...\n\nremote: Enumerating objects: 1092703, done.\n\nremote: Counting objects: 100% (973405/973405), done.\n\nremote: Compressing objects: 100% (385827/385827), done.\n\nremote: Total 959773 (delta 710976), reused 766809 (delta 554276), pack-reused 0 (from 0)\n\nReceiving objects: 100% (959773/959773), 366.94 MiB | 20.87 MiB/s, done.\n\nResolving deltas: 100% (710976/710976), completed with 9081 local objects.\n\nChecking objects: 100% (4194304/4194304), done.\n\nChecking connectivity: 959668, done.\n\nUpdating files: 100% (59972/59972), done.\n\n\n$ git-v2.50 clone --bundle-uri=gitlab-base.bundle https://gitlab.com/gitlab-org/gitlab-foss.git gl-2.50\n\nCloning into 'gl-2.50'...\n\nremote: Enumerating objects: 65538, done.\n\nremote: Counting objects: 100% (56054/56054), done.\n\nremote: Compressing objects: 100% (28950/28950), done.\n\nremote: Total 43877 (delta 27401), reused 25170 (delta 13546), pack-reused 0 (from 0)\n\nReceiving objects: 100% (43877/43877), 40.42 MiB | 22.27 MiB/s, done.\n\nResolving deltas: 100% (27401/27401), completed with 8564 local objects.\n\nUpdating files: 100% (59972/59972), done.\n\n```\n\n\nWenn wir diese Ergebnisse vergleichen, sehen wir, dass Git 2.50 43 887 Objekte\n\n(40,42 MiB) abruft, nachdem das Bundle extrahiert wurde, während Git 2.49\n\ninsgesamt 959 773 Objekte (366,94 MiB) abruft. Git 2.50 ruft etwa 95 % weniger\n\nObjekte und 90 % weniger Daten ab, was vorteilhaft sowohl für den Client als auch für den Server ist. Der\n\nServer muss viel weniger Daten für den Client verarbeiten und der Client muss weniger Daten\n\nherunterladen und extrahieren. In dem von Scott angegebenen Beispiel führte dies zu einer\n\nBeschleunigung um 25 %.\n\n\nWeitere Informationen findest du im entsprechenden englischsprachigen\n\n[Mailinglisten-Thread](https://lore.kernel.org/git/pull.1897.git.git.1740489585344.gitgitgadget@gmail.com/).\n\n\n*TDiese Patch-Serie wurde von [Scott Chacon](https://github.com/schacon) beigesteuert.*\n\n\n## Weiterlesen\n\n\nIn diesem Artikel werden nur einige der Beiträge von GitLab und\n\nder größeren Git-Community für diese neueste Veröffentlichung vorgestellt. Mehr darüber erfährst du in\n\nder [offiziellen Veröffentlichungsankündigung](https://lore.kernel.org/git/xmqq1prj1umb.fsf@gitster.g/) des Git-Projekts. Sieh dir auch\n\nunsere [letzten Blogbeiträge zu Git-Releases (in englischer Sprache verfügbar)](https://about.gitlab.com/blog/tags/git/)\n\nan, um weitere wichtige Beiträge von GitLab-Teammitgliedern zu entdecken.\n","2025-06-16","open-source",[20,21,22],"git","open source","community",{"featured":24,"template":25,"slug":26},true,"BlogPost","what-s-new-in-git-2-50-0","content:de-de:blog:what-s-new-in-git-2-50-0.yml","yaml","What S New In Git 2 50 0","content","de-de/blog/what-s-new-in-git-2-50-0.yml","de-de/blog/what-s-new-in-git-2-50-0","yml",{"_path":35,"_dir":36,"_draft":6,"_partial":6,"_locale":7,"data":37,"_id":448,"_type":28,"title":449,"_source":30,"_file":450,"_stem":451,"_extension":33},"/shared/de-de/main-navigation","de-de",{"logo":38,"freeTrial":43,"sales":48,"login":53,"items":58,"search":389,"minimal":425,"duo":439},{"config":39},{"href":40,"dataGaName":41,"dataGaLocation":42},"/de-de/","gitlab logo","header",{"text":44,"config":45},"Kostenlose Testversion anfordern",{"href":46,"dataGaName":47,"dataGaLocation":42},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":49,"config":50},"Vertrieb kontaktieren",{"href":51,"dataGaName":52,"dataGaLocation":42},"/de-de/sales/","sales",{"text":54,"config":55},"Anmelden",{"href":56,"dataGaName":57,"dataGaLocation":42},"https://gitlab.com/users/sign_in/","sign in",[59,103,201,206,310,370],{"text":60,"config":61,"cards":63,"footer":86},"Plattform",{"dataNavLevelOne":62},"platform",[64,70,78],{"title":60,"description":65,"link":66},"Die umfassendste KI-basierte DevSecOps-Plattform",{"text":67,"config":68},"Erkunde unsere Plattform",{"href":69,"dataGaName":62,"dataGaLocation":42},"/de-de/platform/",{"title":71,"description":72,"link":73},"GitLab Duo (KI)","Entwickle Software schneller mit KI in jeder Phase der Entwicklung",{"text":74,"config":75},"Lerne GitLab Duo kennen",{"href":76,"dataGaName":77,"dataGaLocation":42},"/de-de/gitlab-duo/","gitlab duo ai",{"title":79,"description":80,"link":81},"Gründe, die für GitLab sprechen","10 Gründe, warum Unternehmen sich für GitLab entscheiden",{"text":82,"config":83},"Mehr erfahren",{"href":84,"dataGaName":85,"dataGaLocation":42},"/de-de/why-gitlab/","why gitlab",{"title":87,"items":88},"Erste Schritte mit",[89,94,99],{"text":90,"config":91},"Platform Engineering",{"href":92,"dataGaName":93,"dataGaLocation":42},"/de-de/solutions/platform-engineering/","platform engineering",{"text":95,"config":96},"Entwicklererfahrung",{"href":97,"dataGaName":98,"dataGaLocation":42},"/de-de/developer-experience/","Developer experience",{"text":100,"config":101},"MLOps",{"href":102,"dataGaName":100,"dataGaLocation":42},"/de-de/topics/devops/the-role-of-ai-in-devops/",{"text":104,"left":24,"config":105,"link":107,"lists":111,"footer":183},"Produkt",{"dataNavLevelOne":106},"solutions",{"text":108,"config":109},"Alle Lösungen anzeigen",{"href":110,"dataGaName":106,"dataGaLocation":42},"/de-de/solutions/",[112,138,161],{"title":113,"description":114,"link":115,"items":120},"Automatisierung","CI/CD und Automatisierung zur Beschleunigung der Bereitstellung",{"config":116},{"icon":117,"href":118,"dataGaName":119,"dataGaLocation":42},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[121,125,129,134],{"text":122,"config":123},"CI/CD",{"href":124,"dataGaLocation":42,"dataGaName":122},"/de-de/solutions/continuous-integration/",{"text":126,"config":127},"KI-unterstützte Entwicklung",{"href":76,"dataGaLocation":42,"dataGaName":128},"AI assisted development",{"text":130,"config":131},"Quellcodeverwaltung",{"href":132,"dataGaLocation":42,"dataGaName":133},"/de-de/solutions/source-code-management/","Source Code Management",{"text":135,"config":136},"Automatisierte Softwarebereitstellung",{"href":118,"dataGaLocation":42,"dataGaName":137},"Automated software delivery",{"title":139,"description":140,"link":141,"items":146},"Sicherheit","Entwickle schneller, ohne die Sicherheit zu gefährden",{"config":142},{"href":143,"dataGaName":144,"dataGaLocation":42,"icon":145},"/de-de/solutions/security-compliance/","security and compliance","ShieldCheckLight",[147,152,157],{"text":148,"config":149},"Application Security Testing",{"href":150,"dataGaName":151,"dataGaLocation":42},"/solutions/application-security-testing/","Application security testing",{"text":153,"config":154},"Schutz der Software-Lieferkette",{"href":155,"dataGaLocation":42,"dataGaName":156},"/de-de/solutions/supply-chain/","Software supply chain security",{"text":158,"config":159},"Software Compliance",{"href":160,"dataGaName":158,"dataGaLocation":42},"/solutions/software-compliance/",{"title":162,"link":163,"items":168},"Bewertung",{"config":164},{"icon":165,"href":166,"dataGaName":167,"dataGaLocation":42},"DigitalTransformation","/de-de/solutions/visibility-measurement/","visibility and measurement",[169,173,178],{"text":170,"config":171},"Sichtbarkeit und Bewertung",{"href":166,"dataGaLocation":42,"dataGaName":172},"Visibility and Measurement",{"text":174,"config":175},"Wertstrommanagement",{"href":176,"dataGaLocation":42,"dataGaName":177},"/de-de/solutions/value-stream-management/","Value Stream Management",{"text":179,"config":180},"Analysen und Einblicke",{"href":181,"dataGaLocation":42,"dataGaName":182},"/de-de/solutions/analytics-and-insights/","Analytics and insights",{"title":184,"items":185},"GitLab für",[186,191,196],{"text":187,"config":188},"Enterprise",{"href":189,"dataGaLocation":42,"dataGaName":190},"/de-de/enterprise/","enterprise",{"text":192,"config":193},"Kleinunternehmen",{"href":194,"dataGaLocation":42,"dataGaName":195},"/de-de/small-business/","small business",{"text":197,"config":198},"den öffentlichen Sektor",{"href":199,"dataGaLocation":42,"dataGaName":200},"/de-de/solutions/public-sector/","public sector",{"text":202,"config":203},"Preise",{"href":204,"dataGaName":205,"dataGaLocation":42,"dataNavLevelOne":205},"/de-de/pricing/","pricing",{"text":207,"config":208,"link":210,"lists":214,"feature":297},"Ressourcen",{"dataNavLevelOne":209},"resources",{"text":211,"config":212},"Alle Ressourcen anzeigen",{"href":213,"dataGaName":209,"dataGaLocation":42},"/de-de/resources/",[215,248,270],{"title":216,"items":217},"Erste Schritte",[218,223,228,233,238,243],{"text":219,"config":220},"Installieren",{"href":221,"dataGaName":222,"dataGaLocation":42},"/de-de/install/","install",{"text":224,"config":225},"Kurzanleitungen",{"href":226,"dataGaName":227,"dataGaLocation":42},"/de-de/get-started/","quick setup checklists",{"text":229,"config":230},"Lernen",{"href":231,"dataGaLocation":42,"dataGaName":232},"https://university.gitlab.com/","learn",{"text":234,"config":235},"Produktdokumentation",{"href":236,"dataGaName":237,"dataGaLocation":42},"https://docs.gitlab.com/","product documentation",{"text":239,"config":240},"Best-Practice-Videos",{"href":241,"dataGaName":242,"dataGaLocation":42},"/de-de/getting-started-videos/","best practice videos",{"text":244,"config":245},"Integrationen",{"href":246,"dataGaName":247,"dataGaLocation":42},"/de-de/integrations/","integrations",{"title":249,"items":250},"Entdecken",[251,256,260,265],{"text":252,"config":253},"Kundenerfolge",{"href":254,"dataGaName":255,"dataGaLocation":42},"/de-de/customers/","customer success stories",{"text":257,"config":258},"Blog",{"href":259,"dataGaName":5,"dataGaLocation":42},"/de-de/blog/",{"text":261,"config":262},"Remote",{"href":263,"dataGaName":264,"dataGaLocation":42},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"text":266,"config":267},"TeamOps",{"href":268,"dataGaName":269,"dataGaLocation":42},"/de-de/teamops/","teamops",{"title":271,"items":272},"Vernetzen",[273,278,282,287,292],{"text":274,"config":275},"GitLab-Services",{"href":276,"dataGaName":277,"dataGaLocation":42},"/de-de/services/","services",{"text":279,"config":280},"Community",{"href":281,"dataGaName":22,"dataGaLocation":42},"/community/",{"text":283,"config":284},"Forum",{"href":285,"dataGaName":286,"dataGaLocation":42},"https://forum.gitlab.com/","forum",{"text":288,"config":289},"Veranstaltungen",{"href":290,"dataGaName":291,"dataGaLocation":42},"/events/","events",{"text":293,"config":294},"Partner",{"href":295,"dataGaName":296,"dataGaLocation":42},"/partners/","partners",{"backgroundColor":298,"textColor":299,"text":300,"image":301,"link":305},"#2f2a6b","#fff","Perspektiven für die Softwareentwicklung der Zukunft",{"altText":302,"config":303},"the source promo card",{"src":304},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758208064/dzl0dbift9xdizyelkk4.svg",{"text":306,"config":307},"Lies die News",{"href":308,"dataGaName":309,"dataGaLocation":42},"/de-de/the-source/","the source",{"text":311,"config":312,"lists":314},"Unternehmen",{"dataNavLevelOne":313},"company",[315],{"items":316},[317,322,328,330,335,340,345,350,355,360,365],{"text":318,"config":319},"Über",{"href":320,"dataGaName":321,"dataGaLocation":42},"/de-de/company/","about",{"text":323,"config":324,"footerGa":327},"Karriere",{"href":325,"dataGaName":326,"dataGaLocation":42},"/jobs/","jobs",{"dataGaName":326},{"text":288,"config":329},{"href":290,"dataGaName":291,"dataGaLocation":42},{"text":331,"config":332},"Geschäftsführung",{"href":333,"dataGaName":334,"dataGaLocation":42},"/company/team/e-group/","leadership",{"text":336,"config":337},"Team",{"href":338,"dataGaName":339,"dataGaLocation":42},"/company/team/","team",{"text":341,"config":342},"Handbuch",{"href":343,"dataGaName":344,"dataGaLocation":42},"https://handbook.gitlab.com/","handbook",{"text":346,"config":347},"Investor Relations",{"href":348,"dataGaName":349,"dataGaLocation":42},"https://ir.gitlab.com/","investor relations",{"text":351,"config":352},"Trust Center",{"href":353,"dataGaName":354,"dataGaLocation":42},"/de-de/security/","trust center",{"text":356,"config":357},"AI Transparency Center",{"href":358,"dataGaName":359,"dataGaLocation":42},"/de-de/ai-transparency-center/","ai transparency center",{"text":361,"config":362},"Newsletter",{"href":363,"dataGaName":364,"dataGaLocation":42},"/company/contact/","newsletter",{"text":366,"config":367},"Presse",{"href":368,"dataGaName":369,"dataGaLocation":42},"/press/","press",{"text":371,"config":372,"lists":373},"Kontakt",{"dataNavLevelOne":313},[374],{"items":375},[376,379,384],{"text":49,"config":377},{"href":51,"dataGaName":378,"dataGaLocation":42},"talk to sales",{"text":380,"config":381},"Support",{"href":382,"dataGaName":383,"dataGaLocation":42},"/support/","get help",{"text":385,"config":386},"Kundenportal",{"href":387,"dataGaName":388,"dataGaLocation":42},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":390,"login":391,"suggestions":398},"Schließen",{"text":392,"link":393},"Um Repositories und Projekte zu durchsuchen, melde dich an bei",{"text":394,"config":395},"gitlab.com",{"href":56,"dataGaName":396,"dataGaLocation":397},"search login","search",{"text":399,"default":400},"Vorschläge",[401,404,409,411,416,421],{"text":71,"config":402},{"href":76,"dataGaName":403,"dataGaLocation":397},"GitLab Duo (AI)",{"text":405,"config":406},"Code Suggestions (KI)",{"href":407,"dataGaName":408,"dataGaLocation":397},"/de-de/solutions/code-suggestions/","Code Suggestions (AI)",{"text":122,"config":410},{"href":124,"dataGaName":122,"dataGaLocation":397},{"text":412,"config":413},"GitLab auf AWS",{"href":414,"dataGaName":415,"dataGaLocation":397},"/de-de/partners/technology-partners/aws/","GitLab on AWS",{"text":417,"config":418},"GitLab auf Google Cloud",{"href":419,"dataGaName":420,"dataGaLocation":397},"/de-de/partners/technology-partners/google-cloud-platform/","GitLab on Google Cloud",{"text":422,"config":423},"Warum GitLab?",{"href":84,"dataGaName":424,"dataGaLocation":397},"Why GitLab?",{"freeTrial":426,"mobileIcon":431,"desktopIcon":436},{"text":427,"config":428},"Kostenlos testen",{"href":429,"dataGaName":47,"dataGaLocation":430},"https://gitlab.com/-/trials/new/","nav",{"altText":432,"config":433},"GitLab-Symbol",{"src":434,"dataGaName":435,"dataGaLocation":430},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":432,"config":437},{"src":438,"dataGaName":435,"dataGaLocation":430},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"freeTrial":440,"mobileIcon":444,"desktopIcon":446},{"text":441,"config":442},"Erfahre mehr über GitLab Duo",{"href":76,"dataGaName":443,"dataGaLocation":430},"gitlab duo",{"altText":432,"config":445},{"src":434,"dataGaName":435,"dataGaLocation":430},{"altText":432,"config":447},{"src":438,"dataGaName":435,"dataGaLocation":430},"content:shared:de-de:main-navigation.yml","Main Navigation","shared/de-de/main-navigation.yml","shared/de-de/main-navigation",{"_path":453,"_dir":36,"_draft":6,"_partial":6,"_locale":7,"title":454,"button":455,"config":460,"_id":462,"_type":28,"_source":30,"_file":463,"_stem":464,"_extension":33},"/shared/de-de/banner","GitLab Duo Agent Platform ist jetzt in öffentlicher Beta!",{"text":456,"config":457},"Beta testen",{"href":458,"dataGaName":459,"dataGaLocation":42},"/de-de/gitlab-duo/agent-platform/","duo banner",{"layout":461},"release","content:shared:de-de:banner.yml","shared/de-de/banner.yml","shared/de-de/banner",{"_path":466,"_dir":36,"_draft":6,"_partial":6,"_locale":7,"data":467,"_id":670,"_type":28,"title":671,"_source":30,"_file":672,"_stem":673,"_extension":33},"/shared/de-de/main-footer",{"text":468,"source":469,"edit":475,"contribute":480,"config":485,"items":490,"minimal":662},"Git ist eine Marke von Software Freedom Conservancy und unsere Verwendung von „GitLab“ erfolgt unter Lizenz.",{"text":470,"config":471},"Quelltext der Seite anzeigen",{"href":472,"dataGaName":473,"dataGaLocation":474},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":476,"config":477},"Diese Seite bearbeiten",{"href":478,"dataGaName":479,"dataGaLocation":474},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":481,"config":482},"Beteilige dich",{"href":483,"dataGaName":484,"dataGaLocation":474},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":486,"facebook":487,"youtube":488,"linkedin":489},"https://x.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[491,514,569,598,632],{"title":60,"links":492,"subMenu":497},[493],{"text":494,"config":495},"DevSecOps-Plattform",{"href":69,"dataGaName":496,"dataGaLocation":474},"devsecops platform",[498],{"title":202,"links":499},[500,504,509],{"text":501,"config":502},"Tarife anzeigen",{"href":204,"dataGaName":503,"dataGaLocation":474},"view plans",{"text":505,"config":506},"Vorteile von Premium",{"href":507,"dataGaName":508,"dataGaLocation":474},"/de-de/pricing/premium/","why premium",{"text":510,"config":511},"Vorteile von Ultimate",{"href":512,"dataGaName":513,"dataGaLocation":474},"/de-de/pricing/ultimate/","why ultimate",{"title":515,"links":516},"Lösungen",[517,522,525,527,532,537,541,544,547,552,554,556,559,564],{"text":518,"config":519},"Digitale Transformation",{"href":520,"dataGaName":521,"dataGaLocation":474},"/de-de/topics/digital-transformation/","digital transformation",{"text":523,"config":524},"Sicherheit und Compliance",{"href":150,"dataGaName":151,"dataGaLocation":474},{"text":135,"config":526},{"href":118,"dataGaName":119,"dataGaLocation":474},{"text":528,"config":529},"Agile Entwicklung",{"href":530,"dataGaName":531,"dataGaLocation":474},"/de-de/solutions/agile-delivery/","agile delivery",{"text":533,"config":534},"Cloud-Transformation",{"href":535,"dataGaName":536,"dataGaLocation":474},"/de-de/topics/cloud-native/","cloud transformation",{"text":538,"config":539},"SCM",{"href":132,"dataGaName":540,"dataGaLocation":474},"source code management",{"text":122,"config":542},{"href":124,"dataGaName":543,"dataGaLocation":474},"continuous integration & delivery",{"text":174,"config":545},{"href":176,"dataGaName":546,"dataGaLocation":474},"value stream management",{"text":548,"config":549},"GitOps",{"href":550,"dataGaName":551,"dataGaLocation":474},"/de-de/solutions/gitops/","gitops",{"text":187,"config":553},{"href":189,"dataGaName":190,"dataGaLocation":474},{"text":192,"config":555},{"href":194,"dataGaName":195,"dataGaLocation":474},{"text":557,"config":558},"Öffentlicher Sektor",{"href":199,"dataGaName":200,"dataGaLocation":474},{"text":560,"config":561},"Bildungswesen",{"href":562,"dataGaName":563,"dataGaLocation":474},"/de-de/solutions/education/","education",{"text":565,"config":566},"Finanzdienstleistungen",{"href":567,"dataGaName":568,"dataGaLocation":474},"/de-de/solutions/finance/","financial services",{"title":207,"links":570},[571,573,575,577,580,582,584,586,588,590,592,594,596],{"text":219,"config":572},{"href":221,"dataGaName":222,"dataGaLocation":474},{"text":224,"config":574},{"href":226,"dataGaName":227,"dataGaLocation":474},{"text":229,"config":576},{"href":231,"dataGaName":232,"dataGaLocation":474},{"text":234,"config":578},{"href":236,"dataGaName":579,"dataGaLocation":474},"docs",{"text":257,"config":581},{"href":259,"dataGaName":5,"dataGaLocation":474},{"text":252,"config":583},{"href":254,"dataGaName":255,"dataGaLocation":474},{"text":261,"config":585},{"href":263,"dataGaName":264,"dataGaLocation":474},{"text":274,"config":587},{"href":276,"dataGaName":277,"dataGaLocation":474},{"text":266,"config":589},{"href":268,"dataGaName":269,"dataGaLocation":474},{"text":279,"config":591},{"href":281,"dataGaName":22,"dataGaLocation":474},{"text":283,"config":593},{"href":285,"dataGaName":286,"dataGaLocation":474},{"text":288,"config":595},{"href":290,"dataGaName":291,"dataGaLocation":474},{"text":293,"config":597},{"href":295,"dataGaName":296,"dataGaLocation":474},{"title":311,"links":599},[600,602,604,606,608,610,612,616,621,623,625,627],{"text":318,"config":601},{"href":320,"dataGaName":313,"dataGaLocation":474},{"text":323,"config":603},{"href":325,"dataGaName":326,"dataGaLocation":474},{"text":331,"config":605},{"href":333,"dataGaName":334,"dataGaLocation":474},{"text":336,"config":607},{"href":338,"dataGaName":339,"dataGaLocation":474},{"text":341,"config":609},{"href":343,"dataGaName":344,"dataGaLocation":474},{"text":346,"config":611},{"href":348,"dataGaName":349,"dataGaLocation":474},{"text":613,"config":614},"Sustainability",{"href":615,"dataGaName":613,"dataGaLocation":474},"/sustainability/",{"text":617,"config":618},"Vielfalt, Inklusion und Zugehörigkeit",{"href":619,"dataGaName":620,"dataGaLocation":474},"/de-de/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":351,"config":622},{"href":353,"dataGaName":354,"dataGaLocation":474},{"text":361,"config":624},{"href":363,"dataGaName":364,"dataGaLocation":474},{"text":366,"config":626},{"href":368,"dataGaName":369,"dataGaLocation":474},{"text":628,"config":629},"Transparenzerklärung zu moderner Sklaverei",{"href":630,"dataGaName":631,"dataGaLocation":474},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"title":633,"links":634},"Nimm Kontakt auf",[635,638,640,642,647,652,657],{"text":636,"config":637},"Sprich mit einem Experten/einer Expertin",{"href":51,"dataGaName":52,"dataGaLocation":474},{"text":380,"config":639},{"href":382,"dataGaName":383,"dataGaLocation":474},{"text":385,"config":641},{"href":387,"dataGaName":388,"dataGaLocation":474},{"text":643,"config":644},"Status",{"href":645,"dataGaName":646,"dataGaLocation":474},"https://status.gitlab.com/","status",{"text":648,"config":649},"Nutzungsbedingungen",{"href":650,"dataGaName":651,"dataGaLocation":474},"/terms/","terms of use",{"text":653,"config":654},"Datenschutzerklärung",{"href":655,"dataGaName":656,"dataGaLocation":474},"/de-de/privacy/","privacy statement",{"text":658,"config":659},"Cookie-Einstellungen",{"dataGaName":660,"dataGaLocation":474,"id":661,"isOneTrustButton":24},"cookie preferences","ot-sdk-btn",{"items":663},[664,666,668],{"text":648,"config":665},{"href":650,"dataGaName":651,"dataGaLocation":474},{"text":653,"config":667},{"href":655,"dataGaName":656,"dataGaLocation":474},{"text":658,"config":669},{"dataGaName":660,"dataGaLocation":474,"id":661,"isOneTrustButton":24},"content:shared:de-de:main-footer.yml","Main Footer","shared/de-de/main-footer.yml","shared/de-de/main-footer",[675],{"_path":676,"_dir":677,"_draft":6,"_partial":6,"_locale":7,"content":678,"config":682,"_id":684,"_type":28,"title":14,"_source":30,"_file":685,"_stem":686,"_extension":33},"/en-us/blog/authors/justin-tobler","authors",{"name":14,"config":679},{"headshot":680,"ctfId":681},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664737/Blog/Author%20Headshots/james_tobler_headshot.png","5pnOIbNI1Sc5IFnReNHNtv",{"template":683},"BlogAuthor","content:en-us:blog:authors:justin-tobler.yml","en-us/blog/authors/justin-tobler.yml","en-us/blog/authors/justin-tobler",{"_path":688,"_dir":36,"_draft":6,"_partial":6,"_locale":7,"header":689,"eyebrow":690,"blurb":691,"button":692,"secondaryButton":696,"_id":698,"_type":28,"title":699,"_source":30,"_file":700,"_stem":701,"_extension":33},"/shared/de-de/next-steps","Stelle jetzt bessere Software schneller bereit","Mehr als 50 % der Fortune-100-Unternehmen vertrauen GitLab","Erlebe, was dein Team mit der intelligenten\n\n\nDevSecOps-Plattform erreichen kann.\n",{"text":44,"config":693},{"href":694,"dataGaName":47,"dataGaLocation":695},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":49,"config":697},{"href":51,"dataGaName":52,"dataGaLocation":695},"content:shared:de-de:next-steps.yml","Next Steps","shared/de-de/next-steps.yml","shared/de-de/next-steps",1758662295181]