如何将一次提交归因于多个开发人员?


120

我熟悉的所有版本控制系统的工作方式是,每次提交都归于单个开发人员。敏捷工程(尤其是结对编程)的兴起导致了以下情况:两个开发人员对同一任务做出了重大贡献,例如,一个错误修复程序。

在项目环境中,归因的问题不会太大,因为项目经理会意识到两人正在做的工作,但是如果两个开源贡献者决定配对并推出一些代码呢?到一个不知道他们正在一起工作的特定项目。像Git这样的版本控制系统是否可以将某个特定的补丁归于多个开发人员?


10
对于每个版本控制系统,应该对此进行拆分。
Ciro Santilli郝海东冠状病六四事件法轮功

Answers:


63
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"

这是与其他临时解决方案相关的错误报告:

错误git-core:Git应该支持多个作者进行提交


1
如果您不知道此人的电子邮件地址该怎么办?有什么办法链接GitHub用户名等吗?
亚伦·弗兰克

如果他们进行了先前的提交,则只需检查一下即可:git show <COMMIT_ID> --format=email
格里

2
这似乎在GitLab已经工作(见gitlab.com/gitlab-org/gitlab-foss/merge_requests/17919
Meiogordo

67

git约定是在提交消息的末尾使用Co-Authored-Bygit内核:Commit Message Conventions,指的是Openstack Commit Messages)。这也是Gerry答案中链接的git-core错误的解决方案之一

Co-authored-by: Some One <some.one@example.foo>

在2010年5月5日的评论中,Josh Triplett还建议在git中实现相应的支持。

正如Llopis在评论中指出的那样,GitHub于2018年1月29日在其博客上宣布了对此的支持:与合著者共同提交详细信息)。


8
GitHub 现在支持此功能。
llrs

@Llopis刚看了博客文章,就来到这里更新我的答案。很
高兴

我编写了一个简单的git插件,以使其更容易自动管理这些共同创作的预告片:github.com/cac04/git-pair
c--

这种方法看起来像是混战(参见Bazaar方法)。如果我正确理解的话,这就是主要作者的方式,共同作者只是其中的补充。
罗斯兰

28

对于集市:

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

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


20

git对

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

为了你。


13

git区分提交authorcommitter[1]。您可以将其用作解决方法,例如,将自己签名为,将committer您的共同作者签名为author

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中的作者和提交者之间的区别?


4

另外,我在GitHub上有一个开源项目(由我提供),提供了从命令行执行此项目的好方法。该项目可帮助您设置别名,以创建共同自动化的提交,如下所示:

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

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


5
据我所知,这是一个git别名,在提交消息的末尾添加了“共同作者:”和“共同作者<共同作者电子邮件”。
卡里姆(Kariem)


2

尝试git-mob,我们建立了它来将共同作者归因于提交。

例如

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.