我在试着做出承诺
git commit --author="John Doe <john@doe.com>" -m "<the usual commit message>"
字符集
其中John Doe是某个用户,我想以他的名字进行提交。
它在git log
中显示正确。然而,当我做一个gitk
时,作者的名字是正确的,但是提交者的名字是从我的全局git配置设置中选取的(因此被设置为我的名字/电子邮件)。
问题
1.这两者之间有什么区别(提交者与作者)?
1.我是否应该将提交者也设置为其他用户?
1.如果是,怎么做?
4条答案
按热度按时间osh3o9ms1#
原海报问道:
这两个人有什么区别(Committer vs author)?
作者是最初编写代码的人。另一方面,提交者被假定为代表原作者提交代码的人。这在Git中很重要,因为Git允许你重写历史记录,或者代表另一个人应用补丁。FREE online Pro Git book是这样解释的:
您可能想知道 author 和 committer 之间的区别。* 作者 * 是最初编写补丁的人,而 * 提交者 * 是最后应用补丁的人。所以,如果你向一个项目发送了一个补丁,而其中一个核心成员应用了这个补丁,你们两个都得到了荣誉--你是作者,核心成员是提交者。
原海报问道:
我是否应该将提交者也设置为其他用户?
不,如果你想诚实的话,你不应该把提交者设置为作者,除非作者和提交者确实是同一个人。
irlmq6kh2#
邮件列表+
git format-patch
+git apply
可以生成作者!=提交者在类似Linux内核的项目中,补丁包括:
git format-patch
生成git send-email
发送git apply
或git am
申请:How to use git am to apply patches from email messages?生成具有不同作者和提交者的单个新提交:
例如,请参见随机选择的补丁和相应的提交:
GitHub和GitLab等Git Web界面可能会生成作者,也可能不会生成作者!=提交者
自Git(Hub|实验室)在同一台机器上同时持有上游和fork存储库,它们可以自动执行您在本地可以执行的任何操作,包括以下任一项:
不生成作者!=提交者。
保持SHA或新提交完整,并创建新提交:
字符集
历史上,这是GitHub上第一个可用的方法。
在本地,这是用
git merge --no-ff
完成的。这会产生每个pull请求两次提交,并在git历史记录中保留一个fork。
master
顶部重新安装底座GitHub还对提交进行了黑客攻击,设置committer ==谁按下合并按钮。这不是强制性的,甚至在默认情况下,
git rebase
也不会在本地完成,但它向项目维护者提供了责任。git tree现在看起来像:
型
这与
git apply
电子邮件补丁完全相似。目前在GitHub上:
https://help.github.com/articles/about-merge-methods-on-github/的
如何设置新提交的提交者?
我能找到的最好的方法是使用环境变量来覆盖提交程序:
型
如何获取给定提交的提交者和提交日期?
默认情况下,
git log
上仅显示作者数据。要查看提交者日期,您可以:
型
其中
cn
和cd
代表Committer Name
和Committer Date
fuller
预定义格式:型
参见:How to configure 'git log' to show 'commit date'
型
如何设置新提交的提交者日期?
git commit --date
只设置作者日期:对于提交者日期,我能找到的最好的方法是使用环境变量:型
参见:What is the difference between author and committer in Git?
Git如何在内部存储author和committer?
git commit对象的文件格式是什么?
基本上,提交是一个文本文件,它包含两个行分隔的字段:
型
这就清楚地表明,两者都是提交对象中的两个完全独立的数据条目。
vsaztqbk3#
proposed to use
字符集
如果您不小心使用了不同的姓名和电子邮件,并且您想将设置为相同的值:
型
它首先设置变量,然后将它们用于
git commit
调用(注意双括号)。zpgglvta4#
我认为值得一提的是,这里使用的定义只是“预期”的含义。例如,从Pro Git书籍:
作者是最初编写工作的人,而提交者是最后应用工作的人。
重要的是要认识到,您不能 * 信任 * 这些名称是正确的。也许一个更(令人恼火的)迂腐的定义可能是:
作者是(据称)最初编写作品的人,而提交者是(据称)最后应用作品的人。
大多数情况下,我们并不真的需要相信提交中的元数据是真的,但是如果你想更接近这个目标,你可以使用signed commits,这使得信任提交者是签署提交的人变得更容易。