How to attribute a single commit to multiple developers?
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?
Commit title Commit body Co-Authored-By: name <firstname.lastname@example.org> Co-Authored-By: name <email@example.com>
- Supported by Github: https://github.blog/2018-01-29-commit-together-with-co-authors/
- Still waiting on Gitlab: https://gitlab.com/gitlab-org/gitlab-ce/issues/31640
- Used by others: https://git.wiki.kernel.org/index.php/CommitMessageConventions
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.
Co-Authored-By: Linus Torvalds <firstname.lastname@example.org>
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:
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@example.com>
In that comment on May 5, 2010, Josh Triplett also suggests implementing corresponding support in git.
bzr commit --author Joe --author Alice --author Bob
Those names will be shown in the log separately from committer name.
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
git pair sp js
user.name=Josh Susser & Sam Pierson firstname.lastname@example.org
git distinguishes between a commit’s
committer . You could use it as a work-around, e.g. sign yourself as the
committer and your co-author as the
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.
We add our names to each commit message at the end as a convention
Implemented cool feature <Aneesh | Hiren>