= invalid committer

For every pushed commit Gerrit verifies that the e-mail address of
the committer 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 committer". This policy can be
bypassed by having the access right
link:access-control.html#category_forge_committer['Forge Committer'].

This error may happen for two reasons:

. incorrect configuration of the e-mail address on client or server
  side
. missing privileges to push commits that were committed by other
  users


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

If pushing to Gerrit fails with the error message "invalid committer"
and you committed the change for which the push fails,
then either you have not successfully registered this e-mail address
for your Gerrit account or the committer 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.

=== Incorrect committer information

For every commit Git maintains the user who did the commit, the so
called committer. Git computes the committer 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 committer.

To see the committer information for existing commits do
"git log --format=full":

----
  $ git log --format=full
  commit cbe31bdba7d14963eb42f7e1e0eef1fe58698c05
  Author: John Doe <john.doe@example.com>
  Commit: John Doe <john.doe@example.com>

      my commit

----

Check in Git that the committer information of the commit that should
be pushed is correct. As explained above you can do this by
'git log --format=full'. The committer should have the same e-mail
address that you've configured for your Gerrit account. If the
committer 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 rewrite the commits for which the committer
information is wrong. If only the last commit is affected you can do
this by doing a 'commit --amend'. If you need to update the committer
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 ensure that
the commits are rewritten (e.g. by choosing 'reword' for all these
commits and then confirming all the commit messages). Just picking
all the changes will not work as in this case the committer is not
rewritten. 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 that were committed by other users

If pushing to Gerrit fails with the error message "invalid committer"
and somebody else committed the change for which the
push fails, then you have no permissions to forge the committer
identity. In this case you may contact the project owner to request
the link:access-control.html#category_forge_committer['Forge Committer']
access right or ask the maintainer to commit this change on the author's
behalf.


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

SEARCHBOX
---------
