Blob Stripping supratimas naudojant Git
Naudojant Git didelių failų tvarkymas gali būti sudėtingas, ypač kai jie nebereikalingi darbinėje kopijoje. Tokie įrankiai kaip BFG ir Git Filter-Repo siūlo sprendimus, kaip pašalinti šiuos didelius failus iš saugyklos istorijos. Tačiau pasiekti tų pačių rezultatų naudojant „Git Filter-Repo“, kaip ir naudojant BFG, gali būti sudėtinga.
Šiame straipsnyje nagrinėjama, kaip pakartoti BFG komandą --juostelės-dėmės-didesnės nei naudojant Git Filter-Repo. Išspręsime įprastas problemas ir pateiksime nuoseklų vadovą, kuris užtikrins, kad galėtumėte efektyviai išvalyti saugyklą netyčia nepašalindami vis dar naudojamų failų.
komandą | apibūdinimas |
---|---|
from git import Repo | Importuoja „GitPython“ bibliotekos „Repo“ klasę, kad galėtų sąveikauti su „Git“ saugykla. |
git_filter_repo import RepoFilter | Importuoja RepoFilter klasę iš git-filter-repo, kad būtų galima filtruoti saugyklos blobus. |
repo = Repo(repo_path) | Inicijuoja Repo objektą, nukreipiantį į nurodytą saugyklos kelią. |
RepoFilter(repo).filter_blobs(filter_large_blobs) | Taiko pasirinktinę filtro funkciją, kad pašalintų dideles dėmes iš saugyklos. |
git rev-list --objects --all | Išvardija visus saugykloje esančius objektus, įskaitant BLOB, medžius ir įsipareigojimus. |
git cat-file --batch-check | Pateikiama išsami informacija apie objektus, įskaitant jų dydį. |
xargs -n 1 git filter-repo --strip-blobs-bigger-than $SIZE_LIMIT | Naudoja xargs, kad pritaikytų komandą git filter-repo kiekvienai nustatytai didelei dėmėms. |
Kaip veikia pateikti scenarijai
Python scenarijus naudoja GitPython biblioteką sąveikauti su Git saugykla. Saugykla inicijuojama naudojant from git import Repo ir repo = Repo(repo_path), nukreipiantis į nurodytą saugyklos kelią. Tada scenarijus apibrėžia filtro funkciją filter_large_blobs(blob) identifikuoti didesnes nei 10 MB dėmes. Šis filtras taikomas naudojant RepoFilter(repo).filter_blobs(filter_large_blobs), kuri užtikrina, kad dėmės, viršijančios dydžio limitą, būtų pašalintos iš saugyklos istorijos.
Apvalkalo scenarijus pasiekia panašų tikslą naudodamas Git komandas ir apvalkalo programas. Jis pereina į saugyklos katalogą su cd $REPO_PATH ir išvardija visus naudojamus objektus git rev-list --objects --all. Kiekvienas objektas yra patikrintas jo dydis git cat-file --batch-check. Objektai, didesni nei nurodyta dydžio riba, filtruojami ir apdorojami naudojant xargs kreiptis git filter-repo --strip-blobs-bigger-than $SIZE_LIMIT prie kiekvienos nustatytos didelės dėmės. Šis metodas efektyviai pašalina dideles dėmes iš saugyklos ir užtikrina švarią istoriją be nereikalingų didelių failų.
„Python“ naudojimas norint filtruoti „Git Blobs“ pagal dydį
Python scenarijus, skirtas didelėms dėmėms filtruoti
# 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)
„Shell“ scenarijaus naudojimas dideliems „git“ dėmėms nustatyti ir pašalinti
Apvalkalo scenarijus, skirtas dėmėms valdyti 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"
Išplėstinių „Git“ filtro ir atkūrimo parinkčių tyrinėjimas
Nors git filter-repo --strip-blobs-bigger-than yra veiksmingas norint pašalinti didelius failus, yra papildomų parinkčių, leidžiančių tinkinti saugyklos valymą. Pavyzdžiui, galite naudoti --path apriboti operaciją tam tikrais failais ar katalogais. Tai leidžia taikyti tik tam tikras saugyklos sritis, kad būtų pašalintos dėmės. Kitas naudingas variantas yra --invert-paths, kuri pašalina nurodytus kelius iš operacijos ir suteikia daugiau galimybių valdyti, kurie failai lieka nepaliesti.
Be to, galite derinti --strip-blobs-bigger-than su --analyze kad peržiūrėtumėte pakeitimus prieš juos pritaikydami. Tai padeda išvengti netyčinių ištrynimų, nes pateikia išsamią ataskaitą apie tai, kas bus pašalinta. Naudodami šias išplėstines parinktis galite padidinti saugyklos priežiūros užduočių lankstumą ir tikslumą, užtikrinant švaresnę ir efektyvesnę projekto istoriją.
Dažnai užduodami klausimai apie „Git Filter-Repo“.
- Ką daro git filter-repo --strip-blobs-bigger-than daryti?
- Jis pašalina iš saugyklos istorijos didesnius nei nurodytas dydis dėmes.
- Kaip --invert-paths dirbti?
- Filtras neapdoroja nurodytų kelių.
- Ar galiu peržiūrėti pakeitimus prieš juos pritaikydamas?
- Taip, naudojant --analyze pateikia išsamią pokyčių ataskaitą.
- Kaip nukreipti į konkrečius failus ar katalogus?
- Naudoti --path galimybė apriboti operacijas konkrečiais keliais.
- Koks yra tikslas RepoFilter klasė Python?
- Tai leidžia saugykloje taikyti pasirinktinius filtrus.
- Ar yra būdas anuliuoti pakeitimus, kuriuos padarė git filter-repo?
- Pritaikius pakeitimus jų negalima lengvai anuliuoti. Visada pirmiausia sukurkite atsarginę saugyklos kopiją.
- Ką daro git rev-list --objects --all daryti?
- Jame pateikiami visi saugykloje esantys objektai, įskaitant blobas, medžius ir įsipareigojimus.
- Kodėl naudoti xargs su git filter-repo?
- xargs padeda taikyti komandas elementų sąrašui, pvz., didelėms dėmėms, kurias reikia pašalinti.
Paskutinės mintys apie „Git Blob“ valdymą
Efektyviai valdyti didelius failus „Git“ saugykloje būtina norint optimizuoti našumą ir saugyklą. Įrankių, tokių kaip BFG ir Git Filter-Repo, naudojimas padeda supaprastinti šį procesą, nors kiekvienas turi unikalias komandas ir metodus. Naudodami išplėstines parinktis ir suprasdami kiekvieno įrankio niuansus, galite užtikrinti, kad jūsų saugykla išliks švari ir efektyvi. Visada nepamirškite pasidaryti atsarginės saugyklos kopijos prieš atlikdami reikšmingus pakeitimus, kad neprarastumėte duomenų. Šių įrankių žinių derinimas su strateginiu planavimu žymiai pagerins versijų valdymo praktiką.