(Esto se basa en gran medida en A Git Horror Story: Integridad del repositorio con compromisos firmados, una muy buena lectura y más información de la que podría dar en una respuesta).
Hay varias formas en que un repositorio de git puede verse comprometido (esto no es una falla de seguridad, solo es un hecho de la vida; uno no debe evitar usar git debido a esto). Por ejemplo, alguien puede haber empujado a su repositorio afirmando ser usted. O, para el caso, alguien podría haber ingresado en el repositorio de otra persona afirmando ser usted (alguien podría empujar a su propio repositorio afirmando ser usted también). Esto es solo parte de la vida en un DVCS.
Solo como ejemplo:
$ git config --global user.name 'Madara Uchiha'
$ git config --global user.email muchiha@example.com
Allí, he cambiado mi configuración de git para fingir que soy tú. Y ahora puedo comprometerme y dejar que esos compromisos de alguna manera lleguen a la compilación de producción, y parece que lo has hecho.
Con la firma de las confirmaciones (y etiquetas), se puede demostrar que ciertas confirmaciones y etiquetas fueron de usted (y las cosas que no están firmadas no deberían haber llegado a la compilación de producción). Esa es realmente la clave de todo: al firmar los compromisos, usted ha dicho que es su trabajo.
El aspecto "su trabajo" es particularmente importante en el kernel de Linux (y, por lo tanto, en git) que ocasionalmente se ve afectado por demandas de derechos de autor. Al firmar confirmaciones, usted dice que tiene derecho al software: rastrea el origen. Es posible que no tenga acceso a la fuente que se reclama como copyright y el reclamo no tiene fundamento. Puede ser que la compañía olvidó que usted trabajaba para ellos hace unos años y, bajo su dirección, agregó material al núcleo, o lo que sea.
Existe cierto debate sobre si cada compromiso debe firmarse. ¿De GPG firmando para git commit? (en el '09), Linus escribió:
Firmar cada confirmación es totalmente estúpido. Simplemente significa que lo automatizas y haces que la firma valga menos. Tampoco agrega ningún valor real, ya que la forma en que funciona la cadena git DAG de SHA1, solo necesita una firma para que todos los commits accesibles desde ese estén efectivamente cubiertos por ese. Por lo tanto, firmar cada confirmación simplemente pierde el punto.
También se puede leer mucho más sobre los pensamientos sobre iniciar sesión en git.
Dicho esto, se abrió paso en git de todos modos.
Parece haber un consenso mayoritario de que firmar confirmaciones es innecesario, pero firmar etiquetas es muy bueno. Esa publicación de blog vinculada en la parte superior sugiere que uno debe firmar todo de todos modos. Como dije, hay un debate sobre si cada commit es necesario o no.
La clave para el debate "firmar cada confirmación" probablemente tenga que ver con el flujo de trabajo que utiliza. La mayoría de las personas hacen un montón de confirmaciones en su repositorio local, y luego empujan ese conjunto. Debería ser suficiente etiquetar la colección final (suponiendo, es decir, asegurarse de que todos los cambios sean correctos). Si está trabajando en un entorno donde se están moviendo muchas confirmaciones individuales, la distinción entre una etiqueta y una confirmación se vuelve menos ... distinta, y la firma de confirmaciones puede ser más útil.