2013-02-22 6 views
7

Meine Client-Git-Version ist 1.7.0.4.git add Signed-off-by-Zeile mit format.signoff funktioniert nicht

Ich möchte automatisch eine "Signed-off-by" -Zeile für den Committer am Ende der Commit-Protokollnachricht hinzufügen, wenn eine Nachricht festgeschrieben wird.

  1. Als ich eingestellt git config --global format.signoff true und laufen git commit -m "modify something", ich habe keine "Signed-off-by" in git log sehen.
  2. Wenn ich git commit -m -s "modify something" verwende, dann wird "Signed-off-by" in git log angezeigt.

Kann jemand helfen?

+0

weiß jemand? – Venus

Antwort

4

Update für Git 2.14.x/2.15: wie ich in "Git - Detect if commit is signed off programmatically" erwähnt, können Sie einen Commit-Nachrichtentrailer für Signed-off-By Zeile analysieren.

git interpret-trailers“ hat eine „--parse“ und ein paar andere Optionen gelehrt worden, um es einfacher für Skripte aus einer Log-Nachricht verpflichten bestehende Anhänger Linien zu greifen.

See stefanct ‚s answer für commit-msg client-side hook die git interpret-trailers verwenden würde.


Original-Antwort (2013)

format.signoff ist about patch (wie dargestellt, zum Beispiel in this patch):

format.signoff 

Ein boolean Wert, den Sie die -s/aktivieren können - -signoff-Option von format-patch standardmäßig

Es hat keine Auswirkungen auf git commit -s.

Mit anderen Worten: Sie müssen jeden begehen nicht SIGNOFF, aber wenn man sie als Patch veröffentlichen für andere (wie in „git: submitting patches“) zu verwenden, dann Sie eigenhändig zu unterschreiben.

Die genaue Bedeutung von Signed-of-by finden Sie unter "What is the Sign Off feature in Git for?".

7

Sie können signoff standardmäßig in einem Projekt durch Erstellen einer Datei (sagen "~/MyProject/git-Template"), die einige Leerzeilen und den signierten-off-by Text wie folgt enthält:

Signed-off-by: Your Name <[email protected]> 

Konfigurieren Sie dann git, um das als eine Commit-Vorlage zu verwenden. Zum Beispiel:

git config commit.template ~/MYPROJECT/git-template 

Stellen Sie sicher, Ihr Projekt Dokumente irgendwo was unterzeichnet-off-durch für das Projekt. Hier ist ein Text, den Sie in Ihr CONTRIBUTING kopieren können.MD-Datei:

Alle Beiträge (einschließlich Pull-Anforderungen) müssen der Developer Certificate of Origin (DCO) Version 1.1 zustimmen. Dies ist genau das gleiche, das von den Linux-Kernel-Entwicklern erstellt und verwendet und auf http://developercertificate.org/ veröffentlicht wurde. Dies ist eine Zertifizierung des Entwicklers, dass er oder sie das Recht hat, den Patch zur Aufnahme in das Projekt einzureichen. Wenn Sie lediglich einen Beitrag einreichen, wird diese Vereinbarung jedoch unter mit einem "Signed-off-by" -Tag in jedem Patch (dieses Tag ist eine konventionelle Möglichkeit zur Bestätigung, dass Sie dem DCO zustimmen) angegeben.

3

Es gibt jetzt eine einfache Möglichkeit, Commits automatisch zu signieren, die nicht bereits mit Hooks und dem Befehl git-interpret-trailers abgemeldet wurden. In der kommenden Version 2.15 von git erlaubt der Befehl, trivial nach einer bestehenden Abzeichnung zu suchen (egal, was sein Wert/Autor ist) und fügt deine hinzu, wenn es noch keine gibt. Ab Oktober 2017 ist der erforderliche Code nicht in einem git-release noch (aber in seinem master Zweig)!

Speichern Sie die folgenden als .git/hooks/prepare-commit-msg oder .git/hooks/commit-msg (siehe here für die Unterschiede) und machen Sie es ausführbar.

#!/bin/sh 

NAME=$(git config user.name) 
EMAIL=$(git config user.email) 

if [ -z "$NAME" ]; then 
    echo "empty git config user.name" 
    exit 1 
fi 

if [ -z "$EMAIL" ]; then 
    echo "empty git config user.email" 
    exit 1 
fi 

git interpret-trailers --if-exists doNothing --trailer \ 
    "Signed-off-by: $NAME <$EMAIL>" \ 
    --in-place "$1" 
+0

Schön gemacht. +1. Ich verweise auf Ihre Antwort in meiner für mehr Sichtbarkeit und Referenz https://StackOverflow.com/a/41361273/6309, wo ich "git interpret-trailers" erwähnt. – VonC