Daher überprüfte ein Peer meine Arbeit und sagte mir, dass ich meine Commits und Tags immer kryptografisch signieren sollte. Auf die Frage, warum, wusste er nicht, dass er es mir erklären sollte, und sagte: "Es ist einfach eine gute Sache."
Warum sollte ich wirklich versuchen, ein offensichtliches Schimpansenszenario zu vermeiden ? Gibt es wirklich so viele unterschiedliche Vor- und Nachteile?
Was sind die praktischen Gründe, die mich dazu bringen würden, jedes Commit und Tag zu unterschreiben, das ich mache?
git
cryptography
Madara Uchiha
quelle
quelle
Antworten:
(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:
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:
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.
quelle
commit.gpgsign = true
und kann keine Nachteile feststellen. Es mag zwar albern sein, scheint aber nicht zu teuer zu sein.