
GitHub est une plateforme de développement qui permet aux développeurs de partager du code, de collaborer sur des projets et de gérer des versions de logiciels. Cette plateforme repose sur Git, un système de contrôle de version décentralisé inventé par le créateur de Linux : Linus Torvald.
Fonctionnalités clés :
- Dépôts (Repositories) : un dépôt est un projet contenant tous les fichiers, l'historique des versions et les contributions. Un dépôt peut être public (accessible à tous) ou privé (accessible uniquement aux personnes autorisées).
- Branches : les branches permettent de créer des versions parallèles du projet. Par exemple, on peut travailler sur une nouvelle fonctionnalité ou corriger un bug sans affecter la version principale du code (souvent appelée branche 'main').
- Pull Requests : cela permet que les modifications apportées sur une branche soient intégrées dans la branche principale du projet. Dans le cadre d'un projet collaboratif, les autres développeurs peuvent alors examiner le code, laisser des commentaires et éventuellement fusionner les modifications.
- Issues : elles sont utilisées pour suivre les bugs, les améliorations ou toute autre tâche associée à un projet.
- GitHub Actions : c'est un outil d'intégration permettant d'automatiser des tâches telles que les tests, les déploiements ou la génération de la documentation. Les actions peuvent être déclenchées par des évènements comme la création de Pull Requests.
- Pages GitHub : cette fonctionnalité permet de publier du contenu web directement à partir d'un dépôt GitHub.
git init
Lorsqu'un dépôt Git est initialisé, un sous répertoire .git est créé dans le répertoire courant. Ce sous-répertoire contient les fichiers de configuration, l'historique des commits ainsi que les informations nécessaires au suivi du projet.
Après avoir initialisé le dépôt, on peut commencer à ajouter des fichiers au suivi de Git en utilisant la commande git add.
Après avoir ajouté des fichiers , on on peut enregistrer les modifications apportées au dépôt en utilisant la commande git commit.
L'initialisation d'un dépôt local ne crée pas de dépôt distant (par exemple sur GitHub ou GitLab).
Pour connecter un dépôt local à un dépôt distant, il faut utiliser la commande :
> git remote add origin url-du-depot
Pour afficher la liste des dépôts distants :
> git remote -v
git clone
git clone crée une copie d'un dépôt Git existant. Cette commande télécharge tous les fichiers du projet, y compris l'historique des versions, et configure le dépôt local pour qu'il soit prêt à être utilisé et synchronisé avec le dépôt distant.
Pour clôner un dépôt dans un répertoire spécifique :
> git clone url-du-depot nom-du-repertoire
Pour clôner une branche spécifique :
> git clone -b nom-de-la-branche url-du-depot
git status
git status affiche l'état du répertoire de travail et de la zone de staging (ou zone d'index). On obtient :
- la branche sur laquelle on travaille.
- les commits en attente de push vers le dépôt distant.
- les fichiers non suivis (untracked) que l'on peut ajouter via la commande git add.
- les fichiers suivi par Git mais qui ont été modifiés depuis le dernier commit : ils doivent être ajoutés à la zone de staging via la commande git add avant de pouvoir être commités.
- les fichiers prêts à être commités.
Sous le terminal, se positionner sur le dossier.
> git add nom-fichier
ajoute le fichier au dépôt
> git add .
ajoute tous les fichiers modifiés au dépôt
Il est recommandé de créer un fichier .gitignore pour exclure certains fichiers ou dossiers du suivi Git.
Enregistrer les changements apportées au dépôt dans l'historique de Git :
> git commit -m "message décrivant le changement apporté"
il convient de faire des commits régulièrement : chaque commit est un point de sauvegarde dans l'historique du projet.
git add
Quand on modifie un fichier dans le répertoire de travail, Git ne l'ajoute pas automatiquement à la liste des fichiers à inclure dans le prochain commit. git add permet de spécifier quels fichiers doivent être ajoutés à cette liste.
Pour ajouter un fichier spécifique :
> git add nomfic
Pour ajouter plusieurs fichiers spécifiques :
> git add nomfic1 nomfic2
Pour ajouter tous les fichiers modifiés :
> git add .
Pour ajouter tous les fichiers dans un répertoire spécifique :
> git add sous-repertoire/
Pour ajouter un fichier avec un chemin spécifique :
> git add chemin/nomfic
Si un fichier est listé dans .gitignore, git add ne l'ajoutera pas à la zone de staging. Exemple :
# ignorer les fichiers de configuration
config.ini
# ignorer le dossier de dépendances
/node_modules/
# ignorer les fichiers de compilation
*.exe
git commit
Un commit représente un instantané (snapshot) du projet à un instant donné, avec un message décrivant les changements effectués.
Commit avec message :
> git commit -m "message décrivant les changements"
Commit sans message :
> git commit : ouvre un éditeur de texte sous Vi
Commit de tous les fichiers suivis par Git et modifiés :
> git commit -a -m "message"
Chaque commit comprend :
- un hash unique
- un auteur (nom et email de la personne ayant fait le commit)
- un message décrivant les modifications
- un timestamp (date et heure du commit)
- les changements apportés aux fichiers
git log
git log est utilisée pour afficher l’historique des commits dans un dépôt Git. Elle permet de visualiser les commits, leur auteur, la date à laquelle ils ont été effectués, ainsi que les messages de commit.
> git log
affiche les commits du plus récent au plus ancien.
> git log --oneline
affiche chaque commit sur une seule ligne.
> git log -n 5
affiche les cinq derniers commits.
> git log -p
affiche, en plus des informations classiques, les différences introduites par chaque commit.
> git log --graph
affiche l'arbre des commits.
Sous le terminal, se positionner sur le dossier.
> git branch
liste les branches du projet
> git checkout -b nom-de-la-branche
crée une nouvelle branche (où nom-de-la-branche doit être significatif, par ex.: fix/bug-tva)
> git checkout nom-de-la-branche
passe d'une branche à l'autre
> git branch -d nom-de-la-branche
supprime une branche
pour fusionner une branche dans la branche principale :
> git checkout main
> git merge nom-de-la-branche
Si les modifications sur la branche à fusionner sont en conflit avec la branche cible (ici : main), il conviendra d'éditer les fichiers en conflit puis ajouter ces changements (git add) et enfin valider les changements (git commit).
Partager les changements avec les autres
Sous github.com, créer un nouveau dépôt : une URL est générée (ex.: https://github.com/marbelliere/nom-depot)
Depuis la machine locale, envoyer les modifications vers le dépôt distant :
> git push origin nom-de-la-branche
Si vous travaillez sur un projet collaboratif, vous pouvez soumettre un Pull Request pour demander que vos modifications soient examinées et éventuellement fusionnées dans la branche principale.
Mettre à jour le projet local
Pour synchroniser la machine locale avec le dépôt distant :
> git pull
Gérer les versions
Lorsqu'une version stable du projet est atteinte, la marquer d'un tag :
> git tag v1.0 (où 1.0 variera en fonction de la version stabilisée)
> git push origin --tags (pour publier le tag sur le dépôt distant)
git branch
Pour afficher la liste des branches locales (la branche courante est marquée par un astérisque devant son nom) :
> git branch
Pour lister les branches distantes (celles sur le serveur) :
> git branch -r
Pour afficher à la fois les branches locales et distantes :
> git branch -a
Pour créer une nouvelle branche (on ne bascule pas automatiquement dessus) :
> git branch nom-de-la-branche
Pour supprimer une branche locale (Git refusera de supprimer une branche non fusionnée, à moins d'utiliser l’option -D pour forcer la suppression) :
> git -d nom-de-la-branche
Pour renommer la branche actuelle (ou celle spécifiée si ancien-nom est renseigné) :
> git -m ancien-nom nouveau-nom
git checkout
Pour changer de branche :
> git checkout nom-de-la-branche
Pour créer une nouvelle branche et basculer vers celle-ci :
> git checkout -b nouvelle-branche
Pour restaurer des fichiers spécifiques :
> git checkout nom-de-la-branche -- chemin/vers/fichier
Pour restaurer un fichier supprimé par erreur :
> git checkout HEAD -- chemin/vers/fic
La commande git checkout a été en partie remplacée par les commandes suivantes :
> git switch nom-de-la-branche (pour changer de branche)
> git restore chemin/vers/fichier (pour restaurer un fichier)
git push
Pour pousser des modifications vers une branche distante :
> git push remote nom-de-la-branche
où remote correspond au nom du dépôt distant (souvent origin par défaut)
et nom-de-la-branche correspond à la branche locale que l'on souhaite pousser vers le dépôt distant
Pour pousser toutes les branches locales vers leur correspondance sur le dépôt distant :
> git push --all
Les tags (étiquettes) ne sont pas poussés automatiquement avec git push. Pour pousser tous les tags locaux vers le dépôt distant :
> git push origin --tags
Pour pousser pour la première fois une nouvelle branche vers le dépôt distant :
> git push -u origin nouvelle-branche
Pour forcer le push :
> git push --force origin main
> git push --force-with-lease (vérifie si la branche distante a été mise à jour avant de forcer le push)
Pour supprimer une branche sur le dépôt distant :
> git push origin --delete nom-de-la-branche
Pour pousser une branche locale vers une branche distante avec un nom différent :
> git push origin nom-branche-locale:nouveau-nom-branche-distante
git pull
Pour récupérer les modifications depuis un dépôt distant et les intégrer dans la branche courante de votre dépôt local :
> git pull [remote] [branche]
Pour récupérer les modifications depuis le dépôt distant puis réappliquer les commits locaux par-dessus les nouveaux commits récupérés et éviter ainsi un commit de merge :
> git pull --rebase
Pour toujours utiliser rebase avec git pull dans un dépôt donné :
> git config pull.rebase true
Pour le configurer globalement pour tous les dépôts Git :
> git config --global pull.rebase true