Ce “tutoriel” a pour but d’expliquer l’utilité et le fonctionnement de manière basique de git. Je suppose ici que vous n’avez (presque) jamais entendu parler de cet outil. Je fais évidemment des raccourcis et abus de langages. Et n’oubliez pas de lire la doc de git, git help [commande] est très utile.

Pourquoi utiliser git

Git permet de gérer le code d’un projet avec différentes versions, différents contributeurs, en gardant un suivi chronologique de quelle personne a fait quelle modification dans le code. Avec des dépots en ligne (disponibles par exemple sur GitLab ou GitHub), cela permet de rester à jour et d’avoir une sauvegarde du code. Git a beaucoup d’utiliés, habituez-vous à l’utiliser, c’est très largement répandu dans le millieu du développement.

Installer git

Sur Ubuntu, utilisez le gestionnaire de paquets (similaire pour les autres distrib Linux)

sudo apt-get install git

Sur MacOS, s’il n’est pas installé par défaut utilisez le gestionnaire brew

brew install git

Sur Windows, vous pouvez télécharger git depuis le site git-scm : télécharger git pour Windows. Si vous utilisez le gestionnaire de paquet Chocolatey :

choco install git

Utiliser git

Git va permettre de repérer tous les changements qui sont effectués dans les fichiers de code d’un certain dossier, et vous pourrez ensuite marquer ces changements avec une phrase explicative qui permettra d’expliquer de manière concise les changements que vous venez de faire. C’est utile lorsque d’autres développeurs lisent votre code et veulent comprendre pourquoi vous avez fait telle modification dans tel ordre etc. Lorsque vous utilisez git, le dossier suivi par git est appelé un dépôt (repo en anglais).

Initialiser un dépôt

Il faut faire la distinction entre le dépôt qu’il y a sur votre machine ( = en local), et le dépôt sur lequel votre code sera sauvegardé / publié ( = sur un serveur, par exemple GitLab). Vous n’êtes pas du tout obligé d’utiliser un dépôt sur un serveur pour utiliser git, mais dans la pluspart des cas vous utiliserez un dépôt distant ( = sur un serveur) pour permettre à d’autres développeurs d’accéder à votre code.

Si vous utilisez git avec un dépôt distant :

  • Allez sur GitLab ou GitHub, connectez-vous et créez un nouveau projet
  • Pensez à cocher la case “initialiser le dépôt avec un README” si vous débutez un projet
  • Cliquez sur “cloner mon projet” et copiez l’adresse de votre projet (si vous avez le choix entre HTTPS et SSH, prenez HTTPS)
  • Dans votre terminal, tapez la commande git clone adresse-de-mon-projet. Vous pouvez préciser à la fin de la commande dans quel dossier vous voulez que votre projet soit cloné.
  • Placez vous dans le dossier que la commande a créé, vous êtes prêts à utiliser git

Si vous utiliser git en local:

  • Dans le terminal, placez vous dans le dossier de votre projet
  • Tapez la commande git init
  • C’est prêt (vous pourrez toujours ajouter un dépôt distant, cf. Plus tard)

Vous pouvez désormais taper la commande suivante, qui vous sera très utile pour savoir où vous en êtes dans votre repo :

git status

Le principe du commit

Git fonctionne avec des commits. Un commit représente un ensemble de modifications sur plusieurs fichiers, il est accompagné d’un message concis qui explique ce qu’on a modifié et pourquoi.

Avant de créer un commit, il faut dire à git quelles modifications on veut ajouter dans le prochain commit. Pour cela on utilise la commande git add. Par exemple, si j’ai deux fichiers affichage.c et main.c, que j’ai modifié ces deux fichiers, mais que je veux créer un commit uniquement avec ce qui concerne l’affichage, je vais taper :

git add affichage.c

La commande git status permet ici de savoir quel fichier a été ajouté pour le futur commit et quelles modifications ne seront pas prises en compte.

La commande de création de commit est git commit, le plus souvent accompagnée de l’option -m qui permet d’ajouter le message en question. Dans l’exemple précédent, après le git add je vais donc taper :

git commit -m "ajout d'une fonction hello dans l'affichage"

La commande git status nous indique cette fois que il n’y a plus que les modifications de main.c qui n’ont pas été prises en compte. De plus, si vous travaillez avec un dépôt distant, la commande vous dit que vous êtes maintenant “en avance” de 1 commit par rapport au dépôt du serveur.

Pousser ses modifications sur le repo distant

Si vous avez cloné le repo à partir d’un serveur (par exemple GitLab), après vos différents commits vous pouvez pousser vos modifications pour qu’elles apparaissent sur le serveur, et que d’autres personnes puissent les récupérer. Pour cela vous utilisez la commande :

git push

Il est probable que la commande vous demande de vous authentifier avec le compte que vous avez utilisé sur le serveur. Si vous en avez marre de rentrer vos identifiants à chaque git push, regardez la section “commandes utiles”.

Récupérer les modifications que quelqu’un a fait sur le serveur

Si d’autres personnes qui participent à votre projet ont fait des modifications et les ont poussées sur le serveur, alors vous pouvez les récupérer via la commande

git pull

Gestion de conflits & merge

[WIP] Le point le plus compliqué de git.

En résumé

git clone adresse_du_depot
git add fichier
git commit -m "message concis d'explication des modifications"
git push

La structure en arbre de git

Git fonctionne avec une structure d’arbre, ou de listes chainées si vous voulez. Chaque commit va “pointer” vers le commit précédent, ainsi vous avez accès à tout l’historique des modifications effectuées dans le projet. Pour voir les commits effectués, tapez (appuyez sur q pour sortir) :

git log

Si votre code est disponible sur GitLab ou GitHub (ou similaire), vous avez un onglet “graph” sur la page de votre projet qui représente tous les commits effectués.

Les branches

[WIP] Les branches sont un moyen de travailler sur une fonctionnalité ou une partie du projet sans affectuer l’état actuel de la partie “principale” du projet. Cela permet aussi d’avoir en parallèle plusieurs versions du projet.

Les merges

[WIP] Pour fusionner deux branches

Commandes utiles

Annuler des modifications

git checkout nom_du_fichier

Ajouter un dépôt distant à son dépôt local

git remote add origin url_dépôt_distant

puis

git push -u origin master

si vous voulez éviter de retaper -u à chaque fois, vous pouvez “lier” votre branche locale à une branche distante :

git branch --set-upstream-to origin/master

Les modes d’authentification

Pour éviter d’avoir à vous identifier à chaque push, vous pouvez configurer des clés SSH qui vous permettent de vous authentifier via un fichier. SI vous n’avez pas encore de clé ssh sur votre machine, vous pouvez en créer une via ssh-keygen. Si vous ne changez pas le nom de la clé par défaut, vous aurez une clé ssh publique et privée :

~/.ssh/id_rsa.pub
~/.ssh/id_rsa

Le .pub signifie clé publique. Ensuite, dans les paramètres de cotre compte GitLab ou GitHub, dans l’onglet ssh keys, vous pouvez copier votre clé ssh publique pour l’associer à votre compte.

Pour utiliser la clé SSH plutôt que vos identifiants, vous devez clonez les dépôts via SSH et non via HTTPS quand vous cliquez sur cloner.

Si vous obtenez une erreur du style public key denied lors du git push, vous devrez sans doute ajouter votre clé SSH à l’agent qui gère SSH sur votre machine :

ssh-add ~/.ssh/id_rsa

Git intégré à un IDE

De nombreux IDE (même vim) proposent des plugins pour intégrer git directement dans l’éditeur de code. Cela permet de vous montrer quelles lignes ont été modifiées par rapport au commit précédent, et peut aussi vous aider lors de la résolution de conflit en montrant les deux modifications de code et une prévisualisation de vos actions. Cela permet aussi d’ajouter rapidement des fichiers à un commit et de push avec un simple clic. Ca peut être pratique comme dangereux, donc à vous de voir.