Git中作者和提交者之间的区别?

我正在尝试做一个提交

git commit --author="John Doe <john@doe.com>" -m "<the usual commit message>" 

John Doe是我想要进行提交的某个用户。

git log看起来没问题。 但是,当我做一个gitk作者的名字是正确的,但提交者的名字是从我的全球gitconfiguration设置 (并因此设置为我的名字/电子邮件)。

问题

  1. 两者(提交者vs作者)有什么区别?

  2. 我是否应该设置提交者以及其他用户?

  3. 如果是的话,怎么样?

原始海报问:

两者(Committer vs作者)有什么区别?

作者是最初编写代码的人。 另一方面,提交者被认为是代表原作者提交代码的人。 这在Git中很重要,因为Git允许您重写历史logging,或代表另一个人应用补丁。 免费的在线Pro Git书籍解释如下:

您可能想知道作者提交 者有什么不同。 作者是最初编写补丁的人,而提交者是上次应用补丁的人。 所以,如果你把一个补丁发送给一个项目,并且其中一个核心成员应用这个补丁,那么你们都得到了信任 – 你是作者,核心成员是提交者。

原始海报问:

我是否应该设置提交者以及其他用户?

不,如果你想说实话,你不应该把提交者设置给作者,除非作者和提交者确实是同一个人。

两者(Committer vs作者)有什么区别?

提交者和作者不同的一个重要情况是补丁是:

  • git format-patch生成
  • 通过邮件发送
  • 由另一个人用git am

用不同的作者和提交者生成一个新的提交。

Web界面(如GitHub和GitLab)上不会发生这种情况:

  • 在同一台机器上同时保持上游和分叉库
  • 通过强制Git使用git merge --no-ff来代表提交者来实现pull请求,即使快进是可能的(并且必须是可能的,因为这些web接口还不能解决合并冲突1 2 )。

更新2016-05:现在,如果您使用新的GitHub合并压缩选项,它将使用不同的作者和提交者进行一次提交: https : //github.com/blog/2141-squash-your-commits

这会产生两个提交每个拉请求:

  • 作者原来的一个人,谁提出了拉的要求
  • 提交者单击合并button的合并提交

每个人都有相同的作者和提交者。

如何为单个提交设置提交者?

我能find最好的是使用环境variables来覆盖提交者:

 GIT_COMMITTER_NAME='a' GIT_COMMITTER_EMAIL='a' git commit --author 'a <a>' 

奖金:如何获得提交者和提交date的提交?

只有作者数据默认显示在git log

要查看提交者date,您可以:

  • 格式化日志具体为:

     git log --pretty='%cn %cd' -n1 HEAD 

    其中cncd代表Committer NameCommitter Date

  • 使用fuller预定义格式:

     git log --format=fuller 

    另请参阅: 如何configuration“git日志”以显示“提交date”

  • 低级别并显示整个提交数据:

     git cat-file -p HEAD 

奖金2:如何设置提交提交的date?

git commit --date仅设置作者date:对于提交者date,我能find的最好的是使用环境variables:

 GIT_COMMITTER_DATE='2000-01-01T00:00:00+0000' git commit --date='2000-01-01T00:00:00+0000' 

另请参见: Git中的作者和提交者有什么区别?