Mike Gerwitz me assustou pra caralho, então escrevi esta dica para resumir sua história horrível …
Assine seus compromissos
Como você pode ter certeza de que qualquer commit git seu é legítimo? Configure o GPG e assine seus commits.
1) tentativa de assinar um commit (ocorrerá um erro se você nunca fez esse tipo de coisa antes)
$ cd /tmp
$ git init gpg-experiment
$ cd gpg-experiment
$ git commit -S --allow-empty -m "First signed commit."
error: cannot run gpg: No such file or directory
error: could not run gpg.
fatal: failed to write commit object
$
2) corrigir o erro acima usando $ brew install gpg
3) tentativa de assinar um commit (pela segunda vez, isso vai dar erro novamente)
$ git commit -S --allow-empty -m "First signed commit."
gpg: directory `~/.gnupg' created
gpg: new configuration file `~/.gnupg/gpg.conf' created
gpg: WARNING: options in `~/.gnupg/gpg.conf' are not yet active during this run
gpg: keyring `~/.gnupg/secring.gpg' created
gpg: keyring `~/.gnupg/pubring.gpg' created
gpg: skipped "My Name <me@myemail.com>": secret key not available
gpg: signing failed: secret key not available
error: gpg failed to sign the data
fatal: failed to write commit object
$
4) corrija o erro acima usando $ gpg --gen-key
Você terá que responder a algumas perguntas, aqui estão elas em ordem:
- Selecione o tipo de chave que você deseja. Eu fui com o que o gpg recomendou
- Que tamanho de chave você quer? Eu fui com o que o gpg recomendou
- Especifique por quanto tempo a chave deve ser válida: Eu escolhi que a minha não expirasse
- Em seguida, ele pede seu nome real, comentário e endereço de e-mail: Eu não coloquei um comentário.
- Por fim, é solicitado que você forneça uma senha longa, torne-a correta: Eu coloquei … boa tentativa.
5) assinar um commit com sucesso
Se você usou o mesmo nome real e e-mail ao gerar sua chave gpg que você usa como seu nome / e-mail git, o seguinte deve funcionar:
$ git commit -S --allow-empty -m "First signed commit."
You need a passphrase to unlock the secret key for
...
[master (root-commit) 881116a] First signed commit.
$
Caso contrário, se você usou um nome / e-mail diferente, você precisará primeiro definir sua chave de assinatura com git. Obtenha uma lista de suas chaves com o seguinte:
$ gpg --list-secret-keys | grep ^sec
sec 4096R/8EE30EAB 2011-06-16
Faça a parte em que 8EE30EAB é para mim, mas será diferente para você. Então corra:
$ git config --global user.signingkey 8EE30EAB
Depois de fazer isso, você deverá conseguir assinar um commit
$ git commit -S --allow-empty -m "First signed commit."
You need a passphrase to unlock the secret key for
...
[master (root-commit) 881116a] First signed commit.
$
6) Ver a assinatura no log de commit
$ git log --show-signature
Exporte sua chave pública
Se você deseja compartilhar sua chave pública com um amigo, você precisará exportá-la:
$ gpg --export -a "Your Name" > me.pgp
Importe chaves públicas de pessoas que você conhece
Se você quiser verificar a assinatura do commit de alguém, você pode importar sua chave pública:
$ gpg --import myfriend.pgp
Chave pública do amigo confiável
Se você pode confiar que uma chave pública realmente pertence a um amigo seu, você pode “assiná-la”. Para assiná-lo, você precisa executar o comando edit:
$ gpg --edit "My Friend"
...
Você pode então assinar a chave pública do seu amigo:
gpg> sign
...
Really sign? (y/N) y
Saia do gpg (certifique-se de executar o comando quit)
gpg> quit
Save changes? (y/N) y
Conclusão
Muito mais pode ser feito com o gpg, basta perguntar ao Google .