Gå til hovedinnhold

Push og committer-regelen

En commits forfatter og committer er tekst som personen som committer, skriver inn i Git-konfigurasjonen sin: hvem som helst kan skrive hvem som helsts navn og adresse der. Det fremforge vet sikkert, er hvem som pushet: kontoen hvis HTTPS-token, OAuth-token eller SSH-nøkkel åpnet tilkoblingen. To ting bygger på det:

  • Tilskriving av den som pusher. Hver push til et repository i organisasjonen din registreres med den kontoen, uansett hva regelen nedenfor er satt til.
  • Committer-regelen. Den kan kreve at hver commit som er ny i repositoryet, har en committer-adresse som tilhører personen som pusher den.

Registreringen av hvem som pushet

fremforge registrerer hver ref-oppdatering i en push:

  • den som pushet: kontoen som autentiserte;
  • hvordan vedkommende autentiserte: HTTPS (et personlig tilgangstoken eller OAuth-tokenet fra Git Credential Manager), en SSH-nøkkel, en deploy-nøkkel med nøkkel-ID-en sin, eller et jobbtoken i Actions;
  • ref-en, og den gamle og nye commiten;
  • i et repository der committer-regelen er i modus advar eller blokker: commitene som var nye i repositoryet;
  • committer-regelens avgjørelse.

Registreringen kommer fra Forgejos egen autentisering, aldri fra noe klienten sender. Commits som fremforge lager selv, registreres ikke: merger, merge-køen og redigeringer i nettredigereren.

Du finner den i konsollen under Sikkerhet › Push-beskyttelse › Pusher og committer-regelen. Siden viser nylige push og et oppslag som finner pushen som brakte en gitt 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>"

Oppslaget finner en commit blant de første 500 nye commitene i hver ref-oppdatering, i repositoryer der committer-regelen var i modus advar eller blokker da den ble pushet. Når regelen er av, registreres en push med ref-ene og den som pushet, men ikke commitene, slik at registreringen aldri gjør en push tregere. Hver push står også i revisjonsloggen som git.push, med deploy-nøkkelens ID for en push med deploy-nøkkel.

Committer-regelen

Regelen er committer email must match pusher. Hver commit som er ny i repositoryet, må ha en committer-adresse som enten er:

  • en av e-postadressene som den som pusher, har bekreftet på frem.sh (Innstillinger › Konto). En adresse som ble lagt til, men aldri bekreftet, teller ikke;
  • eller no-reply-adressen til den som pusher, <login>@noreply.frem.sh, som bare den kontoen kan bruke.
ModusHva som skjer
Av (standard for en organisasjon opprettet før 2026-10-27)Push registreres; ingenting sjekkes.
Advar (standard for en organisasjon opprettet 2026-10-27 eller senere)Pushen godtas, og den som pusher, får beskjed om hvilke commits som ikke stemmer.
BlokkerPushen nektes til alle nye commits stemmer.

En organisasjon opprettet 2026-10-27 eller senere starter i Advar: ingen push nektes noen gang, og den som pusher en commit med en adresse vedkommende ikke har bekreftet, får beskjed om det. En eier kan slå den av, eller sette Blokker, når som helst. Warn gjør at en push venter på sjekken: målt 2026-10-27 var det omtrent 90 ms i medianen.

Bare commits som er nye i repositoryet, sjekkes. En commit som allerede ligger på en annen branch, ble sjekket da den kom første gang, så å merge main inn i branchen din gjør ikke at du må stå til ansvar for andres commits.

En nektet push navngir commitene og adressene:

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.

Hva som ikke sjekkes

  • Push med et jobbtoken i Actions. En workflow pusher som jobben, ikke som en person.
  • Plattformbotter. Dette er kontoene fremforge selv kjører, som bottene for sikkerhetsrettelser og Renovate.
  • Unntatte brukere som du lister i regelen, for eksempel en tjenestekonto som pusher som seg selv.
  • Deploy-nøkler. En deploy-nøkkel har ingen person og ingen bekreftet adresse. Push med den registreres med nøkkel-ID-en og sjekkes ikke, med mindre du velger Avvis pusher med deploy-nøkler i blokkeringsmodus, som nekter dem mens regelen er i blokkeringsmodus.
  • Commits fremforge lager: merger, merge-køen og redigeringer på nett.

Hvis sjekken ikke kan kjøre

Hvis fremforge ikke kan kjøre sjekken (for eksempel fordi tjenesten som svarer på den, ikke svarer innen 2 sekunder), godtas pushen i alle moduser. Den registreres som Ikke sjekket, og i blokkeringsmodus varsles fremforges operatører. Å nekte alle push når en sjekk er utilgjengelig, ville stoppe arbeidet til teamene dine, så regelen åpner ved feil, og bommen er synlig: i push-loggen og for operatørene. Se etter avgjørelsen Ikke sjekket i push-registreringene.

Slik setter du den

I konsollen setter Sikkerhet › Push-beskyttelse › Pusher og committer-regelen organisasjonens regel. Et repository kan ha sin egen regel, som erstatter organisasjonens for det repositoryet. Sett 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"

Å endre en regel krever scope policy:write, og hver endring står i revisjonsloggen som push-protection.committer-rule.updated. En regel du slår på eller endrer, gjelder for push innen 60 sekunder.

Før du slår på blokkering

  • Kjør warn en stund, og les push-loggen etter rader med Advart. De viser hvem som committer med en adresse de ikke har bekreftet.
  • Be folk bekrefte adressen som Git-konfigurasjonen deres bruker, eller sette user.email til no-reply-adressen sin.
  • Import av historikk (push av et eksisterende prosjekt med andres commits) feiler i blokkeringsmodus, fordi disse commitene er nye i repositoryet og ble committet av andre. Importer i advarselsmodus, eller unnta den som importerer, under importen. Mer enn 5000 nye commits i én push nektes i blokkeringsmodus, fordi regelen sjekker høyst 5000; push historikken i deler.

Sammenlignet med GitHub

GitHub har den samme regelen, «Committer must match pusher», i en begrenset forhåndsversjon for GitHub Enterprise (2026-10-12). Den registrerer den som pushet per commit. fremforge registrerer den som pushet per ref-oppdatering, med de nye commitene der regelen er på, og har et oppslag på commit.