¿Hay una manera fácil de hacer que Git siempre firme cada confirmación o etiqueta que se crea?
Lo probé con algo como:
alias commit = commit -S
Pero eso no funcionó.
No quiero instalar un programa diferente para que esto suceda. ¿Es factible con facilidad?
Solo una pregunta secundaria, tal vez las confirmaciones no deberían firmarse, solo etiquetas, que nunca creo, ya que envío confirmaciones individuales para un proyecto como Homebrew, etc.
git
public-key-encryption
gnupg
MindTooth
fuente
fuente
git filter-branch -f --commit-filter 'git commit-tree -S "$@"' HEAD@{u}..HEAD
(No quiero decir que deba usar esto).Respuestas:
Nota: si no desea agregar
-S
todo el tiempo para asegurarse de que sus confirmaciones estén firmadas, hay una propuesta (rama 'pu
' por ahora, diciembre de 2013, por lo que no hay garantía de que llegue a un lanzamiento de git) para agregar un config que se encargará de esa opción por usted.Actualización de mayo de 2014: está en Git 2.0 (después de reenviarse en esta serie de parches )
Ver commit 2af2ef3 por Nicolas Vigier (boklm) :
Agregue la
commit.gpgsign
opción para firmar todas las confirmacionesEsa configuración generalmente se establece por repositorio (no necesita firmar sus repositorios locales experimentales privados):
Combinaría eso con
user.signingKey
utilizado como una configuración global (clave única utilizada para todos los repositorios donde desea firmar confirmación)user.signingKey
se introdujo en git 1.5.0 (enero de 2007) con commit d67778e :Esto se aplica con commit aba9119 (git 1.5.3.2) para detectar el caso en el que si el usuario ha configurado mal
user.signingKey
en su.git/config
cuenta o no tiene ningún claves secretas en su llavero.Notas:
signingKey
,signingkey
aunque lasgit config
teclas no distinguen entre mayúsculas y minúsculas. Eso solo importaría si lo hacesgit config --get-regexp
, que es entre mayúsculas y minúsculas, de lo contrario, es sólo una convención legibilidad;git push --signed
no consideró eluser.signingKey
valor de configuración;user.signingKey
para forzar la firma de etiquetas anotadas y confirmaciones: commit 61c2fe0 .fuente
Reemplace 9E08524833CB3038FDE385C54C0AFCCFED5CDE14 por su ID de clave. Recuerde: nunca es una buena idea usar la ID corta .
ACTUALIZACIÓN: Por un nuevo decreto git , todas las claves de configuración deben estar en camelCase.
fuente
~/.gnupg/gpg-agent.conf
y agregarpinentry-program /usr/bin/pinentry-gtk-2
(siguiendo esta guía wiki.archlinux.org/ index.php / GnuPG # pinentry )Editar: A partir de la versión 1.7.9 de Git, que es posible firmar confirmaciones Git (
git commit -S
). Actualizando ligeramente la respuesta para reflejar esto.El título de la pregunta es:
Respuesta corta: sí, pero no lo hagas.
Abordar el error tipográfico en la pregunta:
git commit -s
no firma el compromiso. Más bien, de laman git-commit
página:Esto proporciona una salida de registro similar a la siguiente:
Tenga en cuenta el bit "Firmado por: ..."; que fue generado por la
-s
bandera en elgit-commit
.Citando el correo electrónico de anuncio de lanzamiento :
Entonces sí, puedes firmar confirmaciones. Sin embargo, personalmente insto a la precaución con esta opción; la firma automática de confirmaciones no tiene sentido, vea a continuación:
Eso es correcto. Los compromisos no están firmados; las etiquetas son La razón de esto se puede encontrar en este mensaje de Linus Torvalds , cuyo último párrafo dice:
Animaría a examinar el mensaje vinculado, lo que aclara por qué firmar confirmaciones automáticamente no es una buena idea de una manera mucho mejor de lo que podría.
Sin embargo , si desea firmar automáticamente una etiqueta , podrá hacerlo envolviéndola
git-tag -[s|u]
en un alias; si va a hacer eso, probablemente desee configurar su identificación de clave~/.gitconfig
o el.git/config
archivo específico del proyecto . Se puede ver más información sobre ese proceso en el libro de la comunidad de git . Firmar etiquetas es infinitamente más útil que firmar cada confirmación que realice.fuente
git blame
a quien quiera.Para que la firma automática funcione antes de la versión 2.0 de git, deberá agregar el alias de git para commit.
fuente
Debe dejar en claro que si firma una confirmación o etiqueta, no quiere decir que aprueba todo el historial. En caso de confirmaciones, solo firma el cambio en cuestión y, en caso de etiqueta, bueno ... debe definir qué quiere decir con él. Es posible que haya realizado un cambio que dice que es suyo pero que no lo fue (porque alguien más lo empujó a su control remoto). O es un cambio en el que no desea participar, pero acaba de firmar la etiqueta.
En los proyectos típicos de OSS, esto podría ser menos común, pero en un escenario empresarial donde solo toca el código de vez en cuando y no lee todo el historial, puede pasar desapercibido.
Firmar confirmaciones es un problema si se rebajan o se eligen a otros padres. Pero sería bueno si una confirmación modificada pudiera apuntar a la confirmación "original" que realmente verifica.
fuente
commit.gpgsign
como verdadero según lo sugerido por @VonC