{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 !