Hoppa till huvudinnehållet

Städning av repon: rensa onåbara objekt

När du tar bort en branch, en tagg eller en pull request i Git tas dess commits inte bort. De blir onåbara: ingen ref pekar längre på dem, men objekten ligger kvar på servern och kan fortfarande hämtas eller visas av den som känner till deras SHA, tills Gits egen skräpsamling tar bort dem vid någon senare tidpunkt.

Rensa onåbara objekt tar bort dem nu. Använd det när en commit aldrig borde ha pushats, till exempel för att den innehöll en hemlighet, en kunds personuppgifter eller en fil som du inte får lagra. Organisationens ägare kör det själva från konsolen, och varje körning avslutas med en skriftlig bekräftelse som du kan spara.

Innan du börjar: byt ut hemligheten

Om commiten innehöll en hemlighet (ett lösenord, en API-nyckel, en token eller en privat nyckel) ska du först byta ut eller återkalla hemligheten. Att commiten tas bort gör inte hemligheten ogiltig. Alla som klonade eller hämtade repot medan commiten fanns där har en kopia, och det har även forkar, speglar och CI-loggar (se Vad den inte tar bort). En rensning begränsar vem som kan få tag på commiten från och med nu; den kan inte kalla tillbaka kopior som redan finns.

Push-skydd stoppar de flesta hemligheter innan de ens når servern.

Vem kan köra den

Organisationens ägare. Sidan finns i organisationens administration på:

frem.sh/<your-org>/_admin/repos-overview/<repo>/housekeeping

Du behöver ägaråtkomst till organisationens administration via din vanliga inloggning, som kräver multifaktorautentisering. Utöver det finns inget separat bekräftelsesteg. För att starta en körning skriver du repots fullständiga namn, så att en körning inte kan startas på fel repo av misstag.

Steg för steg

  1. Byt ut eventuella läckta hemligheter. Se ovan.
  2. Ta bort det som håller commiten. Ta bort varje branch, tagg eller pull request som fortfarande innehåller commiten, eller skriv om branchens historik så att commiten inte längre ingår i den och gör force-push. En commit som någon ref fortfarande når är inte onåbar, och rensningen tar inte bort den.
  3. Förhandsvisa. Öppna sidan Städning och kör förhandsvisningen. Du kan klistra in SHA:erna för de commits som ska bort (upp till 20), och förhandsvisningen visar för var och en om den tas bort eller vad som fortfarande håller den kvar. Se Läsa förhandsvisningen.
  4. Kör den. Välj om föräldralösa LFS-objekt ska ingå, skriv repots namn för att bekräfta och starta körningen. Sidan visar hur det går.
  5. Ladda ned bekräftelsen. När körningen är klar laddar du ned den skriftliga bekräftelsen som PDF eller JSON och sparar den med din incidentdokumentation. Se Den skriftliga bekräftelsen.

Läsa förhandsvisningen

Förhandsvisningen ändrar ingenting. Den listar:

  • För varje SHA du klistrade in: om den finns i repot, och om en ref fortfarande håller den, vilken (en branch, en tagg, en pull request eller en annan ref). Ta bort den ref:en och kör förhandsvisningen igen. En SHA som bara en post i en reflog fortfarande håller tas bort av körningen.
  • Onåbara commits som tas bort, med ämnesraden i deras commit-meddelande.
  • Onåbara commits i karensperioden: för nya för att tas bort nu. Se Karensperioden på 30 minuter.
  • Forkar av repot, med namn. En fork är en separat kopia och ändras inte. Se Forkar.
  • Annat som körningen tar bort: antalet cachade arkivnedladdningar, poster för återställning av brancher och, om du tar med dem, föräldralösa LFS-objekt.
  • Varför körningen inte kan starta, om den inte kan det. Till exempel: en körning pågår redan för repot, eller repot är större än gränsen för självbetjäning.

Karensperioden på 30 minuter

Objekt som skapats eller uppdaterats under de senaste 30 minuterna behålls alltid. Det skyddar pushar som pågår medan körningen sker: en push skriver sina objekt innan den uppdaterar branchen, och under den korta stunden ser de nya objekten onåbara ut. Karensperioden är fast och kan inte kortas.

Om en commit som du vill ta bort visas som i karensperioden, vänta tills 30 minuter har gått sedan du tog bort det som höll den, kör förhandsvisningen igen och starta sedan körningen.

Vad den tar bort

  • Onåbara Git-objekt: commits och de träd och filinnehåll som bara de commitsen använder, tillsammans med de reflog-poster som fortfarande höll dem.
  • Commiten ur commit-grafen, så att commiten inte längre syns i historikvyer, i sökningar eller via sin SHA.
  • Cachade arkivnedladdningar (zip och tar) av de commitsen.
  • Cachade kopior av fetch-pack för repot, som servern sparar för att besvara upprepade kloningar och hämtningar snabbare.
  • Poster för återställning av brancher för borttagna brancher som pekade på de commitsen, så att branchen inte längre kan återställas från repots lista över borttagna brancher.
  • Valfritt, föräldralösa LFS-objekt: LFS-filer som ingen commit i repot längre hänvisar till och som laddades upp för mer än 24 timmar sedan. Det väljer du när du startar körningen.

När körningen är klar returnerar en URL som visade commiten not found, och en git fetch av SHA:n misslyckas.

Vad den inte tar bort

Körningen tar bort objekt från det här repot på fremforges servrar. Den når inte kopior som finns någon annanstans, och den redigerar inte poster som nämner commiten:

  • Forkar. Varje fork är en separat kopia. Se Forkar.
  • Befintliga kloner och exporter. Varje klon, hämtning och dataexport som gjordes medan commiten fanns där innehåller den fortfarande. Be de berörda att ta bort sin kopia eller klona på nytt.
  • Speglar. En spegel av det här repot, på fremforge eller någon annanstans, har en egen kopia.
  • Repots wiki. Wikin är ett separat Git-repo och rensas inte.
  • Actions-loggar och -artefakter. Ett arbetsflöde som kördes på commiten kan ha skrivit ut eller sparat dess innehåll. Ta bort dem separat.
  • Innehåll i webhook-leveranser, som innehåller commit-SHA:er, meddelanden och uppgifter om författaren.
  • Aktivitetsflödet, commit-statusar och kommentarer i pull requestens tidslinje som nämner commiten.

Om något av detta innehåller något som du behöver få bort och du inte kan ta bort det själv, kontakta support@frem.sh.

Forkar

En fork är en fullständig, separat kopia av repot, och den som äger forken bestämmer över den. Förhandsvisningen listar forkarna med namn, så att du vet var commiten mer kan finnas. För att ta bort commiten från en fork tar forkens ägare bort den branch, tagg eller pull request som håller den där och kör rensningen på forken, eller tar bort forken.

Säkerhetskopior

En rensning tar bort objekten från det levande repot. Den redigerar inte säkerhetskopior: fremforges säkerhetskopior ändras inte för att ta bort en enskild kunds data, och de används bara för att återställa plattformen, aldrig för att lämna ut data till någon. Ett rensat objekt finns därför kvar i de krypterade säkerhetskopiorna tills de löper ut enligt sin vanliga lagringstid:

  • Repots innehåll (Git-objekten): upp till 30 dagar.
  • Kopior i objektlagringen (cachade arkivnedladdningar och LFS-objekt): upp till 13 månader, i lagring för katastrofåterställning.

Databasposter, till exempel poster för återställning av brancher, följer databasens säkerhetskopior. Personuppgiftsbiträdesavtalet (DPA), §9 och bilaga A.9, är den bindande beskrivningen av varje nivå av säkerhetskopior och hur länge den sparas; där den här sidan och det gällande DPA:t skiljer sig åt gäller DPA:t.

Den skriftliga bekräftelsen

Varje avslutad körning ger en bekräftelse som du kan ladda ned som PDF eller JSON. Den anger repot, vem som körde den och när, antalet objekt före och efter körningen, antalet borttagna arkivnedladdningar, poster för återställning av brancher och LFS-objekt samt, för varje SHA du klistrade in, om den nu saknas i repot eller vad som fortfarande håller den kvar.

Spara den med din incidentdokumentation. Den är ditt bevis på när datan togs bort från den levande tjänsten; avsnittet Säkerhetskopior ovan anger hur länge kopior finns kvar efter det.

Gränser

  • En körning per repo och timme, och 10 körningar per organisation och dygn. En begäran som nekas räknas inte.
  • Gräns för självbetjäning: 5 GiB. För ett repo som är större än så, kontakta support@frem.sh.
  • Upp till 20 SHA:er kan klistras in i en förhandsvisning.

API

Förhandsvisningen och resultatet av en körning kan läsas via API:t:

GET /_app/api/v1/orgs/{slug}/repos/{repo}/housekeeping/prune/preview?sha=<sha>[,<sha>...]

Status för en körning och dess skriftliga bekräftelse har egna GET-endpoints, som listas i OpenAPI-specifikationen.

En körning kan bara startas från konsolen. API:t kan inte starta en.