如何将单个提交归属于多个开发者?

200

我熟悉的所有版本控制系统的工作方式都是将每个提交归因于单个开发人员。敏捷工程的崛起,特别是配对编程,导致了这样一种情况:两位开发人员对同一个任务做出了重大贡献,例如修复缺陷。

在工作环境中,归因的问题不会太大,因为项目经理会知道配对人员正在做的工作,但是如果两个开源贡献者决定配对并向一个特定的项目推出一些代码,而该项目不知道他们正在一起工作,Git和其他版本控制系统是否有办法将某个补丁归因于多个开发人员?


11
需要根据每个版本控制系统进行拆分。 - Ciro Santilli OurBigBook.com
9个回答

164
Commit title

Commit body

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

这种方法的一个问题是您无法为此开发组创建签名密钥,因此即使某些人未参与该功能的工作,您也可以将他们添加到此列表中,并且 GitHub 将视其为已经参与。但在大多数情况下,这不应该是一个问题。

例如:Co-authored-by: Linus Torvalds <torvalds@linux-foundation.org>

对于普通作者或签名组(旧方法),您会看到它没有签名,并知道您无法信任该提交。但是,在合著者上没有签名过程。


大部分回答已经过时:

其中一种解决方案是为这个团队设置一个名称:

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

这里有一个相关的错误报告,其中提供了其他临时解决方案:

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


2
如果你不知道这个人的电子邮件地址怎么办?有没有办法链接GitHub用户名等信息? - Aaron Franke
1
如果他们之前提交过,你可以直接检查: git show <COMMIT_ID> --format=email - Gerry
2
这似乎已经在GitLab中运作良好(请参见https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/17919) - Meiogordo

78
一个 Git 的惯例是在提交信息的末尾使用 Co-authored-by(参见 git kernel: Commit Message Conventions,以及 Openstack Commit Messages)。这也是 git-core bug 中链接到 Gerry's answer解决方案之一
Co-authored-by: Some One <some.one@example.foo>

在2010年5月5日的评论中,Josh Triplett还建议在Git中实现相应的支持。
正如Llopis在一条评论中指出的那样,GitHub于2018年1月29日在其博客上宣布支持此功能:与共同作者一起提交详细信息)。

9
GitHub 现在已经支持此功能。 - llrs
我编写了一个简单的Git插件,以便更轻松地自动管理这些Co-authored-by trailers:https://github.com/cac04/git-pair - c--
这种方法看起来像是一个临时的解决方案(参见市集方式)。而且有一个主要的作者,其他合作者只是附加的,如果我理解正确的话。 - Ruslan

27

对于Bazaar:

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

这些名称将与提交者的名称分开显示在日志中。


23

git-pair

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

这是 Pivotal 公司提供的一个简单脚本,用于自动化 Git 代码协作的署名。

你可以创建一个名为 .pairs 的文件,例如:

# .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
user.email=pair+jsusser+sam@pivotallabs.com

为了你。


20

git区分提交的作者提交者[1]。您可以将其用作解决方法,例如将自己标记为提交者,将共同作者标记为作者:

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

这样,您和您的合作作者都会被记录在 git 历史记录中。运行 git log --format=fuller,将会得到类似以下的结果:

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] Git中作者和提交者的区别是什么?


这种方法的一个缺点是,如果将更改应用为例如 cherry-pick,则提交者将不会被保留。 - Thaodan

7

或者,你可以在GitHub上贡献的开源项目中找到一种很好的方法来通过命令行进行操作。该项目可以帮助你设置别名,以便创建协同作者提交,如下所示:

$ git co-commit -m "提交信息" --co "协同作者 <协同作者电子邮件>"

使用这种方法,你可以在没有图形界面的情况下创建协同作者提交。


10
据我所见,这是一个git别名,它会将"Co-authored-by: "+ "合作者<合作者电子邮件>"添加到提交消息的末尾。 - Kariem
1
这段代码非常优秀,运行无误,并成功地实现了在我的 PR 上指定特定的合作者这一期望效果。 - Csteele5

7

试试 git-mob,我们为在提交时归属共同作者而构建了它。

例如:

git mob <initials of co-authors>
git commit
git solo

3

作为一种惯例,我们在每个提交信息的结尾处添加我们的名字。

例如:实现酷炫功能 <Aneesh | Hiren>

这里保留了HTML标签。


4
这类似于我在另一篇答案中提到的git约定“Co-Authored-By”。 - Kariem

1
大多数的共同作者工具不支持自动完成。你可以尝试 git-coco ,它是用 Python3 编写的(我是开发者)。git-coco 支持自动完成和自动建议。这里是一个快照 autocomplete on sample authors

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接