Miksi Git LFS Repot voivat olla suurempia: opas

Miksi Git LFS Repot voivat olla suurempia: opas
Bash Script

Git LFS -arkiston koon ymmärtäminen

Siirtäessäni suurta SVN-varastoa Gitiin törmäsin mielenkiintoiseen ongelmaan. Kun Git-tietovarasto muutettiin käyttämään Git LFS:ää binäärien tallentamiseen, arkiston koko kasvoi merkittävästi.

Tässä artikkelissa tutkitaan, miksi Git LFS:n siirretty arkisto päätyy alkuperäistä suuremmaksi ja pakkaako tavallinen Git binäärit tehokkaammin kuin Git LFS. Jaan myös siirtoprosessin aikana käytetyt vaiheet ja komennot.

Komento Kuvaus
git lfs track Seuraa määritettyjä tiedostotyyppejä Git LFS:llä siirtämällä suuria tiedostoja pois Git-päävarastosta.
bfg --convert-to-git-lfs Muuntaa arkistossa määritetyt tiedostotyypit Git LFS:ää käyttäviksi ja poistaa suuret tiedostot Git-historiasta.
git reflog expire Vanhenee kaikki reflogin merkinnät, mikä voi auttaa pienentämään arkiston kokoa LFS-siirron jälkeen.
git gc --prune=now --aggressive Suorittaa roskienkeruun poistaakseen tarpeettomat tiedostot ja optimoidakseen arkiston koon aggressiivisesti.
subprocess.run Suorittaa komennon aliprosessissa, mikä mahdollistaa vuorovaikutuksen käyttöjärjestelmän komentoriviliittymän kanssa Python-komentosarjasta.
du -sh Näyttää tietyn hakemiston levynkäytön ihmisen luettavassa muodossa.

Siirtokomentosarjojen ymmärtäminen

Bash-komentosarja on suunniteltu automatisoimaan Git-tietovaraston siirto Git LFS:ää käyttämään. Ensinnäkin se alustaa LFS:n ja seuraa binaaritiedostoja git lfs track komento. Sitten se lisää seurantamäärityksen arkistoon ja sitoo sen. The bfg --convert-to-git-lfs -komentoa käytetään arkiston olemassa olevien binääritiedostojen muuntamiseen LFS:ksi poistaen ne tehokkaasti Git-päähistoriasta. Tämän muuntamisen jälkeen skripti suoritetaan git reflog expire ja git gc --prune=now vanhojen viitteiden vanhenemiseen ja tarpeettomien tiedostojen karsimiseen, mikä pienentää arkiston kokoa.

Python-skripti täydentää tätä tarjoamalla tavan vertailla arkiston kokoa ennen ja jälkeen siirron. Käyttämällä subprocess.run toiminnon, se suorittaa du -sh komento saadaksesi määritettyjen hakemistojen levykäytön. Tämä mahdollistaa arkiston kokojen selkeän vertailun ennen LFS-siirtoa ja sen jälkeen. Tulos auttaa ymmärtämään siirto- ja puhdistuskomentojen vaikutusta arkiston kokoon ja varmistaa siirtoprosessin tehokkuuden.

Git LFS:n siirto- ja puhdistusprosessin automatisointi

Bash Script Git LFS -siirtoon ja -siivoukseen

#!/bin/bash
# Step 1: Initialize LFS and track file type
git lfs install
git lfs track "*.bin"
git add .gitattributes
git commit -m "Track binary files with LFS"
# Step 2: Migrate existing files to LFS
bfg --convert-to-git-lfs '*.bin' --no-blob-protection
git reflog expire --expire=now --all
git gc --prune=now --aggressive

Arkiston koon muutosten analysointi siirron jälkeen

Python-skripti arkiston koon vertailuun

import subprocess
def get_repo_size(path):
    result = subprocess.run(['du', '-sh', path], stdout=subprocess.PIPE)
    size = result.stdout.split()[0].decode('utf-8')
    return size
before_migration = get_repo_size('/path/to/repo_before_lfs')
after_migration = get_repo_size('/path/to/repo_after_lfs')
print(f"Size before LFS migration: {before_migration}")
print(f"Size after LFS migration: {after_migration}")

Git LFS:n vaikutuksen arkiston kokoon tutkiminen

Yksi tärkeä näkökohta siirtymisessä Git LFS:ään on ymmärtää erot siinä, miten Git ja Git LFS käsittelevät tiedostojen tallennusta. Git LFS korvaa arkistossasi olevat suuret tiedostot pienillä osoitintiedostoilla, kun taas tiedoston varsinainen sisältö tallennetaan erikseen. Tämä erottelu voi aiheuttaa levyn koon tilapäisen suurentumisen siirron aikana sekä alkuperäisten suurten tiedostojen että uusien LFS-osoittimien vuoksi. Toinen tekijä on se, että Git LFS käyttää erilaisia ​​pakkaus- ja tallennusmekanismeja, mikä ei välttämättä aina johda arkiston pienempiin kokoihin, etenkään heti siirron jälkeen.

Arkiston koon optimoimiseksi siirron jälkeen on tärkeää suorittaa komentoja, kuten git reflog expire ja git gc --prune=now --aggressive. Nämä komennot auttavat poistamaan tarpeettomia tiedostoja ja viittauksia vähentäen merkittävästi arkiston kokoa. On myös tärkeää seurata arkiston kokoa ajan myötä ja suorittaa säännöllinen huolto, jotta se pysyy optimoituna. Näiden vivahteiden ymmärtäminen voi auttaa hallitsemaan odotuksia ja varmistamaan tehokkaan siirtoprosessin.

Yleisiä kysymyksiä Git LFS -migraatiosta

  1. Miksi arkiston koko kasvaa alkuperäisen Git LFS -siirtämisen jälkeen?
  2. Kasvu johtuu sekä alkuperäisten tiedostojen että LFS-osoittimien läsnäolosta. Juoksemassa git gc komennot auttavat pienentämään tätä kokoa.
  3. Mikä tekee git reflog expire tehdä?
  4. Tämä komento poistaa vanhentuneet reflog-merkinnät, mikä auttaa puhdistamaan arkiston ja vapauttamaan tilaa.
  5. Kuinka bfg --convert-to-git-lfs tehdä työtä?
  6. Se muuntaa olemassa olevat suuret tiedostot Git LFS:ää käyttäviksi siirtäen ne tehokkaasti pois Gitin päähistoriasta.
  7. Miksi on git gc --prune=now --aggressive käytetty?
  8. Tämä komento puhdistaa aggressiivisesti tarpeettomat tiedostot ja optimoi arkiston tallennustilan.
  9. Mitä hyötyä Git LFS:n käytöstä on?
  10. Git LFS pienentää arkiston kloonien kokoa tallentamalla suuret tiedostot erikseen, mikä parantaa suorituskykyä.
  11. Voidaanko arkiston kokoa pienentää välittömästi siirron jälkeen?
  12. Kyllä, juoksemalla git reflog expire ja git gc komento poistaa tarpeettomat tiedot.
  13. Onko Git LFS:n käytössä tietojen katoamisen riski?
  14. Ei, niin kauan kuin siirto- ja puhdistuskomennot suoritetaan oikein, tiedot pysyvät ennallaan.
  15. Kuinka usein ylläpitokomennot tulee suorittaa?
  16. On suositeltavaa suorittaa ylläpitokomentoja säännöllisesti, varsinkin arkiston merkittävien muutosten jälkeen.

Viimeisiä ajatuksia Git LFS -migraatiosta

Siirtyminen Git LFS:ään voi johtaa väliaikaiseen arkiston koon kasvuun alkuperäisten tiedostojen ja LFS-osoittimien rinnakkaiselon vuoksi. Kuitenkin käynnissä olevat ylläpitokomennot, kuten git reflog expire ja git gc --prune=now --aggressive voi pienentää kokoa merkittävästi. Gitin ja Git LFS:n tiedostotallennuskäsittelyn erojen ymmärtäminen on ratkaisevan tärkeää tehokkaan siirron kannalta.

Vaikka alkuperäinen koon kasvu saattaa olla huolestuttavaa, Git LFS:n käytön pitkän aikavälin hyödyt, erityisesti etätallennus- ja kloonauksen tehokkuuden kannalta, ovat suuremmat kuin väliaikaiset haitat. Säännöllinen huolto ja oikea konfigurointi voivat varmistaa optimoidun ja hallittavan arkiston koon.