Cela fait un petit moment qu’il n’y a pas eu d’article dans la série Git – le b.a.-ba.

Comment faire pour ne pas à avoir à saisir son identifiant et son mot de passe à chaque fois que Git interagit avec le serveur distant ?

Il existe plusieurs façons de faire. Découvrons les 3 plus simples.

Utilisation du Credential Helper

La première solution est valable depuis Git 1.7.9. Le credential helper permet de stocker en mémoire pendant un temps déterminé le mot de passe. Pour l’activer, il faut modifier la configuration de Git de cette façon :

$ git config --global credential.helper cache

Le mot de passe est mémorisé pendant 15 minutes. Il est possible de réduire ou rallonger ce laps de temps avec l’option suivante (en secondes) :

$ git config --global credential.helper "cache --timeout=3600"

Le mot de passe peut être également stocké physiquement de façon permanente avec des outils tierces (tels que Mac OS keystore, winstore, wincred, gnomekeyring, etc…). Il suffit alors d’ajouter dans l’option l’outil à utiliser :

$ git config --global credential.helper wincred

C’est sûrement la solution la plus simple et la plus sûre. En revanche, elle est n’est pas scriptable (ou difficilement ?).

Utilisation de l’URL

La seconde solution est de préciser l’identifiant et le mot de passe directement dans l’URL du dépôt distant comme ceci :

git clone https://mylogin:mypassword@github.com/mycompany/myproject.git

Il est possible de modifier l’URL d’un projet existant avec la commande ci-dessous :

$ git config remote.origin.url https://mylogin:mypassword@github.com/mycompany/myproject.git

Le mot de passe est alors stocké dans le répertoire .git du projet. Ce n’est pas très sécurisé. De plus, il apparait en clair dans la console dès que Git affiche l’URL du dépôt distant.

Utilisation de .netrc

Depuis Git v0.99, il est également possible de stocker le mot de passe dans le fichier ~/.netrc (~/_netrc sous MS Windows). Le fichier a le format suivant :

machine <HOSTNAME> login <USERNAME> password <PASSWORD>

Ce qui donne pour l’exemple pris plus haut :

machine github.com login mylogin password mypassword

Il faut accorder les droits nécessaires au fichier (chmod 600 ~/.netrc).

Le mot de passe est toujours stocké en clair. Néanmoins, il est dans le répertoire utilisateur. Et surtout, il ne s’affiche plus dans la console quand Git affiche l’URL du dépôt distant. Enfin, cette solution est très facilement scriptable.

Et maintenant… Faites votre choix ! Avez-vous d’autres solutions ?