Comment attribuer un seul commit à plusieurs développeurs?

120

La façon dont fonctionnent tous les systèmes de contrôle de version que je connais est que chaque commit est attribué à un seul développeur. La montée en puissance de l'ingénierie agile, et plus particulièrement de la programmation par paires, a conduit à une situation où deux développeurs ont apporté une contribution significative à la même tâche, une correction de bogue par exemple.

La question de l'attribution ne sera pas trop importante dans un environnement de travail puisque le chef de projet sera conscient du travail que font les paires, mais qu'en est-il si deux contributeurs open source décident de s'associer et de sortir du code à un projet particulier qui n'a aucune idée qu'ils travaillent ensemble. Existe-t-il un moyen pour un système de contrôle de version comme Git d'attribuer un correctif particulier à plusieurs développeurs?

Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
la source
10
Cela doit être divisé pour chaque système de contrôle de version.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Réponses:

63
Commit title

Commit body

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

Un problème avec cette approche est que vous ne pouvez pas créer une clé signée pour ce groupe de développeurs, vous pouvez donc essentiellement ajouter n'importe qui à cette liste même s'il ne fonctionnait pas sur une fonctionnalité et Github la traiterait comme si c'était le cas. Cependant, cela ne devrait pas être un problème dans la plupart des cas.

par exemple Co-authored-by: Linus Torvalds <[email protected]>

Avec les auteurs normaux ou les groupes de signature (l'ancienne méthode), vous verriez qu'il n'est pas signé et que vous ne pouvez pas faire confiance au commit. Cependant, il n'y a pas de processus de signature pour les co-auteurs.


Réponse principalement obsolète:

Une solution serait de définir un nom pour la paire:

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

Voici un rapport de bogue associé avec d'autres solutions temporaires:

Bug git-core: Git devrait prendre en charge plusieurs auteurs pour un commit

Gerry
la source
1
Et si vous ne connaissez pas l'adresse e-mail de la personne? Un moyen de lier le nom d'utilisateur GitHub, etc.?
Aaron Franke
S'ils ont fait un commit précédent, vous pouvez simplement vérifier que:git show <COMMIT_ID> --format=email
Gerry
2
Cela semble déjà fonctionner dans GitLab (voir gitlab.com/gitlab-org/gitlab-foss/merge_requests/17919 )
Meiogordo
67

Une convention git consiste à utiliser Co-Authored-By à la fin du message de validation ( git kernel: Commit Message Conventions , faisant référence aux messages de validation Openstack ). C'est aussi l' une des solutions sur le bogue git-core lié dans la réponse de Gerry

Co-authored-by: Some One <[email protected]>

Dans ce commentaire du 5 mai 2010, Josh Triplett suggère également d'implémenter le support correspondant dans git.

Comme Llopis l'a souligné dans un commentaire, GitHub a annoncé son soutien à cela sur son blog le 29 janvier 2018: Commit avec les co-auteurs ( détails ).

Kariem
la source
8
Ceci est désormais pris en charge par GitHub.
llrs
@Llopis Je viens de voir le billet de blog et je suis venu ici pour mettre à jour ma réponse. C'est bien de voir que quelqu'un était plus rapide :)
Kariem
J'ai écrit un simple plugin git pour faciliter la gestion automatique de ces bandes-annonces co
créées
Cette approche ressemble à un kludge (cf. la méthode Bazar ). Et il y a un auteur principal de cette façon, auquel les co-auteurs ne sont qu'un ajout, si je comprends bien.
Ruslan
28

Pour Bazaar:

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

Ces noms seront affichés dans le journal séparément du nom du validateur.

bialix
la source
20

git-pair

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

Ce simple script de Pivotal pour automatiser l'attribution de la programmation de paires Git.

Vous créez un .pairsfichier comme:

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

puis:

git pair sp js

ensembles:

user.name=Josh Susser & Sam Pierson
[email protected]

pour vous.

Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
la source
13

git fait la distinction entre un commit authoret committer[1]. Vous pouvez l'utiliser comme solution de contournement, par exemple vous inscrire en tant que committeret votre co-auteur en tant que author:

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

De cette façon, vous et votre co-auteur serez enregistrés dans l'historique de git. Courir git log --format=fuller, vous donnera quelque chose comme:

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] Différence entre auteur et committer dans Git?

Jakub Kukul
la source
4

Alternativement, il existe un projet open source , dont je suis un contributeur, sur GitHub qui fournit un bon moyen de le faire à partir de la ligne de commande. Ce projet vous aide à définir un alias afin de créer des commits coautorisés comme suit:

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

En utilisant cette approche, vous pouvez créer des commits co-créés sans interface graphique.

foo0x29a
la source
5
D'après ce que je peux voir, c'est un alias git qui ajoute "Co-authored-by:" plus le "co-author <co-author-email>" à la fin du message de commit.
Kariem
3

Nous ajoutons nos noms à chaque message de validation à la fin comme convention, par exemple: Implemented cool feature <Aneesh | Hiren>

Aneesh
la source
4
Ceci est similaire à la convention git que Co-Authored-Byj'ai mentionnée dans une réponse séparée
Kariem
2

Essayez git-mob , nous l'avons construit pour attribuer des co-auteurs sur les commits.

Par exemple

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

La plupart des outils co-auteurs ne prennent pas en charge la saisie semi-automatique. Vous pouvez essayer git-coco , il est écrit en python3 (je suis le développeur). git-cocoprend en charge la saisie semi-automatique et la suggestion automatique. Voici un instantané de saisie semi-automatique sur des exemples d'auteurs

nsn
la source