Objectif : Comprendre Git, GitHub et GitLab, savoir versionner ses scripts, notebooks et configurations.
Prérequis
Niveau
Compétence
✅ Requis
Avoir suivi le module 02_bash_for_data_engineers
✅ Requis
Savoir utiliser un terminal
✅ Requis
Avoir un compte GitHub (gratuit) — voir section ci-dessous
Objectifs du module
À la fin de ce module, tu seras capable de :
Comprendre les concepts de versioning
Initialiser et configurer un dépôt Git
Maîtriser le workflow : add → commit → push
Travailler avec les branches
Collaborer efficacement avec une équipe
Utiliser .gitignore pour protéger les données sensibles
Pourquoi Git est essentiel pour un Data Engineer ?
Cas d’usage
Exemple concret
Versionner les pipelines
Suivre l’évolution de tes scripts ETL
Collaborer en équipe
Travailler à plusieurs sur le même projet data
Revenir en arrière
Restaurer une version qui fonctionnait après un bug
Code review
Valider les modifications avant mise en production
CI/CD
Déclencher automatiquement des tests et déploiements
Documentation
Historique complet de qui a fait quoi et pourquoi
💡 En bref : Git est le système nerveux de tout projet data moderne. Sans Git, pas de collaboration efficace ni de traçabilité.
1️⃣ Définitions : Git, GitHub et GitLab
Qu’est-ce que Git ?
Git est un logiciel de gestion de versions distribué. Il permet de :
Suivre l’évolution de vos fichiers au fil du temps
Créer des points de restauration (commits)
Travailler en parallèle sur différentes fonctionnalités (branches)
Fusionner le travail de plusieurs personnes
📁 Ton projet
│
├── pipeline.py ← Versionné par Git
├── config.yaml ← Versionné par Git
├── .git/ ← Dossier caché contenant l'historique
└── data/ ← À NE PAS versionner !
Qu’est-ce que GitHub ?
GitHub est une plateforme cloud (propriété de Microsoft) qui héberge vos dépôts Git.
Interface web moderne
Très populaire pour l’open source
GitHub Actions pour la CI/CD
Qu’est-ce que GitLab ?
GitLab est une alternative open source à GitHub :
Peut être auto-hébergé (on-premise)
CI/CD intégré très puissant
Souvent utilisé en entreprise
2️⃣ GitHub vs GitLab — Comparatif
Fonctionnalité
GitHub
GitLab
Hébergement
Cloud (Microsoft)
Cloud ou auto-hébergé
CI/CD
GitHub Actions
GitLab CI/CD (intégré)
Communauté
Très vaste (open source)
Orienté entreprise
Interface
Moderne, simple
Complète, personnalisable
Prix
Gratuit + plans payants
Gratuit + plans payants
Sécurité
Dépend du plan
Peut être auto-hébergé
Usage recommandé
Projets publics, open source
Projets internes, entreprise
💡 Pour ce cours, tu peux utiliser l’un ou l’autre. Les commandes Git sont identiques !
Dans le menu gauche, descends jusqu’à Developer settings
Clique sur Personal access tokens → Tokens (classic)
Clique sur Generate new token → Generate new token (classic)
Configure le token :
Note : git-access (ou un nom descriptif)
Expiration : 90 days (ou plus)
Scopes : cocher repo (accès complet aux dépôts)
Clique sur Generate token
COPIE LE TOKEN MAINTENANT — tu ne pourras plus le voir après !
Utiliser le token :
# Quand Git demande ton mot de passe, colle le TOKEN (pas ton mot de passe !)git push origin mainUsername: ton-usernamePassword: ghp_xxxxxxxxxxxxxxxxxxxx # ← Coller le token ici
Sauvegarder le token (optionnel) :
# Mémoriser les credentials pour 1 heuregit config --global credential.helper cache# Ou mémoriser indéfiniment (moins sécurisé)git config --global credential.helper store
Option B : Clé SSH (recommandé pour usage régulier)
1. Générer une clé SSH :
# Générer une paire de clés (appuie sur Entrée pour les valeurs par défaut)ssh-keygen-t ed25519 -C"ton.email@exemple.com"# Démarrer l'agent SSHeval"$(ssh-agent-s)"# Ajouter la clé à l'agentssh-add ~/.ssh/id_ed25519
2. Ajouter la clé à GitHub :
# Copier la clé publiquecat ~/.ssh/id_ed25519.pub# Copie le résultat (commence par ssh-ed25519...)
Sur GitHub : Settings → SSH and GPG keys → New SSH key
# Cloner avec SSH (au lieu de HTTPS)git clone git@github.com:username/repo.git# Ou changer un dépôt existant vers SSHgit remote set-url origin git@github.com:username/repo.git
Clique sur “+” (en haut à droite) → New repository
Configure le dépôt :
Repository name : mon-projet-data
Description : “Mon premier projet Data Engineering”
Visibility : Public ou Private
❌ Ne PAS cocher “Add a README file” (on le fera localement)
Clique sur Create repository
GitHub affiche les commandes à exécuter — copie-les !
Lier ton projet local au dépôt GitHub :
# Si tu as déjà un projet local avec des commitscd mon_projet_datagit remote add origin https://github.com/ton-username/mon-projet-data.gitgit branch -M maingit push -u origin main
# Ou cloner un dépôt existantgit clone https://github.com/ton-username/mon-projet-data.gitcd mon-projet-data
Récapitulatif : Workflow complet
1. Créer compte GitHub ────► github.com/signup
│
2. Configurer auth ────────► Token (HTTPS) ou SSH
│
3. Créer dépôt sur GitHub ─► github.com → New repository
│
4. Lier projet local ──────► git remote add origin ...
│
5. Pousser le code ────────► git push -u origin main
│
✅ Code sur GitHub !
Tu n’es pas obligé d’utiliser le terminal ! Il existe des interfaces graphiques (GUI) pour Git qui facilitent la visualisation et certaines opérations.
💡 Conseil : Apprends d’abord les commandes pour comprendre Git, puis utilise un client GUI pour gagner en productivité au quotidien.
5️⃣ Utilisation de Git pas à pas
Étape 1 : Créer un projet et initialiser Git
Voir le code
%%bash# Créer un dossier de projetmkdir mon_projet_datacd mon_projet_data# Initialiser Git (crée le dossier .git)git init# Vérifier le statutgit status
Étape 2 : Ajouter des fichiers et commiter
Voir le code
%%bashcd mon_projet_data# Créer un fichier Pythonecho"print('Hello Data Engineering!')"> main.py# Voir le statut (fichier untracked)git status# Ajouter le fichier à la staging areagit add main.py# Voir le statut (fichier staged)git status# Commiter avec un message descriptifgit commit -m"feat: ajouter script principal"# Voir l'historiquegit log --oneline
Conventions de commits (Conventional Commits)
Utilise des préfixes standardisés pour des messages clairs :
Préfixe
Usage
Exemple
feat:
Nouvelle fonctionnalité
feat: ajouter extraction API
fix:
Correction de bug
fix: corriger parsing dates
docs:
Documentation
docs: mettre à jour README
refactor:
Refactoring (sans changer le comportement)
refactor: simplifier fonction ETL
test:
Ajout/modification de tests
test: ajouter tests unitaires
chore:
Maintenance, config
chore: mettre à jour dépendances
Exemple de bon message :
feat: ajouter pipeline d'extraction des données clients
- Connexion à l'API CRM
- Transformation des données JSON
- Export en format Parquet
6️⃣ Le fichier .gitignore — ESSENTIEL pour Data Engineers
Le .gitignore indique à Git quels fichiers NE PAS versionner.
⚠️ Ne JAMAIS versionner :
Fichiers de données (CSV, Parquet, JSON volumineux)
Secrets et credentials (mots de passe, clés API)
Dépendances (node_modules, venv)
Fichiers temporaires (cache, logs)
Voir le code
%%bashcd mon_projet_data# Créer un .gitignore pour projet Data Engineeringcat<< 'EOF'> .gitignore# ==== DONNÉES ====*.csv*.parquet*.json*.xlsxdata/raw/processed/# ==== SECRETS ====.env*.pem*.keycredentials.jsonsecrets.yaml# ==== PYTHON ====__pycache__/*.py[cod]venv/.venv/*.egg-info/.pytest_cache/# ==== JUPYTER ====.ipynb_checkpoints/*.ipynb_checkpoints# ==== IDE ====.idea/.vscode/*.swp# ==== LOGS ====*.loglogs/# ==== OS ====.DS_StoreThumbs.dbEOFecho"✅ .gitignore créé"cat .gitignore
💡 Astuces .gitignore
# Ignorer un dossierdata/# Ignorer tous les .csv sauf un*.csv!schema.csv# Ignorer les fichiers dans tous les sous-dossiers**/*.log# Vérifier ce qui est ignorégit status --ignored
Ne coche PAS “Initialize with README” (on a déjà un repo local)
Copie l’URL HTTPS
Étape 2 : Connecter le dépôt local
Voir le code
%%bashcd mon_projet_data# Ajouter le dépôt distant (remplace par ton URL)git remote add origin https://github.com/ton-username/mon_projet_data.git# Vérifier les remotesgit remote -v# S'assurer d'être sur la branche maingit branch -M main# Pousser le code (première fois : -u pour lier la branche)git push -u origin main
Cloner un projet existant
# Cloner un dépôtgit clone https://github.com/username/projet.git# Cloner dans un dossier spécifiquegit clone https://github.com/username/projet.git mon_dossier
Synchroniser avec le distant
# Récupérer les modifications (fetch + merge)git pull# Voir les modifications distantes sans les appliquergit fetchgit log origin/main --oneline
8️⃣ Travailler avec les branches
Les branches permettent de travailler sur des fonctionnalités en parallèle sans affecter le code principal.
main ●───●───●───────────●───● (code stable)
│ ↑
feature/etl └───●───●───●───┘ (nouvelle fonctionnalité)
Voir le code
%%bashcd mon_projet_data# Voir les branches existantesgit branch# Créer une nouvelle branchegit branch feature/add-etl# Basculer sur la branchegit switch feature/add-etl# OU créer + basculer en une commandegit switch -c feature/add-validation# Faire des modificationsecho"def validate(df): pass"> validation.pygit add validation.pygit commit -m"feat: ajouter module de validation"# Revenir sur maingit switch main# Fusionner la branchegit merge feature/add-validation# Supprimer la branche fusionnéegit branch -d feature/add-validation
Workflow de branches recommandé pour Data Engineers
Supprimer les marqueurs (<<<<<<<, =======, >>>>>>>)
Tester que le code fonctionne
Commiter la résolution
# Après avoir édité le fichiergit add fichier_resolu.pygit commit -m"fix: résoudre conflit sur process_data"
💡 Astuce : Utilise un outil visuel comme VS Code pour résoudre les conflits plus facilement.
🔧 Commandes utiles avancées
git stash — Mettre de côté temporairement
# Sauvegarder les modifications en coursgit stash# Voir les stashgit stash list# Récupérer le dernier stashgit stash pop# Récupérer un stash spécifiquegit stash apply stash@{0}
Annuler des changements
# Annuler les modifications d'un fichier (non commité)git checkout -- fichier.py# Retirer un fichier de la staging areagit reset HEAD fichier.py# Annuler le dernier commit (garde les fichiers)git reset --soft HEAD~1# Annuler le dernier commit (supprime les fichiers)git reset --hard HEAD~1 # ⚠️ DANGEREUX# Créer un commit qui annule un commit précédentgit revert <commit-hash>
Inspecter l’historique
# Historique compactgit log --oneline# Historique graphiquegit log --oneline--graph--all# Voir les modifications d'un commitgit show <commit-hash># Voir qui a modifié chaque lignegit blame fichier.py# Chercher un commit par messagegit log --grep="ETL"
Comment résoudre ?
<<<<<<<,=======,>>>>>>>)