invalid author
==============

For every pushed commit Gerrit verifies that the e-mail address of
the author matches one of the registered e-mail addresses of the
pushing user. If this is not the case pushing the commit fails with
the error message "invalid author". This policy can be
bypassed by having the access right
link:access-control.html#category_forge_author['Forge Author'].

This error may happen for two reasons:

. incorrect configuration of the e-mail address on client or server side
. missing privileges to push commits of other authors


Incorrect configuration of the e-mail address on client or server side
----------------------------------------------------------------------

If pushing to Gerrit fails with the error message "invalid author"
and you are the author of the commit for which the push
fails, then either you have not successfully registered this e-mail
address for your Gerrit account or the author information of the
pushed commit is incorrect.

Configuration of e-mail address in Gerrit
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Check in Gerrit under 'Settings -> Identities' which e-mail addresses
you've configured for your Gerrit account.  If no e-mail address is
registered go to 'Settings -> Contact Information' and register a new
e-mail address there. Make sure you confirm your e-mail address by
clicking on the link in the e-mail verification mail sent by Gerrit.
If you don't receive the e-mail verification mail it might be that it
was caught by your spam filter.

Incorrect author information
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

For every commit Git maintains the author. If not explicitly
specified Git computes the author on commit out of the Git
configuration parameters 'user.name' and 'user.email'.

----
  $ git config -l
  ...
  user.name=John Doe
  user.email=john.doe@example.com
  ...
----

A commit done with the above Git configuration would have
"John Doe <john.doe@example.com>" as author.

You can see the author information for existing commits in the
history.

----
  $ git log
  commit cbe31bdba7d14963eb42f7e1e0eef1fe58698c05
  Author: John Doe <john.doe@example.com>
  Date:   Mon Dec 20 15:36:33 2010 +0100

      my commit

----

Check in Git that the author information of the commit that should
be pushed is correct. The author should have the same e-mail address
that you've configured for your Gerrit account. If the author
information is incorrect set the Git configuration parameters
'user.name' and 'user.email' to the correct values (you might want to
set this globally by including the option '--global'):

----
  $ git config user.name "John Doe"
  $
  $ git config user.email john.doe@example.com
  $
----

Now you should update the author for those commits where the author
information is wrong. If only the last commit is affected you can do
this by amending the last commit and explicitly setting the author:

----
  $ git commit --amend --author "John Doe <john.doe@example.com>"
----

If you need to update the author information for several commits it
gets more complicated. In this case you have to do an interactive
git rebase for the affected commits. While doing the interactive
rebase you have to choose 'edit' for those commits for which the
author should be rewritten. When the rebase stops at such a commit
you have to amend the commit, explicitly setting the author
before continuing the rebase.

Here is an example that shows how the interactive rebase is used to
update the author for the last 3 commits:

----
  $ git rebase -i HEAD~3

  edit 51f0d47 one commit
  edit 7299690 another commit
  edit 304ad96 one more commit

  Stopped at 51f0d47... one commit
  You can amend the commit now, with

          git commit --amend

  Once you are satisfied with your changes, run

          git rebase --continue

  $ git commit --amend --author "John Doe <john.doe@example.com>"
  [detached HEAD baea1e4] one commit
   Author: John Doe <john.doe@example.com>
   1 files changed, 4 insertions(+), 1 deletions(-)

  $ git rebase --continue

  ...
----

For further details about git rebase please check the
link:http://www.kernel.org/pub/software/scm/git/docs/git-rebase.html[Git documentation].


Missing privileges to push commits of other users
-------------------------------------------------

If pushing to Gerrit fails with the error message "invalid author"
and somebody else is author of the commit for which the
push fails, then you have no permissions to forge the author
identity. In this case you may contact the project owner to request
the access right '+1 Forge Author Identity' in the 'Forge Identity'
category or ask the maintainer to commit this change on the author's
behalf.


GERRIT
------
Part of link:error-messages.html[Gerrit Error Messages]
