Jak používat Git Filter-Repo k odstranění blobů

Python, Shell

Porozumění BLOB Stripping v Gitu

V Gitu může být správa velkých souborů problém, zvláště když už nejsou potřeba v pracovní kopii. Nástroje jako BFG a Git Filter-Repo nabízejí řešení pro odstranění těchto velkých souborů z historie vašeho úložiště. Dosažení stejných výsledků s Git Filter-Repo jako s BFG však může být složité.

Tento článek popisuje, jak replikovat příkaz BFG --strip-blobs-bigger- than pomocí Git Filter-Repo. Budeme se zabývat běžnými problémy a poskytneme vám podrobného průvodce, který zajistí, že budete moci efektivně vyčistit úložiště, aniž byste omylem odstranili soubory, které se stále používají.

Příkaz Popis
from git import Repo Importuje třídu Repo knihovny GitPython pro interakci s úložištěm Git.
git_filter_repo import RepoFilter Importuje třídu RepoFilter z git-filter-repo pro filtrování objektů blob úložiště.
repo = Repo(repo_path) Inicializuje objekt Repo ukazující na zadanou cestu k úložišti.
RepoFilter(repo).filter_blobs(filter_large_blobs) Použije funkci vlastního filtru k odstranění velkých objektů blob z úložiště.
git rev-list --objects --all Vypisuje všechny objekty v úložišti včetně objektů BLOB, stromů a potvrzení.
git cat-file --batch-check Poskytuje podrobné informace o objektech, včetně jejich velikosti.
xargs -n 1 git filter-repo --strip-blobs-bigger-than $SIZE_LIMIT Používá xargs k použití příkazu git filter-repo na každý identifikovaný velký objekt blob.

Jak fungují poskytnuté skripty

Skript Python využívá knihovnu GitPython k interakci s úložištěm Git. Úložiště se inicializuje pomocí a , ukazující na zadanou cestu k úložišti. Skript pak definuje funkci filtru k identifikaci blobů větších než 10 MB. Tento filtr se aplikuje pomocí RepoFilter(repo).filter_blobs(filter_large_blobs), který zajišťuje, že bloby překračující limit velikosti budou odstraněny z historie úložiště.

Skript shellu dosahuje podobného cíle pomocí příkazů Git a obslužných programů shellu. Přejde do adresáře úložiště pomocí a vypíše všechny objekty, které používají . Každý objekt je kontrolován na svou velikost pomocí . Objekty větší než zadaný limit velikosti jsou filtrovány a zpracovávány pomocí xargs uplatnit ke každému identifikovanému velkému blobu. Tato metoda efektivně odstraňuje velké bloby z úložiště a zajišťuje čistou historii bez zbytečných velkých souborů.

Použití Pythonu k filtrování objektů BLOB Git podle velikosti

Python skript pro filtrování velkých objektů blob

# 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)

Použití skriptu Shell k identifikaci a odstranění velkých objektů Git Blobs

Skriptování prostředí pro správu objektů blob v Gitu

#!/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"

Prozkoumání pokročilých možností Git Filter-Repo

Zatímco je efektivní pro odstraňování velkých souborů, existují další možnosti pro přizpůsobení čištění úložiště. Můžete například použít k omezení operace na konkrétní soubory nebo adresáře. To vám umožňuje zacílit pouze na určité oblasti vašeho úložiště pro odstranění objektů blob. Další užitečnou možností je , který vylučuje zadané cesty z operace a nabízí větší kontrolu nad tím, které soubory zůstanou nedotčeny.

Navíc můžete kombinovat s pro náhled změn před jejich použitím. To pomáhá vyhnout se neúmyslnému smazání tím, že poskytuje podrobnou zprávu o tom, co bude odstraněno. Využití těchto pokročilých možností může zvýšit flexibilitu a přesnost úkolů údržby vašeho úložiště a zajistit čistší a efektivnější historii projektu.

  1. Co dělá dělat?
  2. Odstraní blob větší než zadaná velikost z historie úložiště.
  3. Jak to dělá práce?
  4. Vyloučí zadané cesty ze zpracování filtrem.
  5. Mohu si změny před použitím prohlédnout?
  6. Ano, pomocí poskytuje podrobnou zprávu o změnách.
  7. Jak zacílím na konkrétní soubory nebo adresáře?
  8. Použijte možnost omezit operace na konkrétní cesty.
  9. Jaký je účel třídy v Pythonu?
  10. Umožňuje použití vlastních filtrů na úložiště.
  11. Existuje způsob, jak vrátit změny provedené uživatelem ?
  12. Jakmile jsou změny aplikovány, nelze je snadno vrátit zpět. Vždy nejprve zálohujte své úložiště.
  13. Co dělá dělat?
  14. Obsahuje seznam všech objektů v úložišti, včetně objektů BLOB, stromů a potvrzení.
  15. Proč používat s ?
  16. pomáhá aplikovat příkazy na seznam položek, jako jsou velké objekty blob určené k odstranění.

Efektivní správa velkých souborů v úložišti Git je nezbytná pro optimalizaci výkonu a úložiště. Použití nástrojů jako BFG a Git Filter-Repo pomáhá tento proces zefektivnit, ačkoli každý má jedinečné příkazy a metody. Využitím pokročilých možností a pochopením nuancí každého nástroje můžete zajistit, že vaše úložiště zůstane čisté a efektivní. Před provedením významných změn vždy nezapomeňte zálohovat své úložiště, abyste předešli ztrátě dat. Kombinace znalostí těchto nástrojů se strategickým plánováním výrazně zlepší vaše postupy správy verzí.