2010-03-11 5 views
6

Ich möchte einen vertrauenswürdigen Pfad für die Softwareentwicklung erstellen. Diese bedeutet, dass jede Änderung in Code muss vom Autor und einem Prüfer unterzeichnet werden, bevor sie akzeptiert werden. Diese Signaturen für die Änderungen müssen zum Release-Zeitpunkt überprüfbar sein, oder es muss einige andere Mittel geben, um sicherzustellen, dass das Repository manipuliert worden sein kann, oder zusätzliche Änderungen hinzugefügt wurden.Trusted Entwicklungspfad in Git mit Signaturen

Das Versionskontrollsystem, das ich für diesen Zweck verwenden möchte, ist Git, aber andere Optionen werden ebenfalls akzeptiert. Die Signierung kann über GnuPG oder SSL-Zertifikate erfolgen.

Der Workflow ich grob wäre denke:

  1. Aktuelle prüft Stamm
  2. Veränderungen in der Branche von einem oder mehreren Entwicklern entwickelt werden abzweigt
  3. Ein oder mehrere Entwickler die Änderungen vorgenommen unterzeichnen der Zweig
  4. Ein Rezensent und prüft die Änderungen
  5. Bewertungs die Änderungen unterzeichnet von der Niederlassung gemacht
  6. Branch „verschmolzen“ in der aktuellen nachgewiesenen Stamm

Merging muss nicht narrensicher sein wie die nicht überprüfen Änderungen nicht-zusammenführbar Stamm sein müßte - nur, dass vor einen Release, muss es eine sein Möglichkeit, zu überprüfen, ob nicht geprüfte (unsigned) Änderungen in der Amtsleitung sind. Und im Allgemeinen muss Manipulation nicht verhindert werden, nur entdeckt werden.

Ich möchte eine kurze Anleitung, wie Sie dies einrichten und wie jede Operation durchgeführt wird. Sobald ich ein paar Hinweise habe, kann ich die Besonderheiten selbst herausfinden.

Auch ich weiß technisch schon über 'git tag -s', aber ich bin unsicher, wie man es auf dieses spezielle Problem anwendet.

+0

Es gab bisher keine konkreten Antworten, die die ganze Geschichte wiedergeben, also lasse ich es offen. Ich probiere selbst einige Möglichkeiten aus und wenn ich mir eine konkrete ausdenke, werde ich die Antwort hier posten. – Nakedible

Antwort

2

Die Änderungen werden erst nach der Markierung signiert. Alles, was vor diesem Punkt liegt, kann vom Autor oder einem anderen Out-of-Band-Mechanismus verifiziert werden, aber nicht innerhalb von Git.

git kann überprüfen, ob das Erbe einer Änderung korrekt ist, aber nur das signierte Tag kann überprüfen, ob die Änderung korrekt ist.

Für Ihren Arbeitsablauf können Sie nur feststellen, dass Sie viel taggen.

+0

Es scheint, dass ich die konkrete Lösung selbst herausfinden muss. – Nakedible

+1

@Nakedible Beachten Sie, dass ab [Git 1.7.9] (https://git.kernel.org/?p=git/git.git;a=blob_plain;f=Documentation/RelNotes/1.7.9.txt;hb = HEAD) einzelne Commits können mit -S signiert werden. Und Signaturen können mit der Option "--show-signature" in "git log" angezeigt werden. –

+0

Vielen Dank für die Informationen. Es scheint jedoch, dass -S nur funktioniert, wenn das Commit ausgeführt wird, und Commits können später nicht signiert werden. Ich hoffe, ich täusche mich deswegen. – Nakedible

0

Git ist ein guter Kandidat seit:

  • jeweils Commits bereits unterzeichnet sind
  • den SHA1-Schlüssel für jede begehen genug ist, die alle Repo sicher sein nicht
  • git-Tag geändert worden es kann verwendet werden, um jemanden ein commit zu unterzeichnen hatte noch keine (git tag -m is more explicit)

So:

  1. Aktuelle prüft Stamm verzweigte
    git checkout -b tag_for_last_verified_trunk_content test # branch test
  2. Änderungen werden in der Branche durch einen oder mehrere Entwickler
    [work...] git commit -s -m "dev1 comment" ...
  3. Ein oder mehrere Entwickler unterzeichnen die

    durch den Zweig Änderungen entwickelt

    Bereits getan mit ihren commits, durch Hinzufügen einer Signed-of-Zeile am Ende der Commit-Nachricht: siehe diese Seite für explanation on the signed-off Prozess.

    Signed-off-by: user name
  4. Rezensent Bewertungen und testet die Änderungen

     git tag -m "testing" testing # refer to current commit, 
               allowing dev to go on with further changes
  5. Bewerter unterzeichnen die von der Niederlassung Änderungen
    git tag -m "tested" tested testing # put a tag on the same SHA1 than 
                the "testing" tag
  6. Branch "verschmolzen" in der aktuellen nachgewiesenen Stamm
    git checkout trunk & git merge tested

Cyryl Plotnicki-Chudykin the comments erwähnt, die seit git 1.7.9 (Januar 2012 fast 2 Jahre nach dieser Antwort), können Sie die GPG signieren jede verpflichten Sie wollen, mit git commit -S.
(Siehe commit ba3c69a9, verfeinerte in jüngerer Zeit in commit df45cb3)

+0

Ich verstehe deine Erklärung nicht. Wie ist jeder Commit bereits unterschrieben? Sicher, das Commit enthält das SHA1 für alle Repos, aber nichts sagt, dass das Commit vom Autor im Commit gemacht wurde. Ich bin mir nicht bewusst, dass digitale Signaturen zum Commit gemacht werden? – Nakedible

+0

@Nakedible: Entschuldigung, ich habe die '-s'-Option beim Commit vergessen. Denken Sie daran, dies ist ein sehr leichtgewichtiger signierter Prozess (siehe den Link, den ich in meiner Antwort hinzugefügt habe, keine "digitalen Signaturen" im Gegensatz zu "tag -s") – VonC

+0

Hey, eigentlich seit git v1.7.9 ist es möglich zu GPG-signieren alle Commits, die Sie möchten. Verwenden Sie 'git commit -S', um das zu tun –

0

Sie Ihren Tag mit Ihrem GPG-Schlüssel mit Option es in Tag signieren git tag -s v0.1.0:

es

Make a GPG-signed tag, using the default e-mail address's key 

Sie können jedoch kein Commit signieren.

+0

Wie ich in meiner ursprünglichen Frage gesagt habe, kenne ich bereits die Option -s im Git-Tag, aber das löst nicht das ganze Problem. – Nakedible

+0

Entschuldigung für Wiederholung – shingara

+1

diesen Kommentar auch hier hinzufügen; tatsächlich seit git v1.7.9 ist es möglich, alle Commits, die Sie wollen, mit GPG zu signieren. Verwenden Sie 'git commit -S', um das zu tun –

Verwandte Themen