Accueil - Informatique - Programmation - Outils

Utilisation de Git et sa mise en oeuvre avec les plateformes GitHub et SourceSup

Publié le mardi 28 octobre 2014.


Dernière mise à jour : 06/01/2016

Introduction


Après avoir utilisé ces dernières années CVS puis Subversion pour la gestion du code source de mes projets j’ai commencé à utiliser Git afin de maintenir du code en cours de développement lorsque je n’ai pas toujours de connexion internet comme c’est bien souvent le cas sur un navire de recherche.

En effet, contrairement à CVS et Subversion qui sont des systèmes de gestion de version centralisés nécessitant une connexion à un serveur central contenant tous les fichiers d’un projet, Git est un système de gestion de version distribué où les clients n’extraient plus seulement la dernière version d’un fichier depuis un serveur distant, mais dupliquent entièrement le dépôt en local.

Pour que plusieurs utilisateurs puissent collaborer sur un projet, il faut gérer des dépôts distants qui sont hébergés sur internet via des protocoles sécurisés HTTPS (HyperText Transfer Protocol Secure), SSH (Secure Shell) où sur un espace disque partagé via un réseau local. Des plate-formes comme GitHub, Bitbucket proposent gratuitement tous les services d’une forge pour un dépôt publique, et payant pour un dépôt privé.

Pour les établissements d’enseignement supérieur et organismes de recherche français, le GIP RENATER propose gratuitement la plate-forme SourceSup, d’hébergement et de gestion collaborative de sources par Subversion ou Git, listes de diffusion, forums de discussion, outil de rapport de bogues, de demande de fonctionnalité, de gestion de patch, gestion de tâches, gestion de documentation, etc.

Présentation


La différence majeure entre Git et les autres systèmes de gestion de sources comme Subversion réside dans la manière dont Git gère les données. Subversion maintient une liste de fichiers et les modifications effectuées sur chaque fichier dans le temps. Git prend un instantané du contenu de l’espace de travail qu’il surveille et enregistre une référence à cet instantané.
Comme Git n’utilise que des fichiers et ressources locales, il est nettement plus rapide que Subversion pour lequel les opérations sont ralenties par les échanges au travers du réseau.

Git utilise une somme de contrôle qui est une signature unique et qui sert de référence
Le mécanisme que Git utilise pour réaliser les sommes de contrôle est appelé une empreinte SHA-1. C’est un algorithme de hachage prenant en entrée le contenu d’un fichier et qui retourne une chaîne de caractères composée de 40 caractères hexadécimaux.

Git n’utilise pas les noms des fichiers, il ne considère que le contenu. Ainsi, si deux fichiers produisent la même empreinte, alors le contenu des deux fichiers est considéré comme identique et on ne sauvegardera que la référence.

Installation


Sous Windows :

Sous Windows 7, j’utilise le client TortoiseGit qui est vraiment très simple à utiliser via le menu contextuel (clic droit). Pour l’utiliser, il faut installer :

Msysgit installe simultanément Git et un système d’émulation des commandes Unix sous Windows incluant OpenSSH.

Sous Linux :

Suivant le système de gestion de paquets fourni avec votre distribution, soit pour Redhat, Centos :

ou pour Debian, Ubuntu :

Création d’un dépôt distant

Pour créer un dépôt distant sur une plate-forme collaborative comme GitHub, il faudra au préalable se créer un compte sur le serveur.
Avec SourceSup, il est possible de s’identifier avec le login/passwd ldap de son institut par le biais de la fédération d’identité proposé par Renater.
Si vous êtes administrateur d’un projet, il faudra créer la page d’accès au projet et y rajouter les comptes des utilisateurs ayant les droits d’écriture sur le projet.

Paramétrage de Git


Git est installé sur votre système, il faut personnaliser votre environnement Git. Cette étape n’est à réaliser qu’une seule fois en mode global mais il est possible d’utiliser une configuration particulière pour chaque dépôt.

Avec Tortoise Git sous Windows :

Depuis le menu contextuel (bouton droit), "TortoiseGit/setting", dans le panneau de gauche, cliquer sur "Git" :

En choisissant d’éditer soit le fichier global .gitconfig, soit le fichier .git/config du dépôt local, il est possible de rajouter/modifier des options comme des alias de commandes

Il faut également donner le chemin d’accès au client ssh pour l’authentification depuis le menu Network :

Remarque : Je préfère utiliser la version d’OpenSSH recompilée sous Windows pour des raisons de compatibilité lors de l’utilisation des mes clés sous Cygwin et Linux car le programme PuTYY qui est préconisé avec Tortoise nécessite une étape supplémentaire de conversion des clés générées avec PuTYYgen.

Remarque : Si vous installez la dernière version de Git 64bits (2.6 à la date de mise à jour du billet), il faut spécifier le chemin suivant pour le client ssh

c:\Program Files\Git\usr\bin\ssh.exe

Entrer l’URL du dépôt distant :

Sous Linux :

Il faut utiliser l’outil git config pour renseigner votre nom et votre adresse e-mail :

Voir le chapitre "Démarrage rapide - Paramétrage à la première utilisation de Git" de la documentation Git.

Configuration de ssh


Première étape, générer vos clés publique et privé, cette étape est identique sous Windows/Cygwin et Linux et se fait depuis une console.

Les informations ci-dessous sont tirées du tutoriel disponible sous :
https://help.github.com/articles/generating-ssh-keys/

Entrer les options sur une ligne de commande :

Se déplacer dans le répertoire /.ssh et télécharger la clé publique : le fichier id_dsa_git.pub, sur la page d’administration du serveur GitHub ou SourceSup. La méthode peut différer suivant le service.

Tester ensuite la connexion depuis une console sur GitHub :

où sur SourceSup :

Lors de la première tentative de connexion, il vous sera probablement demandé d’accepter l’ajout de l’adresse IP du serveur dans la liste des hôtes connus, répondre "yes" :

Si tout ce passe bien, dans les réponses du serveur, on doit avoir une ligne du type, en remplaçant username pour votre login pour GitHub :

et pour SourceSup :

Utiliser ssh-agent


Il est important de crypter sa clé privé avec une passphrase car sinon elle est accessible en lecture lorsque vous laissez votre ordinateur avec une session ouverte.
Si vous ne voulez pas entrer votre passphrase à chaque fois que vous accédez sur le dépôt distant, il faut indiquer votre passphrase à ssh-agent en employant la commande ssh-add.

sous Windows :

Ouvrir une console Git bash depuis le menu démarrer :

sous Linux :

Vous pouvez savoir quel utilisateur est déclaré avec ssh-agent à l’aide de la commande suivante :

Importer sa clé publique sur le dépôt distant


Le protocole ssh nécessite d’importer votre/vos clé(s) publique(s) dans le gestionnaire de dépôt distant. Pour cela, suivre les instructions, par exemple, sous github, il faut aller dans son profile/setting/SSH keys et faire un copier/coller sous un éditeur du contenu du fichier local id_rsa.pub se trouvant dans votre dossier .ssh

En cas de problème d’accès en écriture sur le dépôt distant, il faudra vérifier que le chemin d’accès aux clés locales est correctement défini dans le fichier de configuration de ssh. Voir les pages de manuel de ssh

Dé-commenter la ligne suivante, et indiquer le chemin correct :

IdentityFile ~/.ssh/id_rsa

Les commandes de bases


Pour une liste complète et détaillée des commandes, consultez la documentationde Git :

Récupérer un dépôt


Créer un répertoire "git" vide dans votre homedir :

sur GitHub :

Si tout se passe bien, on doit avoir un sous répertoire contenant une copie locale du projet :

Utiliser et configurer un dépôt distant dans son réseau local


Si l’utilisation de dépôts distant comme GitHub et SourceSup permet de collaborer au travers d’internet, il peut être parfois utile de surveiller quelques fichiers d’un répertoire et d’en faire une sauvegarde dans un dépôt distant qui se trouvera par exemple dans son répertoire de travail ou "home dir". Si ce répertoire est sauvegardé régulièrement par un robot de sauvegarde, vous pouvez avoir la certitude de ne jamais perdre le travail en cours.

Pour cela, il faut créer un dépôt vide nu en lançant la commande git init avec l’option —bare, ce qui initialise un dépôt sans répertoire de travail :

Alors vous pourrez pousser (push) la version de votre projet vers ce dépôt en l’ajoutant en tant que dépôt distant.

Exemple sous Windows avec TortoiseGit :

Dans cet exemple, les scripts de traitement d’une campagne sous trouvant sur un disque externe sont sauvegardés dans mon répertoire de travail Unix, monté avec Samba comme un disque Q :

Liens utiles