(Dies basiert größtenteils auf A Git Horror Story: Repository-Integrität mit signierten Commits - eine sehr gute Lektüre und mehr Informationen, als ich in eine Antwort schreiben könnte.)
Es gibt eine Reihe von Möglichkeiten, wie ein Git-Repository kompromittiert werden kann (dies ist keine Sicherheitslücke, sondern eine Tatsache des Lebens - aus diesem Grund sollte die Verwendung von Git nicht vermieden werden). Zum Beispiel könnte jemand in Ihr Repository gestoßen sein und behauptet, Sie zu sein. Oder es könnte jemand in das Repository eines anderen gestoßen sein, der behauptet, Sie zu sein (jemand könnte in sein eigenes Repository gestoßen sein, der behauptet, Sie zu sein). Dies ist nur ein Teil des Lebens in einem DVCS.
Nur als Beispiel:
$ git config --global user.name 'Madara Uchiha'
$ git config --global user.email muchiha@example.com
Dort habe ich meine Git-Konfiguration geändert, um so zu tun, als ob ich du wäre. Und jetzt kann ich mich zurückziehen und diese Verpflichtungen irgendwie in die Produktion einfließen lassen, und es sieht so aus, als hätten Sie es geschafft.
Durch das Signieren der Commits (und Tags) kann nachgewiesen werden, dass bestimmte Commits und Tags von Ihnen stammen (und Dinge, die nicht signiert sind, sollten es nicht in den Produktions-Build geschafft haben). Das ist wirklich der Schlüssel zu allem. Indem Sie Commits unterzeichnen, sagen Sie, dass es Ihre Arbeit ist.
Der Aspekt "Ihre Arbeit" ist besonders wichtig im Linux-Kernel (und damit im Git), der gelegentlich von Urheberrechtsstreitigkeiten betroffen ist. Durch das Signieren von Commits bestätigen Sie, dass Sie das Recht an der Software haben - sie verfolgt den Ursprung. Möglicherweise haben Sie keinen Zugriff auf die Quelle, für die Urheberrechte geltend gemacht werden, und der Anspruch ist unbegründet. Es kann sein, dass die Firma vergessen hat, dass Sie vor ein paar Jahren für sie gearbeitet haben und unter ihrer Leitung Material zum Kernel hinzugefügt haben, oder was auch immer.
Es wird diskutiert, ob jedes Commit unterschrieben werden soll. Von GPG Signieren für Git Commit? (Zurück in '09), schrieb Linus:
Es ist total dumm, jedes Commit zu unterschreiben. Es bedeutet nur, dass Sie es automatisieren und die Signatur weniger wert ist. Es bringt auch keinen wirklichen Mehrwert, da Sie für die Arbeitsweise der git DAG-Kette von SHA1 immer nur eine Signatur benötigen, um alle von dieser erreichbaren Commits effektiv von dieser abzudecken. Wenn Sie also jedes Commit unterschreiben, kommt es einfach nicht darauf an.
Viel mehr über die Überlegungen zur Anmeldung bei git können Sie auch dort nachlesen.
Das heißt, es machte seinen Weg in den Schwachsinn sowieso.
Es scheint mehrheitlich Konsens zu bestehen, dass das Signieren von Commits unnötig ist, aber das Signieren von Tags ist sehr gut. Der Blog-Eintrag, der oben verlinkt ist, schlägt vor, dass man sowieso alles unterschreiben sollte. Wie gesagt, es gibt einige Debatten darüber, ob jedes Commit notwendig ist oder nicht.
Der Schlüssel für die Debatte "Sign every commit" hängt wahrscheinlich mit dem von Ihnen verwendeten Workflow zusammen. Die meisten Leute machen ein paar Commits in ihrem lokalen Repo und pushen dann dieses Set. Es sollte ausreichen, die endgültige Sammlung mit einem Tag zu versehen (vorausgesetzt, Sie stellen sicher, dass alle Änderungen korrekt sind). Wenn Sie in einer Umgebung arbeiten, in der sich viele einzelne Commits bewegen, wird die Unterscheidung zwischen einem Tag und einem Commit weniger deutlich - und das Signieren von Commits wird möglicherweise nützlicher.