我刚刚在GitHub上遇到了以下提交: https://github.com/felixge/node-formidable/commit/0a0b150668daa3c6f01626d2565b898e5da12392
如何在同一个提交中拥有多个作者?
答案 0 :(得分:55)
这不是真正的两位作者 - 那是作者和提交者。这两个领域有不同的含义。作者是创建内容的人,提交者是提交内容的人。当你进行正常提交时,你们都是。 (两者都带有相关的电子邮件和时间戳。)
但他们可以通过几种关键方式变得与众不同:
git format-patch
/ git am
- 此对允许您将提交转换为通常通过电子邮件提交的修补程序,然后让其他人应用它们。你仍然是作者;应用它们的人是提交者。这绝对是github在那里发生的事情。
git commit --amend
,git rebase
,git 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上:
https://help.github.com/articles/about-merge-methods-on-github/
答案 4 :(得分:0)
简而言之,当您对gihub / gitlab / etc托管仓库执行 Pull Request 并被仓库的维护者接受时,您就是作者,他/她就是提交者。
>当git克隆此仓库时,使用git cat-file -p xxx_hash
将显示作者和提交者消息。