Push og committer-reglen
En commits forfatter og committer er tekst, som den, der committer, skriver i sin git-konfiguration: alle kan skrive hvem som helsts navn og adresse der. Det, fremforge ved med sikkerhed, er hvem der pushede: den konto, hvis HTTPS-token, OAuth-token eller SSH-nøgle åbnede forbindelsen. To ting bygger på det:
- Registrering af pusheren. Hvert push til et repository i din organisation registreres med den konto, uanset hvad reglen nedenfor er sat til.
- Committer-reglen. Den kan kræve, at hver commit, der er ny i repositoriet, har en committer-adresse, der tilhører den person, der pusher den.
Registreringen af, hvem der pushede
fremforge registrerer hver ref-opdatering i et push:
- pusheren: den konto, der godkendte;
- hvordan de godkendte: HTTPS (et personligt adgangstoken eller OAuth-tokenet fra Git Credential Manager), en SSH-nøgle, en deploy-nøgle med dens nøgle-id eller et Actions-jobtoken;
- ref’en og dens gamle og nye commit;
- i et repository, hvor committer-reglen står på advar eller blokér, de commits, der var nye i repositoriet;
- committer-reglens afgørelse.
Registreringen kommer fra Forgejos egen godkendelse, aldrig fra noget, klienten sender. Commits, som fremforge selv laver, registreres ikke: merges, merge-køen og redigeringer i webeditoren.
Du finder den i konsollen under Sikkerhed › Push-beskyttelse › Push og committer-reglen. Siden viser de seneste push og et opslag, der finder det push, som bragte en given commit. Med API’et:
# 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>"Opslaget finder en commit blandt de første 500 nye commits i hver ref-opdatering, i repositorier, hvor committer-reglen stod på advar eller blokér, da den blev pushet. Med reglen slået fra registreres et push med sine refs og sin pusher, men ikke sine commits, så registreringen aldrig gør et push langsommere. Hvert push står også i revisionsloggen som git.push, med deploy-nøglens id for et push med en deploy-nøgle.
Committer-reglen
Reglen er Committer skal matche pusher. Hver commit, der er ny i repositoriet, skal have en committer-adresse, der enten er:
- en af pusherens bekræftede e-mailadresser på frem.sh (Indstillinger › Konto). En adresse, der er tilføjet, men aldrig bekræftet, tæller ikke;
- eller pusherens no-reply-adresse,
<login>@noreply.frem.sh, som kun den konto kan bruge.
| Tilstand | Hvad der sker |
|---|---|
| Fra (standard for en organisation oprettet før 2026-10-27) | Push registreres; intet kontrolleres. |
| Advar (standard for en organisation oprettet 2026-10-27 eller senere) | Pushet accepteres, og pusheren får at vide, hvilke commits der ikke matcher. |
| Blokér | Pushet afvises, indtil hver ny commit matcher. |
En organisation oprettet 2026-10-27 eller senere starter i Advar: intet push afvises nogensinde, og en pusher, hvis commit har en adresse, de ikke har bekræftet, får det at vide. En ejer kan til enhver tid slå den fra eller sætte den til Blokér. Advar får et push til at vente på kontrollen: målt 2026-10-27 omkring 90 ms i medianen.
Kun commits, der er nye i repositoriet, kontrolleres. En commit, der allerede findes på en anden branch, blev kontrolleret, da den først ankom, så når du merger main ind i din branch, skal du ikke stå til ansvar for andres commits.
Et afvist push nævner commits og 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.Hvad der ikke kontrolleres
- Push med et Actions-jobtoken. Et workflow pusher som jobbet, ikke som en person.
- Platform-bots. Det er de konti, fremforge selv kører, som bottene til sikkerhedsrettelser og Renovate.
- Undtagne brugere, som du angiver på reglen, for eksempel en servicekonto, der pusher som sig selv.
- Deploy-nøgler. En deploy-nøgle har ingen person og ingen bekræftet adresse. Dens push registreres med nøgle-id’et og kontrolleres ikke, medmindre du vælger Afvis push med deploy-nøgle i blokeringstilstand, som afviser dem, mens reglen står på blokér.
- Commits, som fremforge laver: merges, merge-køen og redigeringer på nettet.
Hvis kontrollen ikke kan køre
Hvis fremforge ikke kan køre kontrollen (for eksempel fordi den tjeneste, der besvarer den, ikke svarer inden for 2 sekunder), accepteres pushet i alle tilstande. Det registreres som Ikke kontrolleret, og i blokeringstilstand bliver fremforges driftsfolk alarmeret. At afvise hvert push, hver gang en kontrol ikke er tilgængelig, ville stoppe dine teams’ arbejde, så reglen lukker op ved fejl, og det oversete er synligt: i push-loggen og for driftsfolkene. Kig efter afgørelsen Ikke kontrolleret i push-registreringerne.
Sådan sætter du den
I konsollen sætter Sikkerhed › Push-beskyttelse › Push og committer-reglen organisationens regel. Et repository kan have sin egen regel, som erstatter organisationens for det repository. Sæt den med API’et:
# 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"At ændre en regel kræver scopet policy:write, og hver ændring står i revisionsloggen som push-protection.committer-rule.updated. En regel, du slår til eller ændrer, gælder for push inden for 60 sekunder.
Før du slår blokér til
- Kør advar et stykke tid, og læs push-loggen for rækker med Advaret. De viser, hvem der committer med en adresse, de ikke har bekræftet.
- Bed folk om at bekræfte den adresse, deres git-konfiguration bruger, eller sætte
user.emailtil deres no-reply-adresse. - Import af historik (push af et eksisterende projekt med andres commits) mislykkes i blokeringstilstand, fordi de commits er nye i repositoriet og er committet af andre. Importér i advarselstilstand, eller undtag den, der importerer, under importen. Mere end 5000 nye commits i ét push afvises i blokeringstilstand, fordi reglen højst kontrollerer 5000; push historikken i dele.
Sammenlignet med GitHub
GitHub har den samme regel, “Committer must match pusher”, i en begrænset preview for GitHub Enterprise (2026-10-12). Den registrerer pusheren pr. commit. fremforge registrerer pusheren pr. ref-opdatering, med de nye commits, hvor reglen er slået til, og har et opslag efter commit.