Kroky nižšie vysvetľujú, ako udržiavať forknутú verziu repozitára v súlade s upstream vetvou. Viem, že to bolo zdokumentované už mnohokrát, ale nejaký čas som s tým mal problémy, kým som nenašiel workflow, ktorý mi vyhovuje najviac – preto som ho zdokumentoval.

Vytvor fork cez UI, naklonuj forknутý repozitár a prejdi do adresára:

git clone --recurse-submodules [email protected]:peterbabic/a-forked-repository.git
cd forked-repository

Pridaj upstream remote, ale len ak ešte nie je nastavený:

git remote add upstream [email protected]:ORIGINAL-ACCOUNT/repository.git

Vráť sa na hlavnú vetvu, ak tam ešte nie si:

git checkout main

Načítaj najnovšie zmeny a pridaj ich do repozitára:

git pull --rebase upstream main

Tento príkaz však môže zlyhať s nasledujúcou chybou:

CONFLICT (add/add): Merge conflict in ...
error: could not apply 11fa9d20...
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 11fa9d20...

To znamená, že existujú lokálne nesynchronizované zmeny, napríklad zavedené cez GitHub GUI. Aby si sa cez ne dostal, najprv prerušь rebase:

git rebase --abort

A potom spusti rebase znovu so zadanou stratégiou:

git pull --rebase -s recursive -X ours upstream main

Tento príkaz nahradí lokálne konfliktné súbory súbormi z upstream bez pýtania, čo môže byť potenciálne nebezpečné. Zvyšok je odoslať zmeny späť do origin (forku):

git push --force-with-lease origin main

Opakuj posledné tri príkazy na udržiavanie forku aktuálneho.

Tip: Písanie --rebase sa dá vynechať pomocou tohto nastavenia:

git config --global pull.rebase true

Pre úplnosť, takto by mali vyzerať remoty:

git remote --verbose
origin	    [email protected]:peterbabic/a-forked-repository.git (fetch)
origin	    [email protected]:peterbabic/a-forked-repository.git (push)
upstream    [email protected]:ORIGINAL-ACCOUNT/repository.git (fetch)
upstream    [email protected]:ORIGINAL-ACCOUNT/repository.git (push)

Toto je 40. príspevok série #100daystooffload.

Odkazy #