Potion Bottle Icon Manuel d'alchimie du code Potion Bottle Icon

Sauvegarder un projet git dans une archive sans inclure les fichiers ignorés

- 684 mots - Temps de lecture estimé: 4 minutes

🌘 Contexte

Les dépôts Git sont souvent sauvegardés en bloc, mais le fichier .gitignore liste des artefacts à exclure : caches, secrets, builds, dépendances volatiles. Si ces fichiers sont ajoutés à l’archive, elle contient des données temporaires et des informations locales qui n’appartiennent pas au code source.

Le fichier .gitignore indique à Git quels fichiers ne doivent pas être suivis. En pratique, cela signifie que certains fichiers présents sur disque ne sont pas inclus dans l’index Git. Les scripts ci-dessous créent une archive à partir des chemins suivis par Git sans y inclure ces fichiers ignorés.

🌘 Méthode 1 – Utiliser git ls‑files

Le script suivant crée une archive à partir des fichiers suivis par Git, en excluant automatiquement les fichiers ignorés.

#!/bin/bash
# Répertoire du dépôt (par défaut le répertoire courant)
REPO_DIR="$(pwd)"
cd "$REPO_DIR"

# Nom d’archive unique basé sur la date et l’heure
ZIP_NAME="repo_backup_$(date +"%Y%m%d_%H%M%S").zip"

# Liste les fichiers suivis, exclut automatiquement les chemins ignorés,
# puis les zippe dans l’archive
git ls-files -z | xargs -0 -I {} zip -r "$ZIP_NAME" "{}"

echo "Le dépôt a été archivé : $ZIP_NAME"

Ce script se base sur le comportement de git ls-files : il renvoie la liste des fichiers suivis par l’index Git, donc des fichiers qui n’ont pas été exclus par .gitignore. Le pipeline xargs -0 lit les chemins séparés par des octets nuls et transmet chaque chemin à zip en conservant les espaces et les caractères spéciaux.


Sun Face IconComment générer une archive zip d’un dépôt Git en excluant les fichiers listés dans .gitignore ?Sun Face Icon


La commande git ls-files liste uniquement les fichiers suivis par Git, puis les transmet à zip via xargs pour créer l’archive. Le fichier .gitignore est ainsi respecté automatiquement.

🌘 Variante – Inclure les fichiers non suivis tout en respectant .gitignore

Cette version prend tous les fichiers du dépôt, puis enlève ceux qui correspondent aux règles du .gitignore. Les fichiers non suivis qui ne sont pas ignorés restent dans l’archive.

#!/bin/bash
REPO_DIR="$(pwd)"
cd "$REPO_DIR"
ZIP_NAME="full_repo_backup_$(date +"%Y%m%d_%H%M%S").zip"

# Recherche tous les fichiers du répertoire, exclut les chemins correspondant
# aux patterns du .gitignore grâce à `git check-ignore`
find "$REPO_DIR" -type f -print0 |
  xargs -0 -I {} bash -c 'git check-ignore -q -- "$1" || echo "$1"' _ {} |
  zip -@ "$ZIP_NAME"

echo "Archive complète créée : $ZIP_NAME"

git check-ignore filtre les chemins à ignorer, les excluant du flux vers zip. Les fichiers non suivis qui ne sont pas explicitement bannis restent dans l’archive.


Sun Face IconPourquoi git check-ignore est‑il préférable à un simple find ?Sun Face Icon


La commande git check-ignore applique exactement les règles du .gitignore, y compris les exceptions et les patterns globaux, alors que find ne connaît que la structure du système de fichiers.

🌘 Adaptation Windows – PowerShell

Voici l’équivalent PowerShell pour Windows, qui utilise le même principe de filtrage Git.

$zipName = "repo_backup_$(Get-Date -Format 'yyyyMMdd_HHmmss').zip"

# Récupère tous les fichiers du répertoire, exclut ceux que Git ignore
Get-ChildItem -Recurse -File |
  Where-Object { -not (git check-ignore $_.FullName) } |
  Compress-Archive -DestinationPath $zipName -Force

Write-Host "Archive PowerShell créée : $zipName"

PowerShell n’a pas de commande équivalente à xargs -0. Ici, Get-ChildItem -Recurse -File énumère les fichiers, Where-Object filtre les chemins ignorés avec git check-ignore, et Compress-Archive compresse les fichiers restants en utilisant les chemins complets. Cette chaîne maintient les chemins tels qu’ils sont reportés par FullName, ce qui préserve les espaces et les caractères spéciaux.


Sun Face IconEst‑ce que Compress-Archive de PowerShell supporte la compression maximale ?Sun Face Icon


Non, il utilise le niveau de compression par défaut de Windows. Pour un taux supérieur, il faut recourir à 7z ou à zip via WSL.

🌘 Validation et limites

  1. Vérifier l’intégrité : unzip -t "$ZIP_NAME" confirme que chaque entrée est lisible.
  2. Exclure les sous‑modules : git submodule foreach --recursive 'git ls-files -z' doit être intégré si le dépôt en possède.
  3. Gestion des espaces : les pipelines -z et -print0 assurent la préservation des espaces, évitant les corruptions de l’archive.

Ces commandes produisent une archive propre, sans fichiers ignorés, prête à être stockée hors ligne ou déplacée vers un autre environnement.


Sun Face IconComment tester qu’une archive ne contient aucun fichier ignoré ?Sun Face Icon


Décompressez l’archive dans un répertoire temporaire puis exécutez la commande git check-ignore en mode verbeux sur tous les fichiers. L’absence de sortie indique qu’aucun fichier ignoré n’est présent.


Sun Face IconPourquoi valider l’intégrité d’une archive est‑il crucial avant de la déployer dans un environnement d’inférence LLM ?Sun Face Icon


Une archive corrompue peut interrompre le chargement du modèle ou empêcher l’extraction des fichiers nécessaires à l’inférence. La validation avec l’option de test de unzip vérifie la lecture de chaque entrée avant le déploiement.

Abonne-toi au fil RSS pour ne rien manquer.

Étiquettes