How to attribute a single commit to multiple developers?
Asked Answered
O

9

208

The way all version control systems I'm familiar with work is that each commit is attributed to a single developer. The rise of Agile Engineering, and specifically pair programming, has lead to a situation where two developers have made a significant contribution to the same task, a bug fix for example.

The issue of attribution won't be too much of a big deal in a work environment since the project manager will be aware of the work the pairs are doing, but what about if two open source contributors decide to pair up and push out some code to a particular project that has no idea they're working together. Is there any way for a version control system like Git to attribute a particular patch to multiple developers?

Okajima answered 16/9, 2011 at 8:38 Comment(1)
This should be split for each version control system.Dagoba
D
178
Commit title

Commit body

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

One problem with this approach is that you can't create a signed key for this group of devs, so you could essentially add anybody to this list even if they didn't work on a feature and GitHub would treat it as if they did. However, this shouldn't be an issue in most cases.

e.g. Co-authored-by: Linus Torvalds <[email protected]>

With normal authors or signing groups (the old method) you would see it's not signed and know that you can't trust the commit. However, there is no signing process on co-authors.


Mostly outdated answer:

One solution would be to set a name for the pair:

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

Here is a related bug report with other temporary solutions:

Bug git-core: Git should support multiple authors for a commit

Decimate answered 16/9, 2011 at 8:51 Comment(3)
What about if you don't know the person's Email address? Any way to link GitHub username etc?Turgid
If they made a previous commit you can just check that: git show <COMMIT_ID> --format=emailDecimate
This seems to already be working in GitLab (see gitlab.com/gitlab-org/gitlab-foss/merge_requests/17919)Horseshoe
Q
78

A git convention is to use Co-authored-by at the end of the commit message (git kernel: Commit Message Conventions, referring to Openstack Commit Messages). This is also one of the solutions on the git-core bug linked in Gerry's answer

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

In that comment on May 5, 2010, Josh Triplett also suggests implementing corresponding support in git.

As Llopis pointed out in a comment, GitHub announced support for this on their blog on Jan 29, 2018: Commit together with co-authors (details).

Quadrennium answered 25/1, 2017 at 9:1 Comment(3)
This is now supported by GitHub.Wallywalnut
I wrote a simple git plugin to make it easier to manage these Co-authored-by trailers automatically: github.com/cac04/git-pairSharma
This approach looks like a kludge (cf. the Bazaar way). And there's a principal author this way, to which the co-authors are just an addition, if I understand it correctly.Subdebutante
E
27

For Bazaar:

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

Those names will be shown in the log separately from committer name.

Electromagnetic answered 16/9, 2011 at 9:42 Comment(0)
D
23

git-pair

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

This simple script from Pivotal to automate Git pair programming attribution.

You create a .pairs file like:

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

and then:

git pair sp js

sets:

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

for you.

Dagoba answered 12/9, 2014 at 15:2 Comment(1)
Unfortunately no longer maintained and does not use the proper format recognized by Github or Gitlab.Ology
G
20

git distinguishes between a commit's author and committer [1]. You could use it as a work-around, e.g. sign yourself as the committer and your co-author as the author:

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

This way, both you and your co-author will be recorded in the git history. Running git log --format=fuller, will give you something like:

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] Difference between author and committer in Git?

Gongorism answered 11/5, 2016 at 12:11 Comment(1)
One downside with this approach is that if one applies the change as e.g. a cherry-pick that the committer will not be kept.Sentimentality
O
8

Try git-mob, we built it for attributing co-authors on commits.

E.g.

git mob <initials of co-authors>
git commit
git solo
Outflow answered 8/4, 2018 at 22:54 Comment(0)
S
8

Alternatively, there is an open source project, which I contribute to, on GitHub that provides a good way to do it from the command line. This project helps you to set an alias in order to create co-authored commits as follows:

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

Using this approach, you are able to create co-authored commits without a graphical interface.

Sirkin answered 10/6, 2018 at 23:17 Comment(2)
From what I can see, this is a git alias that adds "Co-authored-by: " plus the "co-author <co-author-email>" to the end of the commit message.Quadrennium
Excellent piece of code here, worked flawlessly and achieved the desired effect of having a specific co-author on my PR.Neusatz
M
4

We add our names to each commit message at the end as a convention eg : Implemented cool feature <Aneesh | Hiren>

Maintain answered 16/9, 2011 at 8:56 Comment(1)
This is similar to the git convention Co-Authored-By I mentioned in a separate answerQuadrennium
A
1

Most of the co-author tools do not support autocompletion. You can try git-coco, its written in python3 (I'm the developer). git-coco supports autocomplete and auto-suggest. Here is a snapshot autocomplete on sample authors

Automation answered 17/4, 2020 at 11:6 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.