Logo
Introduction à Git & Github
Overview
Introduction à Git & Github

Introduction à Git & Github

5 septembre 2022
12 janvier 2025
10 min de lecture
Disponible en :

Cet outil possède trois fonctions principales :

  • Revenir à une version antérieure de votre code en cas de problèmes
  • Suivre l’évolution de votre code étape par étape
  • Travailler en collaboration sans risquer la suppression des modifications d’autres contributeurs
Note (Variantes)

Il existe plusieurs alternatives à Github, la plus connue étant Gitlab qui est un fork de Github qui ajoute des améliorations et offre la possibilité d’auto-hébergement. Le fonctionnement reste similaire.

Comment ça fonctionne

Git fonctionne de manière similaire à une sauvegarde incrémentale, où un ensemble de dossiers/fichiers seront ajoutés au projet. Par la suite, un historique complet des modifications du projet sera disponible - ces modifications peuvent être ignorées, ajoutées, supprimées ou fusionnées.

Git offre un système de branches, ce qui permet par exemple, de développer du contenu sur la branche principale sans l’altérer. C’est parce que Git aura préalablement fait une sorte de clone secondaire de la branche (en utilisant la commande git checkout -b mabranche).

Ce diagramme illustre les 3 étapes de fonctionnement de Git (source Openclassrooms)

  • Le répertoire de travail (Working directory) correspond au dossier du projet sur la machine.

  • Le Stage ou Index est l’étape intermédiaire représentant tous les fichiers modifiés qui ont été “staged”. [!ref icon=“rocket” text=“Comment stager un dossier/fichier”](#ajout-de-dossiersf ichiers-au-dépôt)

  • Le dépôt (repository) est l’ensemble du projet avec ses commits.

Dépôt local

  • Un dépôt est l’ensemble des dossiers/fichiers qui constituent un projet initié par Git.
  • Dans la documentation en ligne ou en milieu professionnel, on parle souvent de repositories.
  • Le dépôt local est stocké directement sur la machine.

Dépôt distant

  • Le dépôt distant est hébergé sur un serveur distant 🧠

Initialiser un dépôt

:icon-arrow-up: Se rendre dans le répertoire souhaité, par exemple : cd ~/monprojet

  • Initialiser un dépôt local :
tip: Using 'master' as the name of the initial branch. This default branch name
tip: is subject to change. To configure the initial branch name for all new
tip: repositories, and suppress this warning, run:
tip:
tip: git config --global init.defaultBranch <name>
tip:
tip: Names commonly chosen instead of 'master' are 'main', 'trunk' and
tip: 'development'. The newly created branch can be renamed with:
tip:
tip: git branch -m <name>
Empty Git repository initialized in /home/contact/contactit.fr/.git/
  • Ou initialiser un dépôt distant :
git clone https://github.com/username/project/myproject.git
Cloning into 'myproject.git'...
remote: Enumerating objects: 11779, done.
remote: Counting objects: 100% (82/82), done.
remote: Compressing objects: 100% (66/66), done.
remote: Total 11779 (delta 52), reused 33 (delta 16), pack-reused 11697
Receiving objects: 100% (11779/11779), 23.50 MiB | 11.34 MiB/s, done.
Resolving deltas: 100% (7047/7047), done.

La commande git clone va directement importer le projet et ses fichiers sources dans un dossier portant son nom.

  • Il peut être nécessaire de mettre à jour le dépôt suite à un changement effectué par un autre contributeur du projet, utilisez la commande :
git pull origin mabranche
Note

“Pull” et “fetch” permettent de requêter un dépôt

Vérification

ls -la
total 12
drwxr-xr-x 3 contact contact 4096 Sept. 5 15:26 .
drwxr-x--- 14 contact contact 4096 Sept. 5 15:23 ..
drwxrwxr-x 7 contact contact 4096 Sept. 5 15:26 .git

Le dépôt .git est présent dans le répertoire sous forme de dossier caché.

Ajout de dossiers/fichiers au dépôt :

La commande git add permet d’indexer des fichiers à Git.

  • Une fois les dossiers/fichiers indexés, il est possible d’effectuer un commit après avoir modifié un élément.

Quelques exemples :

  • git add README ajoute le fichier README
  • git add . ajoute tous les dossiers et fichiers du répertoire où .git est situé.

.gitignore

  • .gitignore est un fichier qui liste les dossiers/fichiers ignorés par Git.
  • Il suit une syntaxe définie.

Quelques exemples :

  • *.log ignore tous les fichiers avec l’extension .log
  • /dossier ignore le dossier de manière récursive.

:icon-unverified: Plus d’informations sont disponibles ici

Note

git status permet de voir les modifications des dossiers/fichiers par rapport à la dernière version sauvegardée (commit).

Commits

Un “commit” est une version des dossiers/fichiers précédemment indexés, qui est différente de la version suivante.

  • La commande git commit permet de valider les modifications apportées aux fichiers indexés ou “staged” par Git.
Note

Ces modifications sont appliquées depuis le “répertoire de travail” et ne sont plus dans le “Stage”, elles sont déplacées vers le “dépôt”.

Tip

Il est recommandé de nommer les commits avec un nom différent pour chaque étape de modification.
git commit -m etape1 permet de nommer (indiquer de manière concise le contenu du commit, max. 60 caractères).
git commit --amend -m "etape2" permet de changer le nom d’un commit existant !

Installation de Git

sudo apt install git
[sudo] Password for contact:
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
git is already the newest version (1:2.34.1-1ubuntu1.4).
git set as "manually installed"
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
1 partially installed or removed.
After this operation, 0 B of additional disk space will be used.
Do you want to continue? [Y/n]
  • Validez l’installation : Y ou ajoutez l’option -y à la fin de la commande.

Identité

L’identité dans Git est simplement votre nom et votre adresse e-mail.

Ces deux informations sont nécessaires pour la validation par Git :

  • git config --global user.name "John Doe"

  • git config --global user.email contact@contactit.fr

Note

Grâce à l’option --global, vous n’aurez besoin de le faire qu’une seule fois.

Danger

Si vous souhaitez changer votre nom d’utilisateur pour un projet spécifique, vous devrez repasser cette ligne sans l’option --global.

  • Pour vérifier que vos paramètres ont été pris en compte, il suffit de passer la commande :
    git config --list
Tip

Il est recommandé d’activer les couleurs pour une meilleure visibilité :

git config --global color.diff auto
git config --global color.status auto
git config --global color.branch auto

Pousser le dépôt

  • Ajoutez d’abord l’origine (l’emplacement distant du dépôt) :
git remote add origin https://github.com/username/project/myproject.git
Note

git remote add nom https://github.com/username/project/myproject.git permet de raccourcir le nom (url > “nom”) pour appeler le dépôt ultérieurement.

  • Sélectionnez la branche où vous souhaitez téléverser le dépôt :
git branch -M mabranche
  • Téléversez le dépôt :
git push -u origin mabranche

Branches

  • Une branche est une copie du projet à un instant T donné, toutes les modifications qui lui sont apportées n’affecteront que celle-ci.
    Cela permet d’avoir plusieurs états du projet en même temps.

  • La branche principale est la branche main (anciennement appelée master avant octobre 2020). Cette branche est souvent la branche de production, donc stable, du projet.

  • Il peut y avoir d’autres noms de branches comme : dev ou staging, ce sont des branches de développement non stables, des tests et vérifications seront effectués sur elles une fois le développement terminé.

  • Si le résultat est concluant, il peut être possible de fusionner ces branches vers la branche main ou master.
    Les branches sont souvent utilisées pour recréer un environnement de test / pré-production et production.

Illustration des branches d'un dépôt Git

ℹ️ Git peut être comparé à un arbre :

  • Le tronc de l’arbre est la branche principale du projet (la plupart du temps : main ou master)

  • Les branches sont des éléments qui proviennent du tronc mais partent dans différentes directions

  • Les feuilles sont les unes au-dessus des autres, plus ou moins nombreuses et tombent ou restent sur les branches comme des commits.

  • Conclusion : en hiver il y a plus de commits 😉

  • La commande git branch permet de lister les branches du dépôt :

list
* master
  • Ici il y a deux branches : list et master maintenant main.
    Le * indique que je suis actuellement dans la branche master.
Note

L’option -d supprime une branche (git branch -d mabranche) L’option -b crée une nouvelle branche (git checkout -b mabranche)

  • La commande git checkout mabranche permet de changer de branche :
git checkout mabranche
Switched to branch 'mabranche'
  • Il est possible de créer une branche depuis un commit avec l’une des commandes suivantes :
git checkout -b manouvellebranche <commit_sha>
Tip

Notez que git checkout <sha> permet également de revenir à un commit.

  • Pour obtenir le sha (hash) du commit, on peut utiliser la commande :
it log --oneline --graph
* 5aaf865 Deletion of README
* 6746dbc Adding test text
* 931dc0f Creation of README

Le sha est constitué des caractères hexadécimaux après le ”*” :icon-arrow-right: 931dc0f, par exemple.

Git stash

  • La commande git stash permet de mettre un commit de côté pour que la branche actuelle devienne propre, donc sans données dans la zone de stage. Cette situation est adaptée lorsqu’un commit n’a pas été effectué et que les modifications sont toujours dans le stage.

  • En pratique, la commande git status retourne qu’il y a plusieurs modifications (dans la zone de stage) qui n’ont pas été commitées.

  • Stash permet de les mettre de côté, pour pouvoir les insérer dans une autre branche, ce qui peut être utile lorsque vous vous êtes trompé de branche !

  • Après avoir exécuté la commande git stash si vous relancez la commande git status, elle retourne que le répertoire de travail est propre (stage vide).

  • Maintenant je peux aller vers une nouvelle branche ou une existante avant d’insérer les modifications effectuées :

Terminal window
git branch manouvellebranche
Terminal window
git checkout manouvellebranche
git branch
* manouvellebranche
master
git stash apply

Git reset

  • Git reset permet d’annuler des modifications de trois manières différentes : soft, mixed et hard

Illustration des 3 types de Git reset (source Openclassrooms)

Supprimer le dernier commit

  • D’abord, regardez les logs et donc le dernier commit effectué et son identifiant :
ca83a6dff817ec66f443420071545390a954664949 Author: contact
<contactit[.]yarka(at)slmail.me> Date: Mon Mar 19 21:52:11 2022 -0700
  • Notez l’identifiant : ca83a6dff817ec66f443420071545390a954664949 si vous devez l’assigner à une autre branche après l’avoir supprimé.

  • Maintenant je peux supprimer le dernier commit avec la commande :

Terminal window
git reset --hard HEAD^

Authentification Github

Github repose sur l’authentification avec SSH, donc une paire de clés.

Pour générer cette paire de clés, j’utilise la commande suivante :

ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/contact/.ssh/id_ed25519):
Created directory '/home/contact/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/contact/.ssh/id_ed25519
Your public key has been saved in /home/contact/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:myhash contact@mydomain
The key's randomart image is:
+--[ED25519 256]--+
|%@+. |
|EBCVB. |
|+=Bo. |
|+.o* . |
|oo..o . S S |
|=+oo o |
|B++ o . . |
|+=.. o . |
|o. . . |
+----[SHA256]-----+
Tip

ed25519 est le standard recommandé actuel en termes de sécurité, RSA est compatible avec plus de systèmes (mais moins sécurisé (-4096 minimum)).

Ensuite, je récupère la clé publique qui servira à prouver mon identité à github :

cat ~/.ssh/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAKC91uWop9DhfNh23i6u0yUlhEkGv0IOQKzhU5ltKBkAG contact@contactit.fr

Je peux maintenant la saisir dans : Settings>SSH and GPG keys, dans la section title je peux mettre n’importe quel nom et dans la section key je colle ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAKC91uWop9DhfNh23i6u0yUlhEkGv0IOQKzhU5ltKBkAG contact@contactit.fr, valider avec Add SSH key.

Résumé de Git/Github

(Source Openclassrooms