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).

-
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 nametip: is subject to change. To configure the initial branch name for all newtip: 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' andtip: '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 :
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 11697Receiving 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 mabrancheNote
“Pull” et “fetch” permettent de requêter un dépôt
Vérification
total 12drwxr-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 .gitLe 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 READMEajoute le fichierREADMEgit add .ajoute tous les dossiers et fichiers du répertoire où.gitest situé.
.gitignore
.gitignoreest un fichier qui liste les dossiers/fichiers ignorés par Git.- Il suit une syntaxe définie.
Quelques exemples :
*.logignore tous les fichiers avec l’extension.log/dossierignore 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 commitpermet 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] Password for contact:Reading package lists... DoneBuilding dependency tree... DoneReading state information... Donegit 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 :
You 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 autogit config --global color.status autogit config --global color.branch autoPousser 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.gitNote
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 mabrancheBranches
-
Une branche est une copie du projet à un instant
Tdonné, 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éemasteravant octobre 2020). Cette branche est souvent la branche de production, donc stable, du projet. -
Il peut y avoir d’autres noms de branches comme :
devoustaging, 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
mainoumaster.
Les branches sont souvent utilisées pour recréer un environnement de test / pré-production et production.

ℹ️ 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 branchpermet 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 mabranchepermet de changer de branche :
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 :
* 5aaf865 Deletion of README* 6746dbc Adding test text* 931dc0f Creation of READMELe sha est constitué des caractères hexadécimaux après le ”*” :icon-arrow-right: 931dc0f, par exemple.
Git stash
-
La commande
git stashpermet 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 statusretourne qu’il y a plusieurs modifications (dans la zone de stage) qui n’ont pas été commitées. -
Stashpermet 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 stashsi vous relancez la commandegit 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 :
git branch manouvellebranchegit checkout manouvellebranche* manouvellebranchemastergit stash applyGit reset
- Git reset permet d’annuler des modifications de trois manières différentes :
soft,mixedethard

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 :
ca83a6dff817ec66f443420071545390a954664949si vous devez l’assigner à une autre branche après l’avoir supprimé. -
Maintenant je peux supprimer le dernier commit avec la commande :
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 :
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_ed25519Your public key has been saved in /home/contact/.ssh/id_ed25519.pubThe key fingerprint is:SHA256:myhash contact@mydomainThe 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 :
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAKC91uWop9DhfNh23i6u0yUlhEkGv0IOQKzhU5ltKBkAG contact@contactit.frJe 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
