Comment utiliser Git Filter-Repo pour supprimer les blobs

Python, Shell

Comprendre la suppression de blob dans Git

Dans Git, la gestion de fichiers volumineux peut s'avérer un défi, surtout lorsqu'ils ne sont plus nécessaires dans la copie de travail. Des outils comme BFG et Git Filter-Repo proposent des solutions pour supprimer ces fichiers volumineux de l'historique de votre référentiel. Cependant, obtenir les mêmes résultats avec Git Filter-Repo qu’avec BFG peut s’avérer délicat.

Cet article explique comment répliquer la commande BFG --strip-blobs-plus grand-que en utilisant Git Filter-Repo. Nous aborderons les problèmes courants et fournirons un guide étape par étape pour vous assurer que vous pouvez nettoyer efficacement votre référentiel sans supprimer accidentellement les fichiers encore utilisés.

Commande Description
from git import Repo Importe la classe Repo de la bibliothèque GitPython pour interagir avec le référentiel Git.
git_filter_repo import RepoFilter Importe la classe RepoFilter depuis git-filter-repo pour filtrer les blobs du référentiel.
repo = Repo(repo_path) Initialise un objet Repo pointant vers le chemin du référentiel spécifié.
RepoFilter(repo).filter_blobs(filter_large_blobs) Applique une fonction de filtre personnalisée pour supprimer les gros blobs du référentiel.
git rev-list --objects --all Répertorie tous les objets du référentiel, y compris les blobs, les arborescences et les validations.
git cat-file --batch-check Fournit des informations détaillées sur les objets, y compris leur taille.
xargs -n 1 git filter-repo --strip-blobs-bigger-than $SIZE_LIMIT Utilise xargs pour appliquer la commande git filter-repo à chaque gros blob identifié.

Comment fonctionnent les scripts fournis

Le script Python utilise la bibliothèque GitPython pour interagir avec le référentiel Git. Le référentiel est initialisé à l'aide de et , pointant vers le chemin du référentiel spécifié. Le script définit ensuite une fonction de filtre pour identifier les blobs de plus de 10 Mo. Ce filtre est appliqué en utilisant RepoFilter(repo).filter_blobs(filter_large_blobs), qui garantit que les blobs dépassant la taille limite sont supprimés de l'historique du référentiel.

Le script shell atteint un objectif similaire en utilisant les commandes Git et les utilitaires shell. Il accède au répertoire du référentiel avec et répertorie tous les objets en utilisant . Chaque objet est vérifié pour sa taille avec . Les objets plus grands que la limite de taille spécifiée sont filtrés et traités à l'aide de xargs postuler à chaque grande goutte identifiée. Cette méthode supprime efficacement les gros blobs du référentiel, garantissant ainsi un historique propre sans fichiers volumineux inutiles.

Utiliser Python pour filtrer les blobs Git par taille

Script Python pour filtrer les gros blobs

# Import necessary modules
import os
from git import Repo
from git_filter_repo import RepoFilter

# Define the repository path and size limit
repo_path = 'path/to/your/repo'
size_limit = 10 * 1024 * 1024  # 10 MB

# Initialize the repository
repo = Repo(repo_path)

# Define a filter function to remove large blobs
def filter_large_blobs(blob):
    return blob.size > size_limit

# Apply the filter to the repository
RepoFilter(repo).filter_blobs(filter_large_blobs)

Utilisation d'un script Shell pour identifier et supprimer les gros blobs Git

Scripts Shell pour la gestion des blobs dans Git

#!/bin/bash

# Define repository path and size limit
REPO_PATH="path/to/your/repo"
SIZE_LIMIT=10485760  # 10 MB

# Navigate to the repository
cd $REPO_PATH

# List blobs larger than the size limit
git rev-list --objects --all |
git cat-file --batch-check='%(objectname) %(objecttype) %(objectsize) %(rest)' |
awk '$3 >= $SIZE_LIMIT {print $1}' |
xargs -n 1 git filter-repo --strip-blobs-bigger-than $SIZE_LIMIT

echo "Large blobs removed from the repository"

Explorer les options avancées de filtre Git-Repo

Alors que est efficace pour supprimer des fichiers volumineux, il existe des options supplémentaires pour personnaliser le nettoyage de votre référentiel. Par exemple, vous pouvez utiliser pour limiter l'opération à des fichiers ou des répertoires spécifiques. Cela vous permet de cibler uniquement certaines zones de votre référentiel pour la suppression des objets blob. Une autre option utile est , qui exclut les chemins spécifiés de l'opération, offrant ainsi plus de contrôle sur les fichiers qui restent intacts.

De plus, vous pouvez combiner avec pour prévisualiser les modifications avant de les appliquer. Cela permet d'éviter les suppressions involontaires en fournissant un rapport détaillé de ce qui sera supprimé. L'utilisation de ces options avancées peut améliorer la flexibilité et la précision des tâches de maintenance de votre référentiel, garantissant ainsi un historique de projet plus propre et plus efficace.

  1. Qu'est-ce que faire?
  2. Il supprime les blobs plus grands que la taille spécifiée de l’historique du référentiel.
  3. Comment travail?
  4. Il exclut les chemins spécifiés du traitement par le filtre.
  5. Puis-je prévisualiser les modifications avant de les appliquer ?
  6. Oui, en utilisant fournit un rapport détaillé des modifications.
  7. Comment cibler des fichiers ou des répertoires spécifiques ?
  8. Utilisez le option pour limiter les opérations à des chemins spécifiques.
  9. Quel est le but du classe en Python ?
  10. Il permet l'application de filtres personnalisés au référentiel.
  11. Existe-t-il un moyen d'annuler les modifications apportées par ?
  12. Une fois les modifications appliquées, elles ne peuvent pas être facilement annulées. Sauvegardez toujours votre référentiel en premier.
  13. Qu'est-ce que faire?
  14. Il répertorie tous les objets du référentiel, y compris les blobs, les arborescences et les validations.
  15. Pourquoi utiliser avec ?
  16. permet d'appliquer des commandes à une liste d'éléments, tels que les gros blobs identifiés pour la suppression.

La gestion efficace des fichiers volumineux dans un référentiel Git est essentielle pour optimiser les performances et le stockage. L'utilisation d'outils tels que BFG et Git Filter-Repo permet de rationaliser ce processus, bien que chacun ait des commandes et des méthodes uniques. En utilisant des options avancées et en comprenant les nuances de chaque outil, vous pouvez vous assurer que votre référentiel reste propre et efficace. N'oubliez pas de sauvegarder votre référentiel avant d'apporter des modifications importantes pour éviter la perte de données. Combiner la connaissance de ces outils avec la planification stratégique améliorera considérablement vos pratiques de contrôle de versions.