Git中作者和提交者之间有什么区别?

时间:2011-07-20 00:51:51

标签: git github

我刚刚在GitHub上遇到了以下提交: https://github.com/felixge/node-formidable/commit/0a0b150668daa3c6f01626d2565b898e5da12392

如何在同一个提交中拥有多个作者?

5 个答案:

答案 0 :(得分:55)

这不是真正的两位作者 - 那是作者和提交者。这两个领域有不同的含义。作者是创建内容的人,提交者是提交内容的人。当你进行正常提交时,你们都是。 (两者都带有相关的电子邮件和时间戳。)

但他们可以通过几种关键方式变得与众不同:

  • git format-patch / git am - 此对允许您将提交转换为通常通过电子邮件提交的修补程序,然后让其他人应用它们。你仍然是作者;应用它们的人是提交者。这绝对是github在那里发生的事情。

  • git commit --amendgit rebasegit filter-branch - 这些都是历史重写的基本变体,从单一提交到分支历史到整个历史记录。他们可能会修改提交者信息 - 特别是,他们总是重写提交者时间戳。原作者保持原状(默认操作模式),如果作者也是重写者,他们的姓名和电子邮件保留,但时间戳自然不同。

答案 1 :(得分:7)

没有多个作者与该提交相关联(目前也无法将多个作者分配给单个提交)。在这种情况下,gliese1337是作者,而felixge是提交者。最有可能的是,这是因为gliese1337提交了一个拉取请求,该请求被felixhe(存储库所有者)接受并提交。该工作流程在GitHub上很常见。这对于项目维护者通过电子邮件收到补丁的情况也很有用,因此补丁的作者本身仍会获得补丁的信用,即使他或她没有对项目的提交权限。

一些相关链接:

Short Git Wiki section on author attribution
A feature request for multiple author functionality in Git core

答案 2 :(得分:4)

这不是多位作者。一个是作者,另一个是提交者。

如果你做了克隆,你可以清楚地看到它:

$ git cat-file -p 0a0b150668daa3c6f016
tree 91edcb411b7cd0708c1f5bb05621846146c9425a
parent 6b9ffe3653fe59f035b01ba1f46b5f2650be00ca
author Logan Kearsley <chronosurfer@gmail.com> 1308937685 -0700
committer Felix Geisendo╠Иrfer <felix@debuggable.com> 1309117893 +0200

Slight but definite & consistent performance boost.

答案 3 :(得分:1)

Git网页界面,如GitHub和GitLab

在这样的系统中,当合并补丁时,作者可能会或可能不会与提交者不同,具体取决于回购设置。

由于Git(Hub | Lab)在同一台机器上同时拥有上游和分支存储库,因此它可以自动执行您可以在本地执行的任何操作:

  • 创建合并提交。

    不生成作者!=提交者。

    保持SHA或新提交不变,并创建新提交:

    * Merge commit (committer == author == project maintainer)
    |\
    | * Feature commit (committer == author == contributor)
    |/
    * Old master (random committer and author)
    

    从历史上看,这是GitHub上第一个可用的方法。

    在本地,这是通过git merge --no-ff完成的。

    每次拉取请求会产生两次提交,并在git历史记录中保留一个分叉。

  • master

    之上重新定位

    虽然原则上这不是强制性的,甚至在git rebase本地默认也没有,GitHub也会破解设置提交者的提交==无论谁按下合并按钮。

    这样做的原因是它给项目维护者带来了责任。

    git树现在看起来像:

    * Feature commit (committer == maintainer, author == contributor)
    |
    * Old master (random committer and author)    
    

    git apply电子邮件补丁完全相同。

目前在GitHub上:

  • 通过合并按钮的下拉列表选择合并时的方法
  • 方法可以由所有者
  • 在repo设置上启用或禁用

https://help.github.com/articles/about-merge-methods-on-github/

答案 4 :(得分:0)

简而言之,当您对gihub / gitlab / etc托管仓库执行 Pull Request 并被仓库的维护者接受时,您就是作者,他/她就是提交者。

>

当git克隆此仓库时,使用git cat-file -p xxx_hash将显示作者和提交者消息。

相关问题