Vezérlőpult
22. Fork és hozzájárulás · Csapatmunka GitHubon

5. témakör · Csapatmunka GitHubon · 22. fejezet

Fork és hozzájárulás

Eddig olyan repókban dolgoztál, ahová írási jogod volt. De mi van, ha egy társad projektjében, egy iskolai sablonban vagy egy nyílt forráskódú programban találsz hibát? Oda nem tölthetsz fel. Ilyenkor forkolsz: lemásolod a repót a saját fiókodba, ott dolgozol, és pull requesttel javasolod a változást az eredetinek. Ebben a fejezetben végigjárod ezt az utat, és azt is megtanulod, hogyan tartsd szinkronban a forkodat.

CLI + Desktop + WebFork-útvonalBesorolóFork-labor16 kvízkérdés

Tanulási célok

1Mi a fork?

A fork egy repó másolata a saját GitHub-fiókodban. Olyan, mintha a GitHubon belül klónoznád: minden commit, ág és címke átkerül, de a másolat a tiéd, oda szabadon feltölthetsz. A fork kapcsolatban marad az eredetivel: a repó neve alatt ott áll, hogy forked from toth-peter/receptek, és innen nyithatsz pull requestet az eredetibe.

Ág (branch)ForkKlón (clone)
Hol jön létre?ugyanabban a repóbana GitHubon, a te fiókodbana gépeden
Kell írási jog az eredetihez?igennemnem (olvasáshoz)
Mire jó?csapattagok párhuzamos munkájahozzájárulás idegen repóhoz, saját továbbfejlesztéshelyi munka bármelyik repón
Hogyan kerül vissza a munka?PR ugyanabban a repóbanPR a forkból az eredetibegit push (ha van jogod)
ℹ️ FORK VAGY MEGHÍVÁS?

Ha egy csapatban dolgoztok, egyszerűbb, ha a repó gazdája meghív titeket collaborator-nak (Settings → Collaborators): akkor mindenki ágakkal dolgozik ugyanabban a repóban (20. fejezet). A fork akkor kell, ha nincs írási jogod, és nem is kapsz: nyílt forráskódú projekt, más osztály repója, egy tanári sablon.

2A fork-munkafolyamat

Három hely vesz részt benne: az eredeti repó (upstream), a forkod (origin) és a géped. Lépkedj végig!

Fork-útvonal

🐙 toth-peter/receptek
upstream · az eredeti
🍴 anna-kovacs/receptek
origin · a forkod
💻 a géped
~/projektek/receptek
0 / 9


    

3Fork létrehozása és klónozása

  1. Nyisd meg az eredeti repót a GitHubon, és kattints a jobb felső Fork gombra.
  2. A Create a new fork oldalon az Owner a te fiókod, a név maradhat ugyanaz. A Copy the main branch only pipa általában maradjon bent (a többi ágra ritkán van szükség).
  3. Create fork: pár másodperc, és ott a anna-kovacs/receptek, alatta: forked from toth-peter/receptek.
  4. Klónozd a forkodat (nem az eredetit!) a gépedre:
PS> git clone https://github.com/anna-kovacs/receptek.git
Cloning into 'receptek'...
PS> cd receptek
⚠️ A SAJÁT REPÓDAT NEM FORKOLHATOD

A saját repódat nem tudod a saját fiókodba forkolni (már ott van). Ugyanazt a repót egy fiókba csak egyszer lehet forkolni: ha újra megnyomod, a GitHub a meglévő forkodhoz visz.

4origin és upstream

A klónozás után az origin a forkodra mutat. Az eredeti repót neked kell hozzáadni; a szokásos neve upstream:

PS> git remote add upstream https://github.com/toth-peter/receptek.git
PS> git remote -v
origin    https://github.com/anna-kovacs/receptek.git (fetch)
origin    https://github.com/anna-kovacs/receptek.git (push)
upstream  https://github.com/toth-peter/receptek.git (fetch)
upstream  https://github.com/toth-peter/receptek.git (push)
RemoteMire mutat?Mit csinálsz vele?
origina forkod (anna-kovacs/receptek)git push: ide töltöd fel az ágaidat; ide van írási jogod
upstreamaz eredeti (toth-peter/receptek)git fetch upstream: innen hozod le a friss állapotot; ide nem tudsz push-olni

A remote neve csak megállapodás (a Git nem tudja, mi az „upstream”), de ezt a nevet mindenki ismeri, ezért maradj ennél.

origin vagy upstream?

Melyik remote-ról van szó? (Anna forkolta Péter repóját.)

1 / 8Pontszám: 0
…

5Hozzájárulás: PR az eredeti repóba

PS> git switch -c fix/palacsinta        # mindig külön ágon!
# … javítás …
PS> git commit -am "docs: sütési lépés a palacsinta receptben"
PS> git push -u origin fix/palacsinta    # a forkodba

A forkod oldalán megjelenik a Compare & pull request sáv. A PR-oldal ilyenkor két repót hasonlít össze (comparing across forks):

base repository: toth-peter/receptekbase: main head repository: anna-kovacs/receptekcompare: fix/palacsinta

6A fork szinkronban tartása

A forkod nem frissül magától. Ha az eredetibe új commitok érkeznek (például a te PR-od beolvasztása), a forkod lemarad: a GitHub ki is írja, This branch is 2 commits behind toth-peter/receptek:main. Két út van:

A weben: Sync fork

  1. A forkod oldalán: Sync fork → Update branch.
  2. A forkod main-je a GitHubon frissül.
  3. A gépeden: git switch main, git pull.

Parancssorból

PS> git fetch upstream
PS> git switch main
PS> git merge upstream/main   # előretolás
PS> git push origin main      # a fork is frissül
💡 A FORK MAIN-JE AZ EREDETI TÜKRE

A forkod main ágára ne commitolj saját munkát: minden változás külön ágon készüljön. Így a szinkron mindig egyszerű előretolás (fast-forward), soha nincs ütközés. Egy még nyitott PR ágát a friss main-re a 14. fejezet módszerével húzhatod (git merge main vagy git rebase main az ágon).

Merge után a rendrakás a forkban is esedékes: git branch -d fix/palacsinta helyben, és git push origin --delete fix/palacsinta a forkodban (vagy a PR oldalán a Delete branch).

7Hozzájárulási illem

8Fork a Desktopban és a VS Code-ban

Desktop GitHub Desktop
  • Egy fork klónozásakor a Desktop megkérdezi: How are you planning to use this fork?
    • To contribute to the parent project: a Desktop magától beállítja az upstream remote-ot, és a PR-okat az eredeti repóba nyitja.
    • For my own purposes: a fork önálló projektként viselkedik.
  • Szinkron: Branch → Merge into current branch…, és válaszd az upstream/main-t; utána Push origin.
  • A döntést később a Repository → Repository settings → Fork behavior alatt módosíthatod.
IDE VS Code
  • Remote hozzáadása: parancspaletta (Ctrl + Shift + P) → Git: Add Remote… → név: upstream, URL: az eredeti repó címe.
  • Letöltés: Git: Fetch From All Remotes; beolvasztás: Git: Merge Branch… → upstream/main.
  • A GitHub Pull Requests bővítmény fork esetén is az eredeti repóba nyitja a PR-t.

9Fork-labor

Péter nyilvános receptgyűjteményében (toth-peter/receptek) hiányzik a palacsinta sütési lépése. Írási jogod nincs: forkolj, javíts, nyiss PR-t, és utána hozd szinkronba a forkodat!

PowerShell + Git + GitHub

Windows PowerShell
Küldetések 0 / 9
    Az eredeti (upstream)toth-peter/receptek
    A forkod (origin)anna-kovacs/receptek
    A gépeden

    10Feladatok

    Gyakorló feladatok

    ⭐ alap · ⭐⭐ haladó · ⭐⭐⭐ kihívás

    22.1⭐Web

    Forkold egy társad nyilvános gyakorló repóját. Nézd meg a forked from sort, és az eredeti repóban a Fork gomb melletti számlálót.

    22.2⭐CLI

    Klónozd a forkodat, add hozzá az eredetit upstream néven, és ellenőrizd: git remote -v. Hány sort ír ki, és miért?

    22.3⭐⭐CLIWeb

    Javíts egy elírást egy külön ágon, töltsd fel a forkodba, és nyiss PR-t az eredeti repóba. A társad nézze át és olvassza be.

    22.4⭐⭐CLI

    A beolvasztás után szinkronizáld a forkod main-jét parancssorból: git fetch upstream, git merge upstream/main, git push origin main. Ellenőrizd a GitHubon, hogy eltűnt-e a behind jelzés.

    22.5⭐⭐Desktop

    Klónozd a forkodat GitHub Desktoppal, válaszd a To contribute to the parent project lehetőséget, majd nézd meg a Repository settings ablakban, milyen remote-ok lettek beállítva.

    22.6⭐⭐Web

    Használd a Sync fork gombot, majd a gépeden git pull. Írd le, miben más ez, mint a parancssoros szinkron.

    22.7⭐⭐⭐

    Nézd meg egy nagy nyílt forráskódú projekt (pl. a github/docs) CONTRIBUTING.md fájlját. Milyen lépéseket kér egy hozzájárulás előtt? Foglald össze öt pontban.

    11Önellenőrző kvíz

    Ellenőrizd magad!

    Az egyválasztós kérdéseknél kattints a válaszra. A többválasztósaknál jelöld be az összes helyeset, majd nyomd meg az Ellenőrzés gombot.

    12Fogalomtár

    FogalomJelentés
    forkegy repó másolata a saját GitHub-fiókodban, amely kapcsolatban marad az eredetivel
    upstreamaz eredeti repó; a szokásos remote-név, amelyet kézzel adsz hozzá
    originfork esetén a saját forkod (a klónozás hozza létre)
    compare across forksPR, amelynek forrása egy másik repóban (a forkban) van
    maintainer (karbantartó)az eredeti repó írási joggal rendelkező gondozója, aki beolvaszthat
    Sync forka fork ágának frissítése az eredetiből a GitHubon
    collaboratormeghívott csapattag írási joggal; neki nem kell forkolnia
    CONTRIBUTING.md / LICENSEhozzájárulási szabályok / a kód felhasználási feltételei
    good first issuekezdő hozzájárulóknak ajánlott feladat címkéje

    13Összegzés

    1. A fork a repó másolata a saját fiókodban: akkor kell, ha nincs írási jogod az eredetihez.
    2. Fork → a forkod klónozása → git remote add upstream <eredeti URL>; origin = fork (push), upstream = eredeti (fetch).
    3. Munka külön ágon → git push -u origin … → PR a forkból az eredetibe; beolvasztani a karbantartó tud.
    4. Szinkron: Sync fork + git pull, vagy git fetch upstream → git merge upstream/main → git push origin main.
    5. A fork main-jére ne commitolj; olvasd el a CONTRIBUTING.md-t és a LICENSE-t; nagy változás előtt issue.

    A következő fejezetben megnézzük, hogyan szervezi a munkát egy csapat a GitHubon: issues, címkék, mérföldkövek és a Projects tábla.