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?

Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
quelle
10
Dies sollte für jedes Versionskontrollsystem aufgeteilt werden.
Ciro Santilli 法轮功 冠状 病 六四.

Antworten:

63
Commit title

Commit body

Co-authored-by: name <[email protected]>
Co-authored-by: name <[email protected]>

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 <[email protected]>

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

Gerry
quelle
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 <[email protected]>

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 ).

Kariem
quelle
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.

Bialix
quelle
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
[email protected]

für dich.

Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
quelle
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?

Jakub Kukul
quelle
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.

foo0x29a
quelle
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
3

Wir fügen unsere Namen zu jeder Festschreibungsnachricht am Ende als Konvention hinzu, z. Implemented cool feature <Aneesh | Hiren>

Aneesh
quelle
4
Dies ähnelt der Git-Konvention, die Co-Authored-Byich in einer separaten Antwort erwähnt habe
Kariem
2

Versuchen Sie es mit git-mob . Wir haben es entwickelt, um Co-Autoren Commits zuzuweisen.

Z.B

git mob <initials of co-authors>
git commit
git solo
Dennis
quelle
1

Die meisten Co-Author-Tools unterstützen die automatische Vervollständigung nicht. Sie können Git-Coco ausprobieren , das in Python3 geschrieben ist (ich bin der Entwickler). git-cocounterstützt Autocomplete und Auto-Suggestion. Hier ist eine automatische Vervollständigung des Schnappschusses der Beispielautoren

nsn
quelle