{saperlipopette}, un paquet R
pour progresser en Git
en toute sérénité
Maëlle Salmon (rOpenSci, cynkra)
De script-vraiment-final-2024-05-27.R à un vrai historique.
Pas du R mais très utile, voire indispensable, pour écrire du code.
Jour 1 : script.R
Jour 2 : crée le modèle statistique, script2.R
…
Jour 42 : rajoute les graphiques, script-final-2024-06-03.R (40ème copie du fichier 🤪)
Je veux essayer ggplot2.
Moins de perte de travail ;
Historique à consulter ;
Essais dans des branches.
Créer des instantanés avec git commit.
Travailler sur une plateforme comme GitHub.
Créer des branches pour expérimenter.
Mais pourquoi ?!
“Sauve un tas de fichiers avant le dej 🍝”
145 fichiers modifiés avec 2 624 additions et 2 209 suppressions.
“fix: adapter le code à l’indexation à partir de 0”
2 fichiers modifiés avec 3 additions et 2 suppressions.
Oh non, cette idée d’il y a 7 instantanés est mauvaise. Est-ce que…
j’enlève les changements à la main ;
j’utilise Git revert sur l’instantané pas terrible ?
Ne marche que si les instantanés sont petits.
“Sauve un tas de fichiers avant le sport 💪”
145 fichiers modifiés avec 2 624 additions et 2 209 suppressions.
“refactor: commence à utiliser du YAML”
2 fichiers modifiés avec 3 additions et 2 suppressions.
Git est utile dès le début mais encore mieux…
Bien créer son historique ;
Bien l’utiliser.
Lecture de “Git in practice” de Mike McQuaid
Comment partager ma joie de mieux connaître Git ?
“Oh shit Git” de Katie Sylor-Miller : documentation de solutions simples à de vrais soucis.
reprex : une manière de reproduire une situation.
Créer des exercices Git reproductibles facilement !
Un nom inspiré de “Oh shit, Git”, en plus mignon 😉
12 exercices Git inspirés de “Oh shit, Git” et de mon expérience personnelle. ✨
Pas pour les grand·e·s débutant·e·s.
saperlipopette::exo_latest_message()
En ouvrant R, dans path
saperlipopette::exo_latest_message()
# A tibble: 2 × 6
commit author time files merge message
* <chr> <chr> <dttm> <int> <lgl> <chr>
1 d3d35a17a880eee777868a5fbe99ce… Jane … 2023-12-15 16:25:00 1 FALSE "add a…
2 e227ecc55e421f70b6e30602e6a2ee… Jane … 2023-12-15 16:25:00 2 FALSE "First…
[1] "add a new documennnt\n" "First commit\n"
tip(), dans path
Résolution avec les outils de notre choix (Git en ligne de commande, clic-bouton dans RStudio IDE, etc.)
Travail futur : proposer une correction.
mettre un changement sur la bonne branche (git cherry-pick + git reset),
réécrire l’historique d’une branche (git rebase -i),
séparer un tas de changements en plusieurs instantanés (git add --patch),
…
Enlever les fichiers et dossiers non suivis (git clean),
Chercher l’instantané qui a introduit un bug (git bisect),
Enlever un certain changement (git revert).
Des exercices réalistes avec nos outils habituels …
Dans un dossier temporaire où on ne peut rien casser d’important !
Avec des conseils en plus accessibles via tip()
S’entraîner tout·e seul·e ;
Faire une démo à des apprenant·e·s avant qu’il·elle·s ne refassent l’exercice sur leurs machines.
Création de fichiers et d’historique Git. {fs}, {gert}
Copie d’un fichier en tant que .Rprofile, listé dans .gitignore. Ce fichier a les messages d’entrée et la fonction tip() !
Saperlipopette, entraînez-vous à Git !