Migrera repon med secrets i historiken
fremforge kör en pre-receive-hook med gitleaks vid varje push, även den första spegel-push som för in en kunds historik i en fremforge-organisation. Om källrepot har secrets i någon äldre commit (en gammal .env, en läckt API-nyckel, en privat SSL-nyckel osv.) misslyckas import-pushen och migreringen stannar.
Den här sidan beskriver de två alternativ som stöds. Alternativ A är den rekommenderade vägen för de flesta team; alternativ B är en sista utväg.
Alternativ A: byt ut secreten + skriv om historiken (rekommenderas)
Passar bäst när:
- Den läckta secreten är en riktig (API-nyckel, privat SSH-nyckel, certifikat, lösenord). Den måste ogiltigförklaras oavsett var repot ligger; att lämna den i någon värds Git-historik är en fortsatt exponering.
- Teamet kan lägga ungefär 1 timme på att skriva om historiken + göra force-push till källan.
Gör så här:
- Byt ut den läckta secreten först. Innan du rör Git: ändra API-nyckeln, återkalla SSH-nyckeln, byt ut certifikatet. Det läckta värdet ska vara ogiltigt innan historiken skrivs om; då är värdet ofarligt även om omskrivningen blir ofullständig.
- Identifiera commiten eller commitsen. gitleaks-utdatan från fremforges importförsök anger regeln + commitens SHA. Kontrollera att du förstår vilken secret och vilka commits det gäller.
- Skriv om historiken med
git filter-repo. (uppströmsdokumentation)# Install: brew install git-filter-repo (or pip install git-filter-repo) # Verify upstream is clean: git clone --mirror <source-url> repo.git cd repo.git # Replace the secret value across history (string-replace shape): echo 'literal:AKIAEXAMPLE12345===>REDACTED' > replace.txt git filter-repo --replace-text replace.txt # OR: drop the file containing the secret across history: git filter-repo --invert-paths --path path/to/leaky/file - Gör först force-push av den omskrivna historiken till källrepot.
- Det är omskrivningen på källsidan som gör åtgärden varaktig. Om du bara pushar den omskrivna historiken till fremforge har en angripare som klonade källan före omskrivningen fortfarande det läckta värdet.
- GitHub:
git push --force-with-lease --mirror - GitLab + ADO: samma sak. Båda avvisar force-push till skyddade brancher som standard; lätta tillfälligt på skyddet, pusha och skydda igen.
- Kör migreringen enligt standardproceduren, se github / gitlab / azure-devops.
- Kontrollera efter importen att fremforges gitleaks-logg visar noll blockeringar för migrerings-pushen.
Förbehåll:
- Forkar och kloner har fortfarande den ursprungliga historiken. Det går inte att få tillbaka varje klon, och det är därför steg 1 (byt ut secreten först) är det steg som allt vilar på.
- En omskrivning av historiken förstör varje öppen PR/MR/branch i källan. Stäm av med teamet innan du trycker på enter; vissa värdar avslutar PR:er snyggt vid rebase, andra visar dem som “merged in N+1 commits”.
- Integriteten för taggar och signaturer bryts: en signerad tagg som pekar på en omskriven commit är inte längre giltig. Tagga om efter omskrivningen.
Alternativ B: börja från ett tomt repo och pusha bara den senaste commiten (sista utväg)
Passar bäst när:
- Källans historik är för trasslig för att skriva om på ett rent sätt.
- Teamet kan avstå från all blame-/logghistorik; bara det nuvarande läget spelar roll.
- Vanligt för arkiverade projekt som speglas “för säkerhets skull” men inte utvecklas aktivt.
Gör så här:
- Klona källrepots senaste träd (valfri branch) till en arbetskatalog.
rm -rf .git && git init && git add . && git commit -m "Initial import: <source-url>@<commit-sha>".- Pusha det nya repot med en enda commit till fremforge enligt standardproceduren.
- Lägg till en NOTES.md eller en länk i CHANGELOG som pekar tillbaka till källan för teammedlemmar som behöver hela historiken.
Det här förlorar du:
- All historik i
git blame/git log. - Alla diffar från äldre PR:er / MR:er (de finns kvar hos källvärden tills du tar bort den).
- Alla äldre commit-signaturer.
Välja mellan de två
| Fråga | Alternativ A | Alternativ B |
|---|---|---|
| Är secreten fortfarande giltig? | byt ut först | ej tillämpligt |
| Måste historiken bevaras? | omskriven | kasserad |
| Engångs-push? | ja | ja |
| Fortsätter nytt arbete i samma repo? | ja | ja |
| Finns forkar/kloner med läckan kvar ute? | kvarstående risk bara om secreten inte bytts ut | ej tillämpligt (historiken finns inte i fremforge) |
| Krävs en åtgärd av en operatör? | nej | nej |
Välj A om det inte finns ett starkt skäl emot det.
Relaterat
- Migrering från GitHub · Migrering från GitLab · Migrering från Azure DevOps
- pre-migration-check.sh: bläddrar igenom källrepon sida för sida, jämför med kompatibiliteten för Marketplace-actions och tar fram konfigurationer för webhooks, branch-skydd och pipelines. Gör INTE någon skanning efter secrets i historiken (det är gitleaks uppgift, som körs lokalt enligt sidan ovan)
- Säkerhet och leveranskedja: gitleaks-hooken som den här sidan handlar om