GitHub: jak udržovat vlastní fork a zároveň přispívat do původního repozitáře rubrika: Programování: Jiné

9 Martin Mystik Jonáš
položil/-a 24.5.2014

Řeším teď jaký je správný postup jak si si udělat vlastní form nějaké knihovny na GitHubu, přidat si do ní nějaké nové features a ty poslat jako pull requesty do původního repozitáře. Všechno je jasné až do bodu, kdy potřebuju do svého forku zahrnout změny z původního repozitáře a přidat další features.

Na netu jsme našel několik různých doporučení, které se ale vzájemně vylučují.

Konkrétní příklad:

Uvažujme, že vezmu repozitář na GitHub their/library a udělám si vlastní fork mine/library.

Nastavím si prostředí:

#> git clone git@github.com:mine/library.git
#> git remote add upstream https://github.com/their/library.git

Přidám si nějakou feature v nové větvi:

#> git checkout -b new-feature
...
#> git commit -m "My new feature"

A tu publikuju na origin:

#> git push -u origin new-feature

Z větve new-feature pak vytvořím pull request pro originální repozitář.

Takhle můžu vytvořit několik features (new-feature-2, new-feature-3, ...) a každou poslat jako pull request.

Ve svém forku chci ale mít větev, které obsahuje všechny moje features, kterou budu používat ve svých projektech.

Všechny features si tedy mergnu do masteru:

#> git checkout master
#> git merge new-feature
#> git merge new-feature-2
#> git merge new-feature-3
#> git push

A teď přijde ta složitá část. V originálním repozitáři mezitím probíhal vývoj, některé moje pull requesty přijali, některé ne. A já teď chci svůj fork aktualizovat, přidat další feature,poslat ji jako pull request a přidat ji do své "produkční" verze v master větvi. Jak to správně udělat?

odkaz Vyřešeno
7 Tomáš Tichý
odpověděl/-a 25.5.2014

Branch pro novou feature musíš vytvořít z masteru upstreamu. Pokud bys ji vytvořil z vlastního mastera, logicky se promítnou v pull requestu všechny commity, které na cílové větvi ještě nejsou, to znamená všechny všechny branche, které nebyly začleněny.

Asi nejjednodušší postup:

git fetch upstream
git checkout upstream/master
git checkout -b new-feature-x

Aktualizace a merge nové větve do masteru by neměl být problém:

git checkout master
git pull upstream master
git merge new-feature-x

Komentáře

  • OndrejMirtes : Druhý a třetí řádek první ukázky jde spojit do jednoho příkazu: git checkout upstream/master -b new-feature-x 25.5.2014
  • Martin Mystik Jonáš : Ok tohle vypadá rozumně. Když chci aktualizovat feature branches podle změn v master upstream tak udělám jen rebase na upstream/master, správně? Jak ale řešit, pokud chci svůj master aktualizovat podle master v upstream? Je v tomhle případě doporučovaný merge nebo rebase? Logicky bych čekal, že lepší bude rebase, ale když jsme s tím experimentoval tak rebase trochu zlobil (především zlobilo, pokud některá feature branch byla do upstreamu přijatá). 25.5.2014

Pro plný přístup na Devel.cz se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.