Push och committerregeln
En commits author och committer är text som den som gör commiten skriver in i sin git-konfiguration: vem som helst kan skriva in vem som helsts namn och adress där. Det fremforge vet säkert är vem som pushade: det konto vars HTTPS-token, OAuth-token eller SSH-nyckel öppnade anslutningen. Två saker bygger på det:
- Tillskrivning av pushern. Varje push till ett repo i din organisation registreras med det kontot, oavsett vad regeln nedan är inställd på.
- Committer-regeln. Den kan kräva att varje commit som är ny i repot har en committer-adress som tillhör den som pushar den.
Registret över vem som pushade
fremforge registrerar varje ref-uppdatering i en push:
- pushern: det konto som autentiserade;
- hur de autentiserade: HTTPS (en personlig åtkomsttoken eller OAuth-token från Git Credential Manager), en SSH-nyckel, en deploy-nyckel med dess nyckel-id, eller en jobbtoken i Actions;
- ref:en, och dess gamla och nya commit;
- i ett repo vars committer-regel är i läget varna eller blockera, de commits som var nya i repot;
- committer-regelns beslut.
Registreringen kommer från Forgejos egen autentisering, aldrig från något som klienten skickar. Commits som fremforge själv gör registreras inte: merges, merge-kön och ändringar i webbredigeraren.
Du hittar det i konsolen under Säkerhet › Push-skydd › Push och committerregeln. Sidan visar de senaste pusharna och en sökfunktion som hittar den push som förde in en viss commit. Med API:t:
# Recent pushes, or those to one repository
curl -H "Authorization: Bearer $TOKEN" \
"https://frem.sh/_app/api/v1/orgs/acme/push-protection/push-records?repository=web"
# Which push brought this commit?
curl -H "Authorization: Bearer $TOKEN" \
"https://frem.sh/_app/api/v1/orgs/acme/push-protection/push-records?commit=<full commit id>"Sökningen hittar en commit bland de första 500 nya commits i varje ref-uppdatering, i repon vars committer-regel var i läget varna eller blockera när den pushades. När regeln är avstängd registreras en push med sina refs och sin pusher men inte sina commits, så att registreringen aldrig gör en push långsammare. Varje push finns också i granskningsloggen som git.push, med deploy-nyckelns id för en push med deploy-nyckel.
Committer-regeln
Regeln är Committer måste matcha pusher. Varje commit som är ny i repot måste ha en committer-adress som antingen är:
- en av pusherns bekräftade e-postadresser på frem.sh (Inställningar › Konto). En adress som lagts till men aldrig bekräftats räknas inte;
- eller pusherns no-reply-adress,
<login>@noreply.frem.sh, som bara det kontot kan använda.
| Läge | Vad som händer |
|---|---|
| Av (standard för en organisation som skapades före 2026-10-27) | Pushar registreras; inget kontrolleras. |
| Varna (standard för en organisation som skapades 2026-10-27 eller senare) | Pushen accepteras, och pushern får veta vilka commits som inte matchar. |
| Blockera | Pushen avvisas tills varje ny commit matchar. |
En organisation som skapats 2026-10-27 eller senare börjar i läget Varna: ingen push avvisas någonsin, och en pusher vars commit har en adress som personen inte har bekräftat får veta det. En ägare kan stänga av regeln, eller välja Blockera, när som helst. Varna gör att en push väntar på kontrollen: uppmätt 2026-10-27, cirka 90 ms i median.
Bara commits som är nya i repot kontrolleras. En commit som redan finns på en annan branch kontrollerades när den först kom in, så om du mergar main in i din branch behöver du inte stå till svars för andras commits.
En avvisad push anger commits och adresser:
remote: fremforge: push refused: the committer of 1 new commit is not one of your verified email addresses.
remote: 3f2a9c1b8e7d someone@example.com
remote: Set user.email to one of them, rewrite these commits (git rebase -i, or git commit --amend --reset-author), and push again.Vad som inte kontrolleras
- Pushar med en jobbtoken i Actions. Ett arbetsflöde pushar som jobbet, inte som en person.
- Plattformsbotar. Det är de konton som fremforge själv kör, till exempel botarna för säkerhetsfixar och Renovate.
- Undantagna användare som du listar i regeln, till exempel ett tjänstekonto som pushar som sig självt.
- Deploy-nycklar. En deploy-nyckel har ingen person och ingen verifierad adress. Dess pushar registreras med nyckel-id:t och kontrolleras inte, om du inte väljer Avvisa pushar med deploy-nyckel i blockeringsläge, som avvisar dem medan regeln är i läget blockera.
- Commits som fremforge gör: merges, merge-kön och ändringar på webben.
Om kontrollen inte kan köras
Om fremforge inte kan köra kontrollen (till exempel om tjänsten som svarar på den inte svarar inom 2 sekunder) accepteras pushen i alla lägen. Den registreras som Inte kontrollerad, och i läget blockera larmas fremforges drifttekniker. Att avvisa varje push när en kontroll inte är tillgänglig skulle stoppa dina teams arbete, så regeln släpper igenom vid fel och missen syns: i push-loggen och för drifttekniker. Leta efter beslutet Inte kontrollerad i push-registret.
Ställa in den
I konsolen anger Säkerhet › Push-skydd › Push och committerregeln organisationens regel. Ett repo kan ha en egen regel, som ersätter organisationens för det repot. Ange den med API:t:
# The organisation's rule
curl -X PUT -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
-d '{"mode": "block", "refuse_deploy_keys": false, "exempt_users": ["acme-release-bot"]}' \
"https://frem.sh/_app/api/v1/orgs/acme/push-protection/committer-rule"
# One repository's own rule, and back to the organisation's
curl -X PUT -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
-d '{"mode": "warn"}' "https://frem.sh/_app/api/v1/orgs/acme/push-protection/committer-rule/repos/legacy-import"
curl -X DELETE -H "Authorization: Bearer $TOKEN" \
"https://frem.sh/_app/api/v1/orgs/acme/push-protection/committer-rule/repos/legacy-import"För att ändra en regel krävs scope policy:write, och varje ändring finns i granskningsloggen som push-protection.committer-rule.updated. En regel som du slår på eller ändrar gäller för pushar inom 60 sekunder.
Innan du slår på blockera
- Kör varna ett tag och läs push-loggen efter rader med Varnad. De visar vem som gör commits med en adress som personen inte har bekräftat.
- Be personerna bekräfta den adress som deras git-konfiguration använder, eller sätta
user.emailtill sin no-reply-adress. - Import av historik (push av ett befintligt projekt med andras commits) misslyckas i läget blockera, eftersom de commits är nya i repot och gjordes av andra. Importera i läget varna, eller undanta den som importerar under importen. Fler än 5000 nya commits i en push avvisas i läget blockera, eftersom regeln kontrollerar högst 5000; pusha historiken i delar.
Jämfört med GitHub
GitHub har samma regel, “Committer must match pusher”, i en begränsad förhandsversion för GitHub Enterprise (2026-10-12). Den registrerar pushern per commit. fremforge registrerar pushern per ref-uppdatering, med de nya commits där regeln är på, och har en sökfunktion per commit.