Rydding i repositoryer: fjern objekter som ikke kan nås
Når du sletter en branch, en tag eller en pull request i Git, slettes ikke committene. De blir utilgjengelige: ingen ref peker på dem lenger, men objektene blir liggende på serveren og kan fortsatt hentes eller vises av alle som kjenner SHA-en, helt til Gits egen søppelinnsamling fjerner dem på et senere tidspunkt.
Rydd bort ikke-nåbare objekter fjerner dem nå. Bruk det når en commit aldri skulle vært pushet, for eksempel fordi den inneholdt en secret, en kundes personopplysninger eller en fil du ikke har lov til å lagre. Eiere av organisasjonen kjører det selv fra konsollen, og hver kjøring avsluttes med en skriftlig bekreftelse du kan ta vare på.
Før du begynner: roter secreten
Hvis commiten inneholdt en secret (et passord, en API-nøkkel, et token eller en privat nøkkel), må du rotere eller tilbakekalle secreten først. Å fjerne commiten gjør ikke secreten ugyldig. Alle som klonet eller hentet repositoryet mens commiten lå der, har en kopi, og det har også forker, speil og CI-logger (se Dette fjernes ikke). Fjerningen begrenser hvem som kan få tak i commiten fra nå av; den kan ikke kalle tilbake kopier som allerede finnes.
Push-beskyttelse stopper de fleste secrets før de i det hele tatt når serveren.
Hvem kan kjøre det
Owners i organisasjonen. Siden ligger i organisasjonsadministrasjonen på:
frem.sh/<your-org>/_admin/repos-overview/<repo>/housekeeping
Du trenger Owner-tilgang til organisasjonsadministrasjonen gjennom den vanlige innloggingen, som krever flerfaktorautentisering. Utover det finnes det ikke noe eget bekreftelsestrinn. For å starte en kjøring skriver du hele navnet på repositoryet, slik at ingen kjøring kan startes på feil repository ved et uhell.
Trinn for trinn
- Roter eventuelle lekkede secrets. Se over.
- Slett det som holder commiten. Slett hver branch, tag eller pull request som fortsatt inneholder commiten, eller skriv om branchhistorikken slik at commiten ikke lenger er en del av den, og force-push. En commit som en ref fortsatt når, er ikke utilgjengelig, og fjerningen tar den ikke.
- Forhåndsvis. Åpne ryddesiden og kjør forhåndsvisningen. Du kan lime inn SHA-ene til committene du vil fjerne (opptil 20), og forhåndsvisningen forteller for hver av dem om den blir fjernet, eller hva som fortsatt holder den. Se Lese forhåndsvisningen.
- Kjør. Velg om foreldreløse LFS-objekter skal tas med, skriv navnet på repositoryet for å bekrefte, og start kjøringen. Siden viser fremdriften.
- Last ned bekreftelsen. Når kjøringen er ferdig, laster du ned den skriftlige bekreftelsen som PDF eller JSON og oppbevarer den sammen med hendelsesdokumentasjonen. Se Den skriftlige bekreftelsen.
Lese forhåndsvisningen
Forhåndsvisningen endrer ingenting. Den viser:
- For hver SHA du limte inn: om den finnes i repositoryet, og hvis en ref fortsatt holder den, hvilken (en branch, en tag, en pull request eller en annen ref). Slett den ref-en og kjør forhåndsvisningen igjen. En SHA som bare en reflog-oppføring holder, fjernes av kjøringen.
- Utilgjengelige commits som blir fjernet, med emnelinjen fra commit-meldingen.
- Utilgjengelige commits innenfor fristen: for nye til å fjernes nå. Se Fristen på 30 minutter.
- Forker av repositoryet, med navn. En fork er en separat kopi og endres ikke. Se Forker.
- Andre ting kjøringen fjerner: antallet bufrede arkivnedlastinger, oppføringer for gjenoppretting av brancher og, hvis du tar dem med, foreldreløse LFS-objekter.
- Hvorfor kjøringen ikke kan starte, hvis den ikke kan det. For eksempel: en kjøring pågår allerede for repositoryet, eller repositoryet er over størrelsesgrensen for selvbetjening.
Fristen på 30 minutter
Objekter som er opprettet eller fornyet de siste 30 minuttene, beholdes alltid. Det beskytter pusher som pågår mens kjøringen skjer: en push skriver objektene sine før den oppdaterer branchen, og i det korte øyeblikket ser de nye objektene utilgjengelige ut. Fristen er fast og kan ikke forkortes.
Hvis en commit du vil fjerne, står oppført som within grace, venter du til det har gått 30 minutter siden du slettet det som holdt den, kjører forhåndsvisningen på nytt og starter deretter kjøringen.
Dette fjernes
- Utilgjengelige Git-objekter: committene, og trærne og filinnholdet som bare de committene bruker, sammen med reflog-oppføringene som fortsatt holdt dem.
- Commiten fra commit-grafen, slik at commiten ikke lenger vises i historikkvisninger, i søk eller via SHA-en.
- Bufrede arkivnedlastinger (zip og tar) av de committene.
- Bufrede kopier av fetch-pakker for repositoryet, som serveren beholder for å svare raskere på gjentatte kloninger og hentinger.
- Oppføringer for gjenoppretting av brancher for slettede brancher som pekte på de committene, slik at branchen ikke lenger kan gjenopprettes fra repositoryets liste over slettede brancher.
- Eventuelt foreldreløse LFS-objekter: LFS-filer som ingen commit i repositoryet lenger viser til, og som ble lastet opp for mer enn 24 timer siden. Du velger dette når du starter kjøringen.
Når kjøringen er ferdig, svarer en URL som viste commiten, med not found, og en git fetch av SHA-en feiler.
Dette fjernes ikke
Kjøringen fjerner objekter fra dette repositoryet på fremforges servere. Den når ikke kopier som ligger andre steder, og den redigerer ikke registreringer som nevner commiten:
- Forker. Hver fork er en separat kopi. Se Forker.
- Eksisterende kloner og eksporter. Hver klone, henting og dataeksport som ble gjort mens commiten lå der, inneholder den fortsatt. Be de det gjelder om å slette kopien sin eller klone på nytt.
- Speil. Et speil av dette repositoryet, i fremforge eller andre steder, har sin egen kopi.
- Repositoryets wiki. Wikien er et separat Git-repository og ryddes ikke.
- Actions-logger og -artefakter. En workflow som kjørte på commiten, kan ha skrevet ut eller lagret innholdet. Fjern dem separat.
- Nyttelaster fra webhook-leveringer, som inneholder commit-SHA-er, meldinger og forfatteropplysninger.
- Aktivitetsfeeden, commit-statuser og kommentarer i tidslinjen til pull requests som nevner commiten.
Hvis noe av dette inneholder noe du trenger fjernet og ikke kan fjerne selv, kontakt support@frem.sh.
Forker
En fork er en fullstendig, separat kopi av repositoryet, og eieren av forken styrer den. Forhåndsvisningen viser forkene med navn, slik at du vet hvor ellers commiten kan ligge. For å fjerne commiten fra en fork sletter eieren av forken branchen, taggen eller pull requesten som holder den der, og kjører ryddingen på forken, eller sletter forken.
Sikkerhetskopier
Ryddingen fjerner objektene fra det aktive repositoryet. Den redigerer ikke sikkerhetskopier: fremforges sikkerhetskopier endres ikke for å fjerne én enkelt kundes data, og de brukes bare til å gjenopprette plattformen, aldri til å levere dataene til noen. Et fjernet objekt blir derfor liggende i de krypterte sikkerhetskopiene til de utløper etter den vanlige oppbevaringstiden:
- Repositoryinnhold (Git-objektene): opptil 30 dager.
- Kopier i objektlageret (bufrede arkivnedlastinger og LFS-objekter): opptil 13 måneder, i lagring for katastrofegjenoppretting.
Databaseregistreringer, som oppføringer for gjenoppretting av brancher, følger databasens sikkerhetskopier. Databehandleravtalen, §9 og vedlegg A.9, er den bindende beskrivelsen av hvert nivå av sikkerhetskopier og hvor lenge det oppbevares; der denne siden og den gjeldende databehandleravtalen er ulike, gjelder databehandleravtalen.
Den skriftlige bekreftelsen
Hver ferdige kjøring gir en bekreftelse du kan laste ned som PDF eller JSON. Den viser repositoryet, hvem som kjørte den og når, antallet objekter før og etter kjøringen, antallet arkivnedlastinger, oppføringer for gjenoppretting av brancher og LFS-objekter som ble fjernet, og for hver SHA du limte inn, om den nå er borte fra repositoryet, eller hva som fortsatt holder den.
Oppbevar den sammen med hendelsesdokumentasjonen. Den er beviset ditt på når dataene ble fjernet fra den aktive tjenesten; seksjonen Sikkerhetskopier over sier hvor lenge kopier finnes etter det.
Grenser
- Én kjøring per repository per time, og 10 kjøringer per organisasjon per døgn. En forespørsel som avvises, teller ikke.
- Størrelsesgrense for selvbetjening: 5 GiB. For et større repository, kontakt support@frem.sh.
- Opptil 20 SHA-er kan limes inn i én forhåndsvisning.
API
Forhåndsvisningen og resultatene av en kjøring kan leses via API-et:
GET /_app/api/v1/orgs/{slug}/repos/{repo}/housekeeping/prune/preview?sha=<sha>[,<sha>...]Statusen til en kjøring og den skriftlige bekreftelsen har egne GET-endepunkter, oppført i OpenAPI-spesifikasjonen.
En kjøring kan bare startes fra konsollen. API-et kan ikke starte en.