Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git中author和committer的区别是什么?_Git_Github - Fatal编程技术网

Git中author和committer的区别是什么?

Git中author和committer的区别是什么?,git,github,Git,Github,我刚刚在GitHub上遇到了以下提交: 一个人如何在同一个提交中拥有多个作者呢?不是多个作者。一个是作者,另一个是提交人 如果你要做一个克隆,你可以清楚地看到它: $ git cat-file -p 0a0b150668daa3c6f016 tree 91edcb411b7cd0708c1f5bb05621846146c9425a parent 6b9ffe3653fe59f035b01ba1f46b5f2650be00ca author Logan Kearsley <chronosu

我刚刚在GitHub上遇到了以下提交:


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

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

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

$ 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.
$git cat文件-p 0a0b150668daa3c6f016
树91edcb411b7cd0708c1f5bb05621846146c9425a
母公司6b9ffe3653fe59f035b01ba1f46b5f2650be00ca
作者Logan Kearsley 1308937685-0700
提交人Felix Geisendo╠crmk_RFER1309117893+0200
轻微但明确且一致的性能提升。

这不是真正的两位作者,而是一位作者和一位提交人。这两个字段有不同的含义。作者是创建内容的人,提交者是提交内容的人。当您执行正常的提交时,您两个都是。(两者都带有相关的电子邮件和时间戳。)

但它们可以在几个关键方面有所不同:

  • /-这一对允许您将提交内容转换为补丁,通常通过电子邮件提交,然后让其他人应用它们。你仍然是作者;应用它们的人是提交者。这绝对是github上发生的事情

  • ,-这些基本上都是历史重写的变体,从单个提交到分支的某些历史,再到整个历史。他们可能会修改提交者信息——特别是,他们总是重写提交者时间戳。原始作者保留在原处(在默认操作模式下),如果作者也是进行重写的作者,则他们的姓名和电子邮件保留在原处,但时间戳自然不同


没有多个作者与该提交关联(当前也不可能将多个作者分配给单个提交)。在本例中,gliese1337是作者,felixge是提交者。最有可能的原因是gliese1337提交了一个pull请求,该请求被felixhe(存储库所有者)接受并提交。这种工作流在GitHub上非常常见。这对于项目维护人员通过电子邮件接收修补程序的情况也很有用,因此修补程序的作者本身仍然可以获得修补程序的信用,即使他或她没有提交项目的权限

几个相关链接:



像GitHub和GitLab这样的Git web界面

在这样的系统中,合并补丁时,作者可能与提交人不同,也可能与提交人不同,这取决于repo设置

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

  • 创建合并提交

    不生成作者!=提交人

    保持SHA或新提交的完整性,并创建新提交:

    * Merge commit (committer == author == project maintainer)
    |\
    | * Feature commit (committer == author == contributor)
    |/
    * Old master (random committer and author)
    
    历史上,这是GitHub上第一个可用的方法

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

    这将为每个pull请求生成两个提交,并在git历史记录中保留一个fork

  • master

    虽然这在原则上不是强制性的,甚至在默认情况下git rebase也不会在本地完成,但GitHub也会对提交进行黑客攻击,以设置提交者==按下合并按钮的人

    这样做的原因是,它向项目维护人员提供了责任

    git树现在看起来像:

    * Feature commit (committer == maintainer, author == contributor)
    |
    * Old master (random committer and author)    
    
    这与git apply的电子邮件补丁非常相似

当前在GitHub上:

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

简而言之,当您向gihub/gitlab/etc托管的回购执行拉取请求,并且被回购的维护者接受时,您是作者,他/她是提交者


当你git克隆这个repo时,使用
git cat file-p xxx_hash
将显示author&committer消息。

实际上你会注意到,一个人是作者,一个人是提交人……准确地说,通过重写历史,可能的副本可以修改一切——包括作者信息。几乎从未在实践中使用过,但仍然有可能。@Chirantan:这里的其他Git手册页链接基本上都是这样,因为kernel.org已经关闭了,而且还没有把手册页放回去。不值得把每一个都重写一遍。只需使用
mangit格式补丁