Existe-t-il un moyen simple de faire en sorte que Git signe toujours chaque commit ou tag créé?
Je l'ai essayé avec quelque chose comme:
alias commit = commit -S
Mais cela n'a pas fait l'affaire.
Je ne veux pas installer un programme différent pour y arriver. Est-ce faisable facilement?
Juste une question secondaire, peut-être que les commits ne devraient pas être signés, seulement les balises, que je ne crée jamais, car je soumets des commits uniques pour un projet comme Homebrew, etc.
git
public-key-encryption
gnupg
MindTooth
la source
la source
git filter-branch -f --commit-filter 'git commit-tree -S "$@"' HEAD@{u}..HEAD
(je ne veux pas dire que vous devriez utiliser ceci).Réponses:
Remarque: si vous ne voulez pas ajouter
-S
tout le temps pour vous assurer que vos commits sont signés, il y a une proposition (branche 'pu
' pour l'instant, décembre 2013, donc aucune garantie que cela se produira dans une version git) pour ajouter un config qui s'occupera de cette option pour vous.Mise à jour de mai 2014: elle est dans Git 2.0 (après avoir été renvoyée dans cette série de patchs )
Voir commit 2af2ef3 de Nicolas Vigier (boklm) :
Ajouter l'
commit.gpgsign
option de signer tous les commitsCette configuration est généralement définie par dépôt (vous n'avez pas besoin de signer votre dépôt expérimental local privé):
Vous devez combiner cela avec
user.signingKey
utilisé comme paramètre global (clé unique utilisée pour tous les dépôts où vous souhaitez signer la validation)user.signingKey
a été introduit dans git 1.5.0 (janvier 2007) avec la validation d67778e :Ceci est appliqué avec commit aba9119 (git 1.5.3.2) afin d'attraper le cas où Si l'utilisateur s'est mal configuré
user.signingKey
dans son.git/config
ou n'a simplement aucune clé secrète sur son trousseau de clés.Remarques:
signingKey
pas le cassigningkey
, même si lesgit config
clés sont insensibles à la casse. Cela n'aurait d'importance que si vous le faitesgit config --get-regexp
, ce qui est sensible à la casse, sinon, ce n'est qu'une convention de lisibilité;git push --signed
n'a pas pris en compte lauser.signingKey
valeur de configuration;user.signingKey
pour forcer la signature des balises annotées ainsi que les commits: commit 61c2fe0 .la source
Remplacez 9E08524833CB3038FDE385C54C0AFCCFED5CDE14 par votre ID de clé. N'oubliez pas: ce n'est jamais une bonne idée d'utiliser l'ID court .
MISE À JOUR: Selon un nouvel édit git , toutes les clés de configuration doivent être dans camelCase.
la source
~/.gnupg/gpg-agent.conf
et ajouterpinentry-program /usr/bin/pinentry-gtk-2
(en suivant ce guide wiki.archlinux.org/ index.php / GnuPG # pinentry )Edit: Depuis Git version 1.7.9, il est possible de signer Git commits (
git commit -S
). Mise à jour de la réponse légèrement pour refléter cela.Le titre de la question est:
Réponse courte: oui, mais ne le faites pas.
Résolution de la faute de frappe dans la question:
git commit -s
ne signe pas le commit. Au lieu de cela, à partir de laman git-commit
page:Cela donne une sortie de journal similaire à la suivante:
Notez le bit "signé par: ..."; qui a été généré par le
-s
drapeau sur legit-commit
.Citant l' e - mail d'annonce de sortie :
Alors oui, vous pouvez signer des commits. Cependant, je recommande personnellement la prudence avec cette option; la signature automatique des validations est inutile, voir ci-dessous:
C'est correct. Les commits ne sont pas signés; les balises sont. La raison de cela peut être trouvée dans ce message de Linus Torvalds , dont le dernier paragraphe dit:
Je vous encourage à parcourir le message lié, ce qui explique pourquoi la signature automatique des validations n'est pas une meilleure idée que je ne pourrais le faire.
Cependant , si vous souhaitez signer automatiquement une balise , vous pourrez le faire en enveloppant le
git-tag -[s|u]
dans un alias; si vous voulez le faire, vous souhaiterez probablement configurer votre identifiant de clé dans~/.gitconfig
ou le.git/config
fichier spécifique au projet . Plus d'informations sur ce processus peuvent être consultées dans le livre de la communauté git . La signature des balises est infiniment plus utile que la signature de chaque validation que vous faites.la source
git blame
celui qui le veut.Pour que la signature automatique fonctionne avant la version 2.0 de git, vous devrez ajouter un alias git pour la validation.
la source
Vous devez indiquer clairement que si vous signez un commit ou un tag, cela ne signifie pas que vous approuvez tout l'historique. En cas de commit, vous ne signez que le changement à portée de main, et en cas de tag, eh bien .. vous devez définir ce que vous voulez dire avec. Vous avez peut-être tiré un changement qui prétend qu'il vient de vous mais ne l'a pas été (parce que quelqu'un d'autre l'a poussé sur votre télécommande). Ou c'est un changement auquel vous ne voulez pas participer, mais vous venez de signer la balise.
Dans les projets OSS typiques, cela peut être moins courant, mais dans un scénario d'entreprise où vous ne touchez que de temps en temps au code et que vous ne lisez pas tout l'historique, cela peut passer inaperçu.
La signature des commits est un problème s'ils sont rebasés ou sélectionnés par d'autres parents. Mais ce serait bien si un commit modifié pouvait pointer vers le commit "original" qui vérifie réellement.
la source
commit.gpgsign
true comme suggéré par @VonC