Wie ordne ich ein einzelnes Commit mehreren Entwicklern zu?


120

Alle Versionskontrollsysteme, mit denen ich vertraut bin, arbeiten so, dass jedes Commit einem einzelnen Entwickler zugeordnet wird. Der Aufstieg von Agile Engineering und insbesondere der Paarprogrammierung hat zu einer Situation geführt, in der zwei Entwickler einen wesentlichen Beitrag zur gleichen Aufgabe geleistet haben, beispielsweise eine Fehlerbehebung.

Das Problem der Attribution wird in einer Arbeitsumgebung keine große Rolle spielen, da der Projektmanager über die Arbeit der Paare informiert ist. Was ist jedoch, wenn zwei Open-Source-Mitarbeiter beschließen, Code zu koppeln und herauszubringen? zu einem bestimmten Projekt, das keine Ahnung hat, dass sie zusammenarbeiten. Gibt es eine Möglichkeit für ein Versionskontrollsystem wie Git, einen bestimmten Patch mehreren Entwicklern zuzuweisen?


10
Dies sollte für jedes Versionskontrollsystem aufgeteilt werden.
Ciro Santilli 法轮功 冠状 病 六四.

Antworten:


63
Commit title

Commit body

Co-authored-by: name <additional-dev-1@example.com>
Co-authored-by: name <additional-dev-2@example.com>

Ein Problem bei diesem Ansatz besteht darin, dass Sie keinen signierten Schlüssel für diese Gruppe von Entwicklern erstellen können. Sie können also im Wesentlichen jeden zu dieser Liste hinzufügen, selbst wenn er nicht an einem Feature gearbeitet hat und Github ihn so behandelt, als ob er es getan hätte. Dies sollte jedoch in den meisten Fällen kein Problem sein.

z.B Co-authored-by: Linus Torvalds <torvalds@linux-foundation.org>

Bei normalen Autoren oder Signiergruppen (die alte Methode) sehen Sie, dass sie nicht signiert sind, und wissen, dass Sie dem Commit nicht vertrauen können. Es gibt jedoch keinen Unterzeichnungsprozess für Co-Autoren.


Meist veraltete Antwort:

Eine Lösung wäre, einen Namen für das Paar festzulegen:

git config user.name "Chris Wilson and John Smith"

Hier ist ein verwandter Fehlerbericht mit anderen temporären Lösungen:

Bug Git-Core: Git sollte mehrere Autoren für ein Commit unterstützen


1
Was ist, wenn Sie die E-Mail-Adresse der Person nicht kennen? Gibt es eine Möglichkeit, den GitHub-Benutzernamen usw. zu verknüpfen?
Aaron Franke

Wenn sie eine vorherige Verpflichtung eingegangen sind, können Sie dies einfach überprüfen:git show <COMMIT_ID> --format=email
Gerry

2
Dies scheint bereits in GitLab zu funktionieren (siehe gitlab.com/gitlab-org/gitlab-foss/merge_requests/17919 )
Meiogordo

67

Eine Git-Konvention besteht darin, Co-Authored-By am Ende der Commit-Nachricht zu verwenden ( Git-Kernel: Commit-Nachrichten-Konventionen , die sich auf Openstack-Commit-Nachrichten beziehen ). Dies ist auch eine der Lösungen für den Git-Core-Fehler, der in Gerrys Antwort verlinkt ist

Co-authored-by: Some One <some.one@example.foo>

In diesem Kommentar vom 5. Mai 2010 schlägt Josh Triplett auch vor, entsprechende Unterstützung in git zu implementieren.

Wie Llopis in einem Kommentar betonte, kündigte GitHub am 29. Januar 2018 in seinem Blog Unterstützung dafür an: Commit zusammen mit Co-Autoren ( Details ).


8
Dies wird jetzt unterstützt von GitHub.
11.

@Llopis Habe gerade den Blog-Beitrag gesehen und bin hierher gekommen, um meine Antwort zu aktualisieren. Gut zu sehen, dass jemand schneller war :)
Kariem

Ich habe ein einfaches Git-Plugin geschrieben, um die automatische Verwaltung dieser von Co-Autoren verfassten Trailer zu
vereinfachen

Dieser Ansatz sieht aus wie ein Kludge (vgl. Den Basarweg ). Und auf diese Weise gibt es einen Hauptautor, zu dem die Mitautoren nur eine Ergänzung sind, wenn ich es richtig verstehe.
Ruslan

28

Für Basar:

bzr commit --author Joe --author Alice --author Bob

Diese Namen werden im Protokoll getrennt vom Namen des Committers angezeigt.


20

Git-Paar

https://github.com/pivotal/git_scripts#git-pair

Dieses einfache Skript von Pivotal zur Automatisierung der Programmierung von Git-Paaren.

Sie erstellen eine .pairsDatei wie:

# .pairs - configuration for 'git pair'
pairs:
  # <initials>: <Firstname> <Lastname>[; <email-id>]
  eh: Edward Hieatt
  js: Josh Susser; jsusser
  sf: Serguei Filimonov; serguei
email:
  prefix: pair
  domain: pivotallabs.com
  # no_solo_prefix: true
#global: true

und dann:

git pair sp js

Sätze:

user.name=Josh Susser & Sam Pierson
user.email=pair+jsusser+sam@pivotallabs.com

für dich.


13

git unterscheidet zwischen einem Commit authorund committer[1]. Sie können es als Workaround verwenden, z. B. sich selbst als committerund Ihren Co-Autor als author:

GIT_COMMITTER_NAME='a' GIT_COMMITTER_EMAIL='a@a' git commit --author 'b <b@b>'

Auf diese Weise werden sowohl Sie als auch Ihr Co-Autor in der Git-Historie aufgezeichnet. Laufen git log --format=fullergibt dir so etwas wie:

commit 22ef837878854ca2ecda72428834fcbcad6043a2
Author:     b <b@b>
AuthorDate: Tue Apr 12 06:53:41 2016 +0100
Commit:     a <a@a>
CommitDate: Tue Apr 12 09:18:53 2016 +0000

    Test commit.

[1] Unterschied zwischen Autor und Committer in Git?


4

Alternativ gibt es auf GitHub ein Open-Source-Projekt , an dem ich beteiligt bin, das eine gute Möglichkeit bietet, dies über die Befehlszeile zu tun. In diesem Projekt können Sie einen Alias ​​festlegen, um gemeinsam automatisierte Commits wie folgt zu erstellen:

$ git co-commit -m "Commit message" --co "co-author <co-author-email>"

Mit diesem Ansatz können Sie gemeinsam verfasste Commits ohne grafische Oberfläche erstellen.


5
Soweit ich sehen kann, handelt es sich hierbei um einen Git-Alias, der am Ende der Festschreibungsnachricht "Co-authored-by:" sowie "co-author <co-author-email>" hinzufügt.
Kariem



Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.