2011-04-22 9 views
6

Una cosa que es importante con el control de versiones es saber quién hizo qué cambio. Si algo cambió y no tenía idea de por qué se realizó el cambio, buscaría en la historia y le preguntaría a la persona que hizo el cambio. Mientras exploro git, una cosa que me pone un poco nervioso acerca de esta característica es que parece muy fácil de falsificar. ¿Qué me impide incluir el nombre/correo de un compañero de trabajo en la configuración global de git para user.name y user.email? Cuando uso algo como gitosis/gitolita (que definió a los usuarios) o github (que supongo que usa algo como gitosis/gitolita), ¿hay alguien para ver quién realmente hizo una confirmación?Historial de registro de Git

+6

Es realmente triste cuando no puedes confiar en tus compañeros de trabajo ... –

+0

No estoy diciendo que quisiera o que pensara que alguno de mis compañeros de trabajo lo haría, pero desafortunadamente alguien no está Honesto (incluso los que crees que son) – ryanzec

Respuesta

0

Usted puede tener señal de que todo el mundo comete con GPG: see this tutorial.

En el tutorial de la frase de contraseña GPG se encuentra en git config, que parece sin sentido para mí, por lo que quieren tener el gancho solicitar al usuario en cada confirmación.

Por supuesto, si usted no es el gerente, proponiendo que todo el mundo firmar sus confirmaciones pueden ser diplomáticamente difícil, así que sea prudente.

EDITAR: Como Brian señala, esto solo firma el mensaje de compromiso, por lo que no es la buena solución. Guardo la respuesta, ya que aún podría ayudar a entender el problema.

+4

Esa publicación a la que te vinculas es una forma completamente incorrecta de firmar commits. Firma solo el mensaje de compromiso, no el compromiso en sí, lo que significa que cualquiera que quiera hacerse pasar por otra persona simplemente tendrá que reutilizar su mensaje de compromiso. Además, como usted señala, recomienda mantener su frase de contraseña en claro. La firma de confirmaciones suele ser mucho más dolorosa de lo que vale, especialmente una vez que comienzas a lidiar con problemas como el rebasamiento, la aplicación de parches de correo electrónico y cosas similares. –

+0

@BrianCampbell: de acuerdo, editaré mi respuesta. – CharlesB

5

registros Gitolite (en .gitolite/logs/gitolite-*) el usuario Gitolite para cada pulsador. Hay un poco más de trabajo para determinar el empuje que introdujo una confirmación particular, pero debe ser sencillo (una forma: colocar etiquetas de peso ligero en la punta de cada empuje, luego usar git name-rev para encontrar la primera etiqueta después de la confirmación) .

La mayoría de los usuarios de Gitolite probablemente solo tengan una sola clave SSH asociada (keydir/user.pub), pero es posible que un solo usuario tenga varias claves SSH (keydir/[email protected]*.pub).

Por lo tanto, para Gitolite basado en SSH, puede asignar cada compromiso a una (o más) claves SSH.

si confía en una clave SSH para identificar con precisión a una persona en particular es otra cuestión (es decir, tiene confianza en los usuarios para mantener sus claves SSH privadas seguro?).

Gitolite también puede moderar el acceso de Git a través de "HTTP inteligente". En ese caso, el servidor web proporciona el nombre de usuario de Gitolite en la variable de entorno REMOTE_USER (es decir, en lugar de utilizar el archivo .ssh/authorized_keys para identificar al usuario según la clave SSH). La identificación y la autenticación dependen completamente del servidor web (generalmente solo un nombre de usuario y contraseña, pero los certificados SSL por usuario podrían usarse para hacer algo más parecido al acceso basado en SSH).

Por lo tanto, para Gitolite basado en HTTP, puede asignar cada compromiso a una autenticación realizada por el servidor web.


GitHub tiene alguna información similar y que se pueden consultar a través de la parte de la EventsGitHub API (antes sólo parecía estar disponible como parte de las entradas “del suministro de noticias” para sus repositorios vistos). Cada PushEvent identifica el usuario de GitHub que ejecutó la inserción, se actualizó el nombre de la referencia (rama), el nombre (hash SHA1) de la nueva "cabeza" de referencia (la nueva sugerencia de la rama actualizada) y una lista de confirmaciones .

+0

Gracias Chris, esto nos ayudó a mí y a mi administrador de sistemas. – Nic

1

Este no es un foro de ética o filosofía, afaik; PERO

git permite commits firmados y etiquetas firmadas.Esto debería ayudarte a alimentar tu paranoia :)

Cuestiones relacionadas