PHP Manual
/
Erfaring fra praksis

Ændring af ejerskab af commit i Git

08. 03. 2022

Når vi migrerer repositorier mellem organisationer, sker det ofte, at vi har brug for at overskrive commit-ejere. Årsagen til dette kan være overførsel af kommits fra en konto til en anden, f.eks. på grund af en ændring i brugerens e-mailadresse.

Jeg havde f.eks. brug for at overføre alle kommits fra min gamle mailkonto på List til min anden Gmail-konto. Det andet tilfælde, hvor jeg kan anmode om en sådan ændring, er, når jeg ved et uheld laver en commit under en privat e-mail, men en bestemt virksomhed ønsker at lave commits under deres domæne.

Heldigvis findes der en kommando til at løse dette problem, som jeg bare kan kalde i projektmasteren for at overskrive hele historikken:

git filter-branch --env-filter "
if [ \"\$GIT_COMMITTER_EMAIL\" = \"janbarasek@seznam.cz\" ]
then
export GIT_COMMITTER_NAME=\"Jan Barášek\"
export GIT_COMMITTER_EMAIL=\"janbarasek@gmail.com\"
fi
if [ \"\$GIT_AUTHOR_EMAIL\" = \"janbarasek@seznam.cz\" ]
then
export GIT_AUTHOR_NAME=\"Jan Barášek\"
export GIT_AUTHOR_EMAIL=\"janbarasek@gmail.com\"
fi
" $@ --tag-name-filter cat -- --branches --tags

Efter at kommandoen er udført, skal ændringerne flushes til master med kommandoen git push -f.

Varsling:

Når kommandoen er udført, overskrives hele commit-historikken, og hashes ændres. Dette er et BC-brud, som kun bør forekomme sjældent. Hvis du begår en fejl, når du overskriver commits, kan historikken ikke gendannes. Samtidig skal du slette eller overskrive alle grene, ellers vil der være en konflikt om alle ændrede commits, som vil blive dobbeltskrevet (det oprindelige og det nye commit), når de bliver løst.

Jan Barášek   Více o autorovi

Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.

Rád vám pomůžu:

Související články

1.
5.
Status:
All systems normal.
2024