Gibt es eine einfache Möglichkeit, Git dazu zu bringen, jedes erstellte Commit oder Tag immer zu signieren?
Ich habe es mit so etwas versucht:
Alias Commit = Commit -S
Aber das hat den Trick nicht getan.
Ich möchte kein anderes Programm installieren, um dies zu ermöglichen. Ist es mit Leichtigkeit machbar?
Nur eine Nebenfrage, vielleicht sollten Commits nicht signiert werden, nur Tags, die ich nie erstelle, da ich einzelne Commits für ein Projekt wie Homebrew usw. einreiche.
git
public-key-encryption
gnupg
MindTooth
quelle
quelle
git filter-branch -f --commit-filter 'git commit-tree -S "$@"' HEAD@{u}..HEAD
(Ich meine nicht, dass Sie dies verwenden sollten).Antworten:
Hinweis: Wenn Sie nicht die
-S
ganze Zeit hinzufügen möchten, um sicherzustellen, dass Ihre Commits signiert sind, gibt es einen Vorschlag (Zweig 'pu
' für den Moment , Dezember 2013, daher keine Garantie, dass es zu einer Git-Version kommt), einen hinzuzufügen Konfiguration, die diese Option für Sie erledigt.Update Mai 2014: Es ist in Git 2.0 (nachdem es in dieser Patch-Serie erneut gesendet wurde )
Siehe Commit 2af2ef3 von Nicolas Vigier (boklm) :
Fügen Sie die
commit.gpgsign
Option zum Signieren aller Commits hinzuDiese Konfiguration wird normalerweise pro Repo festgelegt (Sie müssen Ihre privaten experimentellen lokalen Repos nicht signieren):
Sie würden dies mit einer
user.signingKey
als globale Einstellung verwendeten kombinieren (eindeutiger Schlüssel, der für alle Repos verwendet wird, für die Sie ein Commit signieren möchten).user.signingKey
wurde in git 1.5.0 (Jan. 2007) mit commit d67778e eingeführt :Dies wird mit erzwungen begehen aba9119 (git 1.5.3.2), um den Fall zu fangen , wo Wenn der Benutzer falsch konfiguriert hat
user.signingKey
in ihrem.git/config
oder hat keinen geheimen Schlüssel auf ihrem Schlüsselbund.Anmerkungen:
signingKey
, nichtsigningkey
, auch wenn diegit config
Tasten Groß- und Kleinschreibung. Das wäre egal , nur wenn Sie das tungit config --get-regexp
, was ist Groß- und Kleinschreibung, sonst ist es nur eine Lesbarkeit Konvention;git push --signed
deruser.signingKey
Konfigurationswert nicht berücksichtigt wurde .user.signingKey
Signieren von mit Anmerkungen versehenen Tags sowie von Commits erzwungen : Commit 61c2fe0 .quelle
Ersetzen Sie 9E08524833CB3038FDE385C54C0AFCCFED5CDE14 durch Ihre Schlüssel-ID. Denken Sie daran: Es ist niemals eine gute Idee, die kurze ID zu verwenden .
UPDATE: Pro ein neues git Edikt , alle Konfigurationsschlüssel in camelcase sein sollte.
quelle
~/.gnupg/gpg-agent.conf
und hinzufügenpinentry-program /usr/bin/pinentry-gtk-2
( gemäß diesem Handbuch wiki.archlinux.org/). index.php / GnuPG # pinentry )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:
Kurze Antwort: Ja, aber tu es nicht.
Adressierung des Tippfehlers in der Frage:
git commit -s
Unterzeichnet das Commit nicht. Eher von derman git-commit
Seite:Dies ergibt eine Protokollausgabe ähnlich der folgenden:
Beachten Sie das Bit "Abgemeldet von: ...". das wurde durch die
-s
Flagge auf der generiertgit-commit
.Zitieren der Release-Ankündigungs-E-Mail :
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:
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:
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.quelle
git blame
an jeden weiterleiten , den er möchte.Damit die automatische Signatur vor Git Version 2.0 funktioniert, müssen Sie einen Git-Alias für das Commit hinzufügen.
quelle
Sie müssen klarstellen, dass Sie beim Unterzeichnen eines Commits oder Tags nicht bedeuten, dass Sie den gesamten Verlauf genehmigen. Im Falle von Commits unterschreiben Sie nur die vorliegende Änderung, und im Falle eines Tags müssen Sie definieren, was Sie damit meinen. Möglicherweise haben Sie eine Änderung vorgenommen, die behauptet, sie stamme von Ihnen, war es aber nicht (weil jemand anderes sie auf Ihre Fernbedienung übertragen hat). Oder es ist eine Änderung, an der Sie nicht teilnehmen möchten, aber Sie haben gerade das Tag signiert.
In typischen OSS-Projekten ist dies möglicherweise weniger häufig, aber in einem Unternehmensszenario, in dem Sie nur ab und zu Code berühren und nicht den gesamten Verlauf lesen, wird dies möglicherweise unbemerkt.
Das Unterzeichnen von Commits ist ein Problem, wenn sie an andere Eltern weitergegeben werden. Es wäre jedoch gut, wenn ein geändertes Commit auf das "ursprüngliche" Commit verweisen könnte, das tatsächlich überprüft wird.
quelle
commit.gpgsign
auf true setzen , wie von @VonC