R avancé et introduction à Git

Raphaël Nedellec

Introduction à Git et à Github

Rappels

  • Rappels des notions importantes en R
  • Conseils de bonnes pratiques
  • Fonctions, Packages
  • Reproductibilité : quarto, renv

Et maintenant, Git et Github !

Motivation

Où même ça

# study.R
data |>
  transform() |>
  normalize() |>
  model() |>
  plot()

# Ancienne version --
# data |>
#   transform() |>
#   normalize() |>
#   plot()

data |>
  summarize()

Contrôle de version

Git est un outil de contrôle de version.

  • Git permet de tracer l’historique des fichiers d’un projet en le représentant sous forme de graphe
  • Modèle distribué
  • Léger et performant
  • Facilité pour créer des branches
  • Libre et disponible sous toutes les plateformes

Contrôle de version

Collaboration

Fonctionnement de Git

Git is hard

Utilisation de Git

  • en ligne de commande : terminal unix, mac, wsl2 sous windows > 10, mingw, …
  • avec des outils graphiques ou dans des IDE/environnements de développement : RStudio, VSCode, gitkraken, et de multiples autres…

Dans la suite

Nous nous concentrerons sur les lignes de commande et l’interface graphique RStudio

Installation de Git

https://git-scm.com/book/en/v2/Getting-Started-Installing-Git

git config

# Voir les options de configuration
git config user.name
git config user.email

git config

# Paramètrer son nom et son email.
git config user.name "<votre user name>"
git config user.email "<votre email>"

git init

# Initialiser un projet git dans un dossier
git init

git status

git status

git add

Pour ajouter des changements en vue de la prochaine validation (prochain commit).

# on ajoute le fichier renv.lock
git add renv.lock
git status

git commit

Un “commit” - une validation, représente une image de votre projet à un instant donné. C’est un état qui va être enregistré dans l’historique et qui sera donc atteignable dans le futur.

git commit -m "mon premier commit"
# -m pour spécifier un message informatif associé au commit

git commit

Après le commit

Après le commit

git push

La commande git push est utilisée pour uploader des données locales vers un répertoire distant, par exemple, un projet partagé sur github.

git push origin main
# origin : nom du serveur distant
# main : branche

Pour pousser sur le dépôt distant origin le contenu de la branche main

Avant de push

Il faut définir un remote(dépôt distant), par exemple un dépôt github :

# origin est le nom par convention du dépôt distant principal
git remote add origin git@github.com:<username>/<projectname>.git

  1. git add pour lister les fichiers à commit
  2. git commit pour sauvegarder un état donné
  3. git push pour synchroniser ces changements avec un dépôt distant

git pull

La commande git pull est utilisée pour mettre à jour des données locales depuis un répertoire distant, par exemple, un projet partagé sur github.

git pull origin main
# origin : nom du serveur distant, main : branche

On merge la branche main du dépôt origine avec notre branche courante de travail.

git pull

Un git pull est équivalent à un git fetch + git merge. L’option un est jugée moins sûre que l’option 2 mais plus simple pour démarrer sur des projets avec des workflow simples.

git branch, git switch, git checkout

La commande git branch sert à créer des branches en parallèle de la branche principale main ou master. Utile lorsque l’on collabore à plusieurs, pour créer des branches de fonctionnalités (feature branch), dans de nombreux workflow..

Voir ici pour une présentation de workflows possibles.

La commande git switch permet de changer de branche. La commande git checkout permet entre autres de changer de branche.

git branch feature-1
git switch branch feature-1
git checkout main

git merge, git rebase

Lorsque l’on souhaite fusionner deux branches, on peut réaliser deux types d’opérations :

  • git merge
  • git rebase

Ces deux opérations diffèrent par la manière de fusionner les historiques (merge préserve l’historique complet, quand rebase réécrit l’historique).

.gitignore

Il est possible d’écrire un fichier .gitignore pour ne pas traquer certains fichiers:

  • fichiers volumineux
  • fichiers générés à la volée qui ne doivent pas être sauvegardés (.pdf quand les sources sont dispos)
  • fichiers sensibles

Secrets

Il est facile de glisser des ‘secrets’ dans ses scripts et que ceux-ci se retrouvent dans un historique git : mots de passe, token, informations sensibles. Attention aux fichiers que vous enregistrez dans vos commits (comme le .Rhistory). Soyez vigilants.

En résumé

  • Utile pour créer de (nombreux) points de sauvegarde de vos projets
  • Indispensable à la collaboration
  • Outil de référence en développement logiciel
  • 95% de vos usages sont couverts par les instructions add, commit, push et pull.
  • Outil extrêmement versatile et complexe (impossible ?) à maitriser dans sa totalité : c’est normal !
  • Outil indispensable pour le data scientist

Documentation

Github et cie

Plateforme de collaboration

Github

  • Compte personnel gratuit
  • Possibilité de créer des projets publics et privés
  • Possibilité d’automatiser des tâches avec des Github Actions
  • Possibilité d’héberger des sites webs statiques (blog, sites perso, documentation) depuis Github Pages

Visite de github

Github Actions

Les github actions sont des outils de CI/CD (continuous integration / continuous delivery) qui permettent l’automatisation de certaines tâches en réponse à un évenement (un push, un commit, sur une branche, …).

Github Pages

Github permet l’hébergement de sites web statiques par le biais des Github Pages. Ceci rend possible une intégration forte entre votre code et le déploiement d’un site. C’est très pratique pour héberger la documentation d’un package, un site personnel, ou tout site statique.

En résumé

  • Git est un outil complexe mais indispensable au data scientist
  • Une maîtrise premiers concepts simples suffira amplement à couvrir la majorité de vos besoins
  • Github est la plateforme leader, des alternatives existent
  • Utile pour se créer un portfolio, collaborer avec des camarades, persister du code de manière fiable
  • Github doit aussi être une source d’inspiration et d’information pour vous !