2012-08-21 9 views
36

Sto provando a creare tag firmati in GitHub utilizzando la riga di comando git. Ho generato una chiave GPG con un nome utente (campione) Full Name (skytreader) <[email protected]>. Fatto ciò, provo a creare un signed tag. Tuttavia ho il seguente errore:Generazione di una chiave GPG per git tagging

gpg: skipped "full <[email protected]>": secret key not available 
gpg: signing failed: secret key not available 
error: gpg failed to sign the data 
error: unable to sign the tag 

Immagino di dover creare un'altra chiave con il nome utente indicato. Ma poi, inserendo il nome "completo", gpg si lamenta che il mio nome dovrebbe essere lungo almeno 5 caratteri.

Come si usa questa chiave con git?

Devo cambiare il nome utente che git usa per firmare i miei tag con GPG in modo da ottenere un nome reale di almeno 5 caratteri?

risposta

14

Il nome del committer si trova nel file ~/.gitconfig. Cambia quella voce in un vero nome (che è come vuoi essere commesso, comunque). È possibile modificare il file nel vostro editor preferito, o semplicemente problema:

git config --global user.name "<name>" 
+0

Un altro. È possibile includere la parte "(skytreader)" nel mio gitconfig (quindi non devo generare un'altra chiave GPG)? – skytreader

+6

Può essere qualsiasi cosa tu voglia. In effetti, puoi usare i flag '-u' o' --local-user' per specificare uno specifico '' (può anche essere impostato globalmente con 'git config --global user.signingkey '. – Christopher

35

Prima di tutto bisogna verificare se c'è una chiave gpg per il vostro ID.

$ gpg --list-key 

Se avete dovrebbe apparire qualcosa di simile:

  1. pub 2048R/6AB3587A 2013-05-23
  2. uid xxx (gpg for xxx)
  3. sub 2048R/64CB327A 2013-05-23

Se non c'è una chiave gpg. È necessario creare

$ gpg --gen-key 

Avanti hai questa uscita:

gpg (GnuPG) 2.0.14; Copyright (C) 2009 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.

Please select what kind of key you want:

  1. (1) RSA and RSA (default)
  2. (2) DSA and Elgamal
  3. (3) DSA (sign only)
  4. (4) RSA (sign only)

Your selection? RSA keys may be between 1024 and 4096 bits long. What keysize do you want? (2048)
Requested keysize is 2048 bits
Please specify how long the key should be valid.

  0 = key does not expire 
     <n> = key expires in n days 
     <n>w = key expires in n weeks 
     <n>m = key expires in n months 
     <n>y = key expires in n years 

Key is valid for? (0)
Key does not expire at all
Is this correct? (y/N) y

GnuPG needs to construct a user ID to identify your key. 

Real name: xxx 
Email address: [email protected] 
Comment: gpg for xxx 

You selected this USER-ID: 
    "xxx(gpg for xxx) <[email protected]>" 

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O 
You need a Passphrase to protect your secret key. 

can't connect to `/xxx/.gnupg/S.gpg-agent': No such file or directory 
We need to generate a lot of random bytes. It is a good idea to perform 
some other action (type on the keyboard, move the mouse, utilize the 
disks) during the prime generation; this gives the random number 
generator a better chance to gain enough entropy. 
+0

Ho lasciato il campo di commento vuoto per far funzionare questo per me poiché non avevo quella corrispondenza nel mio gitconfig. –

8

Se avete una chiave già generato, si può dire git di usare quella chiave specifiche, senza preoccuparsi di corrispondenza tra l'ID utente git (nome + email) e l'ID della chiave GPG. Dovresti avere il tuo git user.email abbinare una delle e-mail sulla tua chiave GPG per i tuoi tag firmati o commit per essere utile ad altri utenti, però.

Per impostare la chiave per l'uso globale sul computer, impostare il git configurazione globale con:

git config --global user.signingkey 6AB3587A 

In alternativa, è possibile impostare il user.signingkey solo per il repository corrente sei con:

git config user.signingkey 6AB3587A 
+0

preferisco 'git config --local user.signingkey 6AB3587A' dato che è su un computer/server pubblico. – dotslash