Gérard Rozsavolgyi
roza@univ-orleans.fr
Sept. 2022
Plan:
Conserver l’historique des modifications apportées chaque jour… et revenir en arrière en cas de besoin
Partager le développement entre plusieurs personnes : - permettre un accès partagé au système de fichiers versionné - permettre un accès distant depuis diverses plateformes - retrouver rapidement l’origine d’un Bug en cas de régression
Gérer la distribution du logiciel
↪ plusieurs versions peuvent coexister (branches de développement, branches beta, branches production)
Utiliser de l’intégration continue (Gitlab, Github, Jenkins, etc.)
↪ introduire des vérifications, tests, production d’artefacts lors d’une mise à jour d’un dépôt.
↪ Ajoute une nouvelle dimension au système de fichiers: le temps
git : le logiciel
Github, Gitlab, Sourcetree, etc. : Services/hébergeurs utilisant git
Création d’un dépôt (repository) vide :
Un dossier .git est créé
Pour voir son contenu :
Un dépôt apparaît de l’extérieur comme un système de fichiers composé de répertoires au sein desquels on peut naviguer, lire et écrire selon les permissions dont on dispose.
Informe git de l’identité du “commiteur”
alan> git config --global user.name "Alan Turing "
alan> git config --global user.email "alan@univ-orleans.fr"
alan> git config --global core.editor emacs # Par défaut nano ou vim
alan> git config --global core.editor "code --wait" # Pour utiliser correctement vscode
alan> git config -l
Choix de –global ou –local, de l’éditeur, etc.
Statut du dépôt git par rapport au système de fichiers, dépôt distant, etc. À utiliser très souvent !
Permet de vérifier :
Your branch is ahead of 'origin/master' by 3 commits.
Différences détaillées :
Avec option --stat
, juste le nombre de lignes changées
par fichier.
Possible directement en ligne de commande interactive ou par un mergetool (cf merge) ou avec un IDE
Pour ajouter un fichier spécifique :
Pour ajouter tout le contenu du répertoire courant :
Fichier dans l’ index (staged) mais pas encore commité
Désindexer :
Annuler les modifications :
Effacer :
(ou rm fichier
puis git add fichier
)
*.o
__pycache__
*.class
*~
En principe : - Opération atomique, le projet fonctionne avant et
après - Pas trop gros ni trop petit - Contribution unique : ↪ Pas 3 corrections de bugs et 2 nouvelles
fonctionnalités dans le même commit !! ↪ Permet de trouver un bug par recherche
dichotomique (git bisect
) - Représente la majeure partie de
git (utilisation sous-jacente dans les stashes et autres)
ou si on veut ajouter en même temps les modifications portant sur des fichiers existants :
Liste des commits détaillée jusqu’à HEAD
par défaut
(pointeur vers le commit actuel)
--oneline
n
derniers avec -n
git log master branch1
)^
: un commit en arrière en unaire
(^^^
: 3 commits en arrière)~n
: n commits en arrière (ex
HEAD~3
)git diff
pour afficher les différencesgit status
,
git log
, etc.Pour séparer le développement : - Nouvelle fonctionnalité - Correction de bugs, etc.
Une branche peut : - Être à nouveau fusionnée (merged) dans
le master
- Disparaître - Donner lieu à un nouveau
programme, un fork ⑂
en une ligne :
Crée une branche et bascule HEAD vers celle-ci
git merge --abort
Pour éviter de retaper les identifiants/MdP :
Créer la clef :
id_{algorithme}
.ssh
,
e.g. id_ed25519
/id_ed25519.pub
Copier le contenu de la clef publique
(id_{algo}.pub
)
Sur github : Settings -> SSH and GPG keys -> New SSH key
Coller le contenu dans le champ Key
puis
confirmer
Sur gitlab : Preferences (en cliquant sur la photo de profil en haut à droite) -> SSH keys à gauche -> …
Garder la clef en mémoire dans le terminal :
Besoin d’entrer la phrase de passe 1 seule fois
Ou, à partir d’un dépôt distant préexistant :
Ajoute par défaut le remote (+branche en upstream)
Si vous voulez travailler avec Alice:
Lister vos remotes:
fetch
et merge
de la branche distante # -u :set upstream, met à jour les arguments par défaut (branche et dépôt distant)
git push [-u] origin master
et quand vous aurez du nouveau contenu à mettre à jour :
Permet de déplacer le curseur HEAD sur le commit donné,
plusieurs options : - --soft
, aucune modification sur le
système de fichier, index conservé (état avant commit -m
) ;
- --mixed
(défaut), idem mais index non conservé (aucun
git add
fait) ; - --hard
, revient au commit en
modifiant aussi les fichiers.
Si utilisé avec un hash de commit (ou branche ou autre), détache HEAD pour se placer sur le commit.
Possibilité de revenir avec git switch -
(sans
argument)
Historique de HEAD, pour revenir à un commit si problème
avec reset
, HEAD@{n}
désignant la n-ième
position de HEAD avant l’actuelle.
git reset HEAD@{1}
pour revenir à la position
précédente.
Modifier le dernier commit avec git commit --amend
(après avoir fait les modifications avec git add
etc.).
Le commit sera forcément différent : changement de date -> changement de hash
À ne pas faire si le commit a déjà été envoyé sur le dépôt distant.
Alternative au merge : on réécrit une branche par rapport à celle sur laquelle on se cale
Rebaser la branche feature sur main (branche feature active) :
Rebase normal : applique bêtement les commits de main avant les commits de feature
Avec -i : interactif, demande une action pour chaque commit
En informatique, un test est une procédure de vérification partielle d'un système
Il y a une grande diversité de tests, concentrons nous sur les 3 principales catégories
Tous les langages ont leur librairie de tests unitaires
2021 Gérard Rozsavolgyi & Florian Groult roza @ univ-orleans.fr / florian.groult @ univ-orleans.fr