-
1. DƩmarrage rapide
-
2. Les bases de Git
-
3. Les branches avec Git
-
4. Git sur le serveur
- 4.1 Protocoles
- 4.2 Installation de Git sur un serveur
- 4.3 GƩnƩration des clƩs publiques SSH
- 4.4 Mise en place du serveur
- 4.5 DƩmon (Daemon) Git
- 4.6 HTTP intelligent
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Git hƩbergƩ
- 4.10 RƩsumƩ
-
5. Git distribuƩ
-
6. GitHub
-
7. Utilitaires Git
- 7.1 SƩlection des versions
- 7.2 Indexation interactive
- 7.3 Remisage et nettoyage
- 7.4 Signer votre travail
- 7.5 Recherche
- 7.6 RƩƩcrire lāhistorique
- 7.7 Reset dƩmystifiƩ
- 7.8 Fusion avancƩe
- 7.9 Rerere
- 7.10 DƩboguer avec Git
- 7.11 Sous-modules
- 7.12 Empaquetage (bundling)
- 7.13 Replace
- 7.14 Stockage des identifiants
- 7.15 RƩsumƩ
-
8. Personnalisation de Git
- 8.1 Configuration de Git
- 8.2 Attributs Git
- 8.3 Crochets Git
- 8.4 Exemple de politique gƩrƩe par Git
- 8.5 RƩsumƩ
-
9. Git et les autres systĆØmes
- 9.1 Git comme client
- 9.2 Migration vers Git
- 9.3 RƩsumƩ
-
10. Les tripes de Git
- 10.1 Plomberie et porcelaine
- 10.2 Les objets de Git
- 10.3 RƩfƩrences Git
- 10.4 Fichiers groupƩs
- 10.5 La refspec
- 10.6 Les protocoles de transfert
- 10.7 Maintenance et rƩcupƩration de donnƩes
- 10.8 Les variables dāenvironnement
- 10.9 RƩsumƩ
-
A1. Annexe A: Git dans dāautres environnements
- A1.1 Interfaces graphiques
- A1.2 Git dans Visual Studio
- A1.3 Git dans Visual Studio Code
- A1.4 Git dans IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine
- A1.5 Git dans Sublime Text
- A1.6 Git dans Bash
- A1.7 Git dans Zsh
- A1.8 Git dans PowerShell
- A1.9 RƩsumƩ
-
A2. Annexe B: Embarquer Git dans vos applications
- A2.1 Git en ligne de commande
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
A3. Commandes Git
- A3.1 Installation et configuration
- A3.2 Obtention et crƩation des projets
- A3.3 Capture dāinstantanĆ© basique
- A3.4 CrƩation de branches et fusion
- A3.5 Partage et mise Ć jour de projets
- A3.6 Inspection et comparaison
- A3.7 DƩbogage
- A3.8 Patchs
- A3.9 Courriel
- A3.10 SystĆØmes externes
- A3.11 Administration
- A3.12 Commandes de plomberie
7.4 Utilitaires Git - Signer votre travail
Signer votre travail
Git est cryptographiquement sĆ»r, mais il nāest pas infaillible. Si vous rĆ©cupĆ©rez le travail dāautres personnes sur Internet et souhaitez vĆ©rifier que les commits ont effectivement une source de confiance, Git propose quelques mĆ©thodes pour signer et vĆ©rifier ceci au moyen de GPG.
Introduction Ć GPG
Avant tout, si vous voulez pouvoir signer quoique ce soit, vous devez avoir un GPG configurƩ et une clƩ personnelle.
$ gpg --list-keys
/Users/schacon/.gnupg/pubring.gpg
---------------------------------
pub 2048R/0A46826A 2014-06-04
uid Scott Chacon (Git signing key) <schacon@gmail.com>
sub 2048R/874529A9 2014-06-04
Si vous nāavez pas de clĆ©, vous pouvez en gĆ©nĆ©rer une avec la commande gpg --gen-key
.
gpg --gen-key
A prĆ©sent que vous avez une clĆ© privĆ©e permettant de signer, vous pouvez configurer Git pour lāutiliser pour signer diverses choses en renseignant le paramĆØtre de configuration user.signingkey
.
git config --global user.signingkey 0A46826A
A partir de maintenant, Git utilisera par dƩfaut votre clƩ pour signer les Ʃtiquettes et les commits que vous souhaitez.
Signer des Ʃtiquettes
Avec votre clƩ privƩe GPG renseignƩe, vous pouvez signer des Ʃtiquettes.
Tout ce que vous avez Ć faire, cāest remplacer -a
par -s
Ā :
$ git tag -s v1.5 -m 'mon Ʃtiquette signƩe 1.5'
You need a passphrase to unlock the secret key for
user: "Ben Straub <ben@straub.cc>"
2048-bit RSA key, ID 800430EB, created 2014-05-04
Si vous lancez git show
sur cette étiquette, vous pouvez voir votre signature GPG attachée :
$ git show v1.5
tag v1.5
Tagger: Ben Straub <ben@straub.cc>
Date: Sat May 3 20:29:41 2014 -0700
mon Ʃtiquette signƩe 1.5
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
iQEcBAABAgAGBQJTZbQlAAoJEF0+sviABDDrZbQH/09PfE51KPVPlanr6q1v4/Ut
LQxfojUWiLQdg2ESJItkcuweYg+kc3HCyFejeDIBw9dpXt00rY26p05qrpnG+85b
hM1/PswpPLuBSr+oCIDj5GMC2r2iEKsfv2fJbNW8iWAXVLoWZRF8B0MfqX/YTMbm
ecorc4iXzQu7tupRihslbNkfvfciMnSDeSvzCpWAHl7h8Wj6hhqePmLm9lAYqnKp
8S5B/1SSQuEAjRZgI4IexpZoeKGVDptPHxLLS38fozsyi0QyDyzEgJxcJQVMXxVi
RUysgqjcpT8+iQM1PblGfHR4XAhuOqN5Fx06PSaFZhqvWFezJ28/CLyX5q+oIVk=
EFTF
-----END PGP SIGNATURE-----
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
changed the version number
Verifier des Ʃtiquettes
Pour vƩrifier une Ʃtiquette signƩe, vous utilisez git tag -v [nom-de-l-etiquette]
.
Cette commande utilise GPG pour vƩrifier la signature.
Vous devez possƩder la clƩ publique du signataire dans votre trousseau pour que cela fonctionne.
$ git tag -v v1.4.2.1
object 883653babd8ee7ea23e6a5c392bb739348b1eb61
type commit
tag v1.4.2.1
tagger Junio C Hamano <junkio@cox.net> 1158138501 -0700
GIT 1.4.2.1
Minor fixes since 1.4.2, including git-mv and git-http with alternates.
gpg: Signature made Wed Sep 13 02:08:25 2006 PDT using DSA key ID F3119B9A
gpg: Good signature from "Junio C Hamano <junkio@cox.net>"
gpg: aka "[jpeg image of size 1513]"
Primary key fingerprint: 3565 2A26 2040 E066 C9A7 4A7D C0C6 D9A4 F311 9B9A
Si vous ne possédez pas la clé publique du signataire, vous obtiendrez plutÓt quelque chose comme :
gpg: Signature made Wed Sep 13 02:08:25 2006 PDT using DSA key ID F3119B9A
gpg: Can't check signature: public key not found
error: could not verify the tag 'v1.4.2.1'
Signer des commits
Dans les versions les plus récentes de Git (à partir de v1.7.9), vous pouvez maintenant signer aussi les commits individuels.
Si signer directement des commits au lieu dāĆ©tiquettes vous intĆ©resse, tout ce que vous avez Ć faire est dāajouter lāoption -S
Ć votre commande git commit
.
$ git commit -a -S -m 'commit signƩ'
You need a passphrase to unlock the secret key for
user: "Scott Chacon (Git signing key) <schacon@gmail.com>"
2048-bit RSA key, ID 0A46826A, created 2014-06-04
[master 5c3386c] commit signƩ
4 files changed, 4 insertions(+), 24 deletions(-)
rewrite Rakefile (100%)
create mode 100644 lib/git.rb
Pour visualiser et vĆ©rifier ces signatures, il y a lāoption --show-signature
pour git log
.
$ git log --show-signature -1
commit 5c3386cf54bba0a33a32da706aa52bc0155503c2
gpg: Signature made Wed Jun 4 19:49:17 2014 PDT using RSA key ID 0A46826A
gpg: Good signature from "Scott Chacon (Git signing key) <schacon@gmail.com>"
Author: Scott Chacon <schacon@gmail.com>
Date: Wed Jun 4 19:49:17 2014 -0700
commit signƩ
En complƩment, vous pouvez configurer git log
pour vĆ©rifier toutes les signatures quāil trouvera et les montrer grĆ¢ce au formatage %G?
.
$ git log --pretty="format:%h %G? %aN %s"
5c3386c G Scott Chacon commit signƩ
ca82a6d N Scott Chacon changed the version number
085bb3b N Scott Chacon removed unnecessary test code
a11bef0 N Scott Chacon first commit
Ici nous pouvons voir que seul le dernier commit est signƩ et valide tandis que les prƩcƩdents ne le sont pas.
Depuis Git 1.8.3, git merge
et git pull
peuvent vĆ©rifier et annuler une fusion dāun commit qui ne porte pas de signature GPG de confiance, avec la commande --verify-signatures
.
Si vous utilisez cette option lors de la fusion dāune branche et quāelle contient des commits qui ne sont pas signĆ©s et valides, la fusion Ć©chouera.
$ git merge --verify-signatures non-verify
fatal: La validation ab06180 n'a pas de signature GPG.
Si la fusion ne contient que des commits signƩs valides, la commande de fusion vous montrera toutes les signatures vƩrifiƩes et dƩmarrera la fusion proprement dite.
$ git merge --verify-signatures signed-branch
La validation 13ad65e a une signature GPG correcte par Scott Chacon (Git signing key) <schacon@gmail.com>
Mise Ć jour 5c3386c..13ad65e
Avance rapide
README | 2 ++
1 file changed, 2 insertions(+)
Vous pouvez aussi utiliser lāoption -S
avec la commande git merge
elle-mĆŖme pour signer le commit de fusion.
Lāexemple suivant vĆ©rifie que tous les commits dans la branche Ć fusionner sont signĆ©s et de plus signe le commit de fusion rĆ©sultant.
$ git merge --verify-signatures -S signed-branch
Commit 13ad65e a une signature GPG correcte par Scott Chacon (Git signing key) <schacon@gmail.com>
You need a passphrase to unlock the secret key for
user: "Scott Chacon (Git signing key) <schacon@gmail.com>"
2048-bit RSA key, ID 0A46826A, created 2014-06-04
Merge made by the 'recursive' strategy.
README | 2 ++
1 file changed, 2 insertions(+)
Tout le monde doit signer
Signer les Ć©tiquettes et les commits, cāest bien mais si vous dĆ©cidez dāutiliser cette fonction dans votre mĆ©thode de travail, il faudra sāassurer que tous les membres de votre Ć©quipe comprennent comment sāy prendre. Sinon, vous allez devoir passer du temps Ć aider les personnes Ć rƩƩcrire leurs commits en version signĆ©e. Assurez-vous de bien comprendre GPG et les bĆ©nĆ©fices de la signature avant dāadopter cette pratique dans vos mĆ©thodes de travail.