#
👽 GIT & Github
Cette documentation est en cours d'Ă©criture ✍️
Il pourrait il y a avoir quelques erreures.
Si vous en remarquez une, contactez-moi ici 🙂
Vous pouvez directement utiliser la barre de recherche.
Ou l'onglet de droite pour trouver la section qui vous intéresse.
Toutes les adresses ip et masques de cette documentation, sont proposés à titre d'exemple, et peuvent donc, ne pas coïncider avec votre configuration.
Faites attention, Ă bien renseigner les vĂ´tres 🙂
Cet outil a trois grandes fonctionnalités :
- Revenir à une version précédente de votre code en cas de problème.
- Suivre l’évolution de votre code étape par étape.
- Travailler Ă plusieurs sans risquer de supprimer les modifications des autres collaborateurs.
Il existe plusieurs alternatives à Github, la plus connue est Gitlab qui est un fork de github qui vise ajoute des améliorations et offre la possibilité de l'auto-héberger. Le fonctionnement reste similaire.
#
Fonctionnement
Git fonctionne de manière similaire à la sauvegarde incrémentielle, un ensemble de dossiers/fichiers va être ajouté au projet.
Par la suite, un historique complet des changements du projet sera disponible, ces changements pourront être ignorés, ajoutés, supprimés ou mergés (fusionnés).
Git propose un système de branche, ce qui permet par exemple, de développer le contenu du projet de la branche principale sans altérer celle-ci. Puisqu'au préalable Git aura fais une sorte de clone secondaire de la branche
(avec la commande git checkout -b mabranche
).
Le Working directory correspond au dossier du projet sur la machine.
Le Stage ou Index est l'étape intermédiaire qui représente tous les fichiers modifiés qui ont été "indexés".
Le repository est l'ensemble du projet avec les commits réalisés.
#
Le dépôt local
Un dépôt est l'ensemble des dossiers/fichiers qui constituent un projet initié avec Git.
Dans la documentation en ligne ou en milieu professionnel, on parle souvent de repository, qui est la traduction anglaise du terme “dépôt”.
Le dépôt local est stocké directement sur la machine.
#
Le dépôt distant
Le dĂ©pĂ´t distant est hĂ©bergĂ© sur un serveur distant 🧠
#
Installation de Git
[sudo] Mot de passe de contact :
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances... Fait
Lecture des informations d'état... Fait
git est déjà la version la plus récente (1:2.34.1-1ubuntu1.4).
git passé en « installé manuellement ».
0 mis à jour, 0 nouvellement installés, 0 à enlever et 0 non mis à jour.
1 partiellement installés ou enlevés.
Après cette opération, 0 o d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer ? [O/n]
Valider l'installation: O
ou ajouter l'option -y
a la fin de la commande.
#
L'identité
L'identité dans Git est simplement votre nom et votre adresse mail.
Ces deux informations sont nécessaires aux validations Git:
git config --global user.name "John Doe"
git config --global user.email contact@contactit.fr
Grâce à l’option --global
vous n’aurez besoin de le faire qu'une fois.
Si vous souhaitez, pour un projet spécifique, changer votre nom d’utilisateur, vous devrez repasser cette ligne mais sans le
--global
Pour vérifier que vos paramètres ont bien été pris en compte, il suffit de passer la commande:
git config --list
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
#
Initier un dépot
Aller au repertoire désiré, par exemple: cd ~/monprojet
Initier un dépôt local:
astuce: Utilisation de 'master' comme nom de la branche initiale. Le nom de la branche
astuce: par défaut peut changer. Pour configurer le nom de la branche initiale
astuce: pour tous les nouveaux dépôts, et supprimer cet avertissement, lancez :
astuce:
astuce: git config --global init.defaultBranch <nom>
astuce:
astuce: Les noms les plus utilisés à la place de 'master' sont 'main', 'trunk' et
astuce: 'development'. La branche nouvellement créée peut être rénommée avec :
astuce:
astuce: git branch -m <nom>
Dépôt Git vide initialisé dans /home/contact/contactit.fr/.git/
Ou initier un dépôt distant:
Clonage dans 'monprojet.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
Réception d'objets: 100% (11779/11779), 23.50 Mio | 11.34 Mio/s, fait.
Résolution des deltas: 100% (7047/7047), fait.
La commande git clone
va directement importer le projet ainsi que les fichiers sources de celui-ci dans un dossier portant son nom.
Il peut être nécessaire de mettre à jour le repository suite à un changement effectué par un autre acteur du projet, utilisez la commande:
git pull origin mabranche
"Pull" et "fetsh" permettent de requĂŞter un repository
#
Vérification
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épot .git
est bien pésent dans le répertoire sous la forme d'un dossier caché.
#
Indexer des dossiers/fichiers au dépot:
La commande git add
permet d'indexer des fichiers Ă Git.
Une fois les dossiers/fichiers indexés, il est possible de faire un commit après modification d'un élément.
Quelques exemples:
git add README
ajoute le fichier README
git add .
ajoute l'ensemble des dossiers et fichiers Ă l'endroit ou le .git
se trouve.
#
.gitignore
.gitignore
est un fichier qui recense les dossiers/fichiers ignorés par GIT.
- Il répond à une syntaxe définie.
Quelques exemples:
*.log
ignore tous les fichiers ayant l'extension .log
/dossier
ignore le dossier de manière récursive.
Plus d'informations sont disponibles ici
git status
permet de voir les changements des dossiers/fichiers par rapport à la dernière version enregistrée (commit).
#
Les commits
Un "commit" est une version des dossiers/fichiers indexés précedemment, qui est différente par rapport à la version ultérieure.
- la commande
git commit
permet de valider les changement opérés sur les fichiers indexés ou "stagés" par GIT.
Ces changements sont appliqués du "working directory" et ne sont donc plus en "Stage", ils sont déplacés dans le "repository".
Il est conseillé 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 conçise le contenu du commit, limite max. 60 caractères).
git commit --amend -m "etape2"
permet de changer le nom du commit existant !
- Il est possible de voir les commits précédemment enregistrés avec la commande:
git log
- Cette commande permet également de consulter le contenu d'un ou plusieurs commits:
git log -p1
L'option -p1
affiche le dernier commit réalisé.
#
Push le repository
- Il faut d'abord ajouter l'origine (l'endroit ou est le repository distant):
git remote add origin https://github.com/username/projet/monprojet.git
Astuce:
git remote add nom https://github.com/username/projet/monprojet.git
permet de raccourcir le nom (url > "nom") pour appeler le dépôt par la suite.
- Sélectionner la branche dans laquelle je veux uploader le repository:
git branch -M mabranche
- Envoyer le repository:
git push -u origin mabranche
#
Les branches
Une branche est une copie du projet Ă un instant T
, toutes les modifications faites sur celle-ci n'affectera que cette dernière.
Cela permet d'avoir plusieurs états du projet simultanément.
La branche principale est la branche main
(précédemment 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 stagging
ce sont des branches non stables en développement actif, des tests et vérifications seront faites sur celles-ci une fois le développement terminé.
Si le réultat est concluant alors il est possible que ces branches soient mergées
(fusionnées) à la branche main
ou master
.
Les branches sont souvent utilisées pour recréer un environnement de tests / 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 viennent du tronc mais qui partent dans des diréctions différentes
Les feuilles sont les unes sur les autres, plus ou moins nombreuses et tombent ou reste sur les branches comme les commits.
conclusion: en hiver on a plus de commits 😉
La commande git branch
permet de lister les branches du repo:
list
* master
Ici il y a deux branches: list et master.
Le *
indique que je suis actuellement dans la branche master.
L'option -d
supprime une branche (git branch -d mabranche
)
L'option -b
créer une nouvelle branche (git checkout -b mabranche
)
La commande git checkout mabranche
permet de changer de branche:
Switched to branch 'mabranche'
Il est possible de créer une branche à partir d'un commit, avec l'une des commandes:
git checkout -b manouvellebranche <commit_sha>
A noter que git checkout <sha>
permet également de revenir sur un commit.
Pour avoir le sha
(hash) du commit nous pouvons passer la commande:
* 5aaf865 Suppression du README
* 6746dbc Ajout d'un texte de test
* 931dc0f Création du README
le sha
est constitué de la suite de caractères héxadécimaux après le "*" 931dc0f, par éxemple.
Ici je créer une branche à partir du commit 931dc0f dont la modification porte sur la création du README.
#
Fusionner (merge) deux branches
Il faut d'abord se positionner dans la branche de destination du merge:
Switched to branch 'master'
Puis fusionner les commits des branches:
Merge made by the 'recursive' strategy
#
Git stash
La commande git stash
permet de mettre un commit de côté pour que la branche actuelle redevienne propre, donc sans données dans la zone de stage. Cette situation convient dès lors qu'un commit n'a pas été réalisé et que les modifications sont toujours dans le stage.
Dans les faits, la commande git status
nous retournent qu'il y a plusieurs changements(dans la zone de stage), qui n'ont pas été commités.
Stash nous permet de les mettres de côté, pour pouvoir les insérer dans une autre branche, ce qui peut être pratique lorsque je me suis trompé de branche en faisant mes modifications !
Après avoir éxécuté la commande git stash
si je refais la commande git status
cette dernière nous retourne que le working directory est propre (stage vide).
Maintenant je peux aller dans une vouvelle branche ou une existante avant d'y insérer les changements éffectués:
git branch manouvellebranche
git checkout manouvellebranche
* manouvellebranche
master
git stash apply
Il est possible d'avoir plusieurs stashs. Dans ce cas, la commande git stash list
permet de les lister avec leurs noms réspectifs.
Ainsi je peux appliquer un stash avec son nom: git stash apply stash@{0}
(le nom commençant par stash... et finissant juste avant le :
)
#
Git reset
Git reset permet d'annuler des changements de trois façons différentes: soft
, mixed
et hard
#
Supprimer le dernier commit
Je commence par regarder les logs et donc le dernier commit réalisé ainsi que son identifiant:
ca83a6dff817ec66f443420071545390a954664949 Author: contact
<contact@contactit.fr> Date: Mon Mar 19 21:52:11 2022 -0700
Je prends note de l'identifiant: ca83a6dff817ec66f443420071545390a954664949
si j'ai besoin de l'affecter à une autre branche après l'avoir supprimé.
Maintenant je peux supprimer le dernier commit avec la commande:
git reset --hard HEAD^
Créer ou se positionner dans la branche:
git branch manouvellebranche
git checkout manouvellebranche
git reset --hard ca83a6dff817ec66f443420071545390a954664949
#
L'identification sur Github
Github repose sur l'identification avec SSH, donc une paire de clés.
Pour génrer cette paire de clé, j'utilises 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_ed25519
Your public key has been saved in /home/contact/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:monhash contact@mondomain
The key's randomart image is:
+--[ED25519 256]--+
|%@+. |
|EBCVB. |
|+=Bo. |
|+.o* . |
|oo..o . S S |
|=+oo o |
|B++ o . . |
|+=.. o . |
|o. . . |
+----[SHA256]-----+
ed25519
est le standard actuel recommandé en terme 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.fr
Je peux maintenant la renseigner dans: Settings>SSH and GPG keys
, dans la séction titre je peux mettre un nom quelconque et dans la section key je colle ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAKC91uWop9DhfNh23i6u0yUlhEkGv0IOQKzhU5ltKBkAG contact@contactit.fr
, valider avec Add SSH key
.
#
Résumé de Git/github
Dernière modification le 08/09/2022