Evite la inserción de git contra el repository remoto cuando el nombre de usuario de pusher no está configurado

Quiero evitar que los usuarios accedan a mi repository cuando sus nombres de usuario no están configurados correctamente. En la práctica, me gustaría esto:

foreach commit in pushed_stuff: if not commit.username in some_list: reject push 

El pre-receive gancho parece apropiado, pero ¿cómo puedo extraer el nombre de usuario de cada object de confirmación que se recibe? update parece get los nombres de los objects, pero según tengo entendido, eso sucede cuando ya está en mi repository (justo antes de que la reference se haya movido).

EDITAR: Esto no pretende ser un mecanismo de security para permitir que ciertas personas me presionen. Confío en todos, pero a veces las personas se .gitconfig y olvidan configurar su .gitconfig .

ACTUALIZACIÓN: Tuve un problema con la sugerencia de VonC. Cuando se utiliza pre-recepción, si alguien presiona una nueva twig, el <old-value> es "000000000". Entonces, si él había hecho varias confirmaciones a esa nueva twig y él trata de presionarla, haciendo git rev-list … $ new solo me da una confirmación. Pero tal vez otras confirmaciones antes de que haya tenido un nombre de usuario incorrecto que quiero rechazar. No pude encontrar una manera de decirle a git que me diera todos los nuevos commits. Cuando la twig ya existe haciendo git rev-list … $ old .. $ new hace el trabajo.

Creo que esto se aborda un poco en " Git / gitosis: ¿Cómo verificar la validez del nombre de usuario y el correo electrónico? ".

Ahora, la pregunta SO referida se trata de un mecanismo de security (que no desea), pero:

 git log -1 --pretty=format:%ae $new 

puede ayudar en un gancho de pre-receive , como lo sugirió Bombe en su respuesta .
%an or %aN podría estar más adaptado a su caso aquí.

Este gancho se ejecuta una vez para la operación de recepción. No requiere arguments, pero para cada ref que se actualice, recibe en la input estándar una línea del formatting:

 <old-value> SP <new-value> SP <ref-name> LF 

dónde:

  • <old-value> es el antiguo nombre de object almacenado en la reference,
  • <new-value> es el nuevo nombre del object que se almacenará en la reference y
  • <ref-name> es el nombre completo de la ref.

Al crear una nueva reference, <old-value> es 40 0.