Edit: Wie von Git Version 1.7.9, es ist möglich , Git Commits zu unterzeichnen ( git commit -S
). Aktualisieren Sie die Antwort leicht, um dies widerzuspiegeln.
Der Fragentitel lautet:
Gibt es eine Möglichkeit, Commits in Git mit einem GPG-Schlüssel automatisch zu signieren?
Kurze Antwort: Ja, aber tu es nicht.
Adressierung des Tippfehlers in der Frage: git commit -s
Unterzeichnet das Commit nicht. Eher von der man git-commit
Seite:
-s, --signoff
Add Sign-off-by-Zeile vom Committer am Ende der Commit-Protokollnachricht.
Dies ergibt eine Protokollausgabe ähnlich der folgenden:
± $ git log [0:43:31]
commit 155deeaef1896c63519320c7cbaf4691355143f5
Author: User Name
Date: Mon Apr 16 00:43:27 2012 +0200
Added .gitignore
Signed-off-by: User Name
Beachten Sie das Bit "Abgemeldet von: ...". das wurde durch die -s
Flagge auf der generiert git-commit
.
Zitieren der Release-Ankündigungs-E-Mail :
- "git commit" lernte "-S", um das Commit zu GPG-signieren; Dies kann mit der Option "--show-Signatur" für "Git-Protokoll" angezeigt werden.
Also ja, Sie können Commits unterschreiben. Ich persönlich rufe jedoch bei dieser Option zur Vorsicht auf. Das automatische Signieren von Commits ist nahezu sinnlos, siehe unten:
Nur eine Nebenfrage, vielleicht sollten Commits nicht signiert werden, nur Tags, die ich nie erstelle, wenn ich einzelne Commits einreiche.
Das ist richtig. Commits werden nicht unterzeichnet. Tags sind. Der Grund dafür ist in dieser Nachricht von Linus Torvalds zu finden , deren letzter Absatz besagt:
Jedes Commit zu unterschreiben ist total dumm. Es bedeutet nur, dass Sie es automatisieren und die Signatur weniger wert ist. Es bringt auch keinen wirklichen Mehrwert, da die Art und Weise, wie die Git-DAG-Kette von SHA1 funktioniert, Sie immer nur eine
Signatur benötigen , damit alle von dieser erreichbaren Commits effektiv von dieser abgedeckt werden. Das Unterschreiben jedes Commits geht also einfach daneben.
Ich würde dazu ermutigen, die verknüpfte Nachricht zu durchsuchen, um zu verdeutlichen, warum das automatische Signieren von Commits keine weitaus bessere Idee ist als ich.
Allerdings , wenn Sie möchten , um automatisch ein Zeichen Tag , würden Sie in der Lage sein , das zu tun , indem die Verpackung git-tag -[s|u]
in einem Alias; Wenn Sie dies tun, möchten Sie wahrscheinlich Ihre Schlüssel-ID ~/.gitconfig
oder die projektspezifische .git/config
Datei einrichten. Weitere Informationen zu diesem Prozess finden Sie im Git-Community-Buch . Das Signieren von Tags ist unendlich nützlicher als das Signieren jedes von Ihnen vorgenommenen Commits.