Vezérlőpult
17. Távoli repó: remote és clone · Távoli tárolók: GitHub

4. témakör · Távoli tárolók: GitHub · 17. fejezet

Távoli repó: remote és clone

Eddig minden a saját gépeden történt. Most összekötjük a helyi repót a GitHubon lévő távoli repóval (remote). Megtanulod, hogyan töltesz le egy teljes projektet a történetével együtt (clone), mi az origin és az origin/main, és hogyan teszel fel egy meglévő helyi projektet egy új GitHub-repóba, parancssorból és a GitHub Desktopból is.

CLI + Desktop + WebKlónozás lépésről lépésreBesorolóSzimulátor15 kvízkérdés

Tanulási célok

1Helyi és távoli repó

A Git elosztott verziókezelő (1. fejezet): nincs egyetlen „főgép”, minden résztvevő gépén a teljes repó ott van, a teljes történettel. A GitHubon lévő repó műszakilag ugyanilyen példány, csak megállapodás szerint ez a közös találkozási pont.

💻 Anna gépehelyi repó: munkakönyvtár + .git
⇅push / pull
🐙 GitHubtávoli repó (remote): csak a .git tartalma, munkakönyvtár nélkül
⇅push / pull
💻 Péter gépehelyi repó: munkakönyvtár + .git

2Mi a remote, és mi az origin?

A remote egy távoli repó becenévvel ellátott címe. Így nem kell minden parancsba a teljes URL-t írni. Klónozáskor a Git automatikusan felveszi a forrást origin néven. Ez csak egy szokásos név, nincs benne semmi különleges.

PS> git remote -v
origin  https://github.com/anna-kovacs/weboldal.git (fetch)
origin  https://github.com/anna-kovacs/weboldal.git (push)

Egy repónak több remote-ja is lehet: például egy forkolt projektnél az origin a saját másolatod, az upstream pedig az eredeti (22. fejezet).

3Klónozás: git clone

PS> cd ~\projektek
PS> git clone https://github.com/toth-peter/hazibuli.git
Cloning into 'hazibuli'...
remote: Enumerating objects: 12, done.
…
PS> cd hazibuli                  # a klón egy új mappába kerül: lépj bele!
PS> git clone https://github.com/toth-peter/hazibuli.git buli-projekt   # saját mappanévvel
git cloneDownload ZIP
Történeta teljes történet, minden ág és címkecsak a legfrissebb állapot fájljai
.git mappavan: rögtön Git-repónincs: sima mappa
Kapcsolat a GitHubbalbe van állítva (origin), pull és push azonnal megynincs
Mire jó?ha dolgozni akarsz rajtaha csak meg akarod nézni vagy használni

clone, ZIP, pull vagy remote add?

Melyik a helyes lépés a helyzetben?

1 / 8Pontszám: 0
…

4Mi történik klónozáskor?

Lépkedj végig a git clone belső lépésein, és figyeld, mi jön létre a gépeden!

git clone https://github.com/toth-peter/hazibuli.git


      

5Távoli követő ágak: origin/main

Klónozás után a git log --oneline --all ilyesmit mutat:

b77d818 (HEAD -> main, origin/main, origin/HEAD) feat: meghívó
533b90a Buli oldal
PS> git branch -a
* main
  remotes/origin/HEAD -> origin/main
  remotes/origin/fotok
  remotes/origin/main
PS> git switch fotok
branch 'fotok' set up to track 'origin/fotok'.
Switched to a new branch 'fotok'

A klón csak az alapértelmezett ágból készít helyi ágat. A többi ágra a git switch fotok elég: ha nincs ilyen helyi ág, de van origin/fotok, a Git létrehozza a követő helyi ágat.

6Meglévő projekt feltöltése a GitHubra

Ha a projekt a gépeden kezdődött (git init, 5. fejezet), és most tennéd fel a GitHubra:

  1. A GitHubon New repository (4. fejezet). Ha feltöltenéd a meglévő munkát, ne pipáld be az Add a README file, a .gitignore és a licenc lehetőséget: a repó maradjon üres.
  2. Az üres repó oldala meg is mutatja a parancsokat (…or push an existing repository from the command line):
PS> git remote add origin https://github.com/anna-kovacs/receptek.git
PS> git branch -M main               # az ág neve legyen main (ha master volt)
PS> git push -u origin main          # feltöltés + követés beállítása (18. fejezet)
⚠️ A README-CSAPDA

Ha a GitHubon README-vel hoztad létre a repót, ott már van egy commit (Initial commit), amelynek semmi köze a gépeden lévő történethez. A push elutasítódik (rejected … fetch first). Megoldás: töltsd le és fésüld össze a két független történetet: git pull origin main --allow-unrelated-histories, majd git push -u origin main. Legközelebb hozd létre üresen a repót!

7A remote-ok kezelése

ParancsMit csinál?
git remote · git remote -va remote-ok nevei · nevek és címek
git remote add origin <url>új remote felvétele
git remote set-url origin <url>a cím cseréje (pl. HTTPS → SSH, vagy átnevezett repó)
git remote rename origin githubátnevezés (a követő ágak neve is változik)
git remote remove origineltávolítás: a GitHubon semmi nem törlődik, csak a helyi kapcsolat
git remote show originrészletek: címek, alapértelmezett ág, követett ágak
ℹ️ HA ÁTNEVEZTED A REPÓT A GITHUBON

A GitHub átirányítja a régi címet, így minden tovább működik. Tisztább azonban frissíteni: git remote set-url origin <új cím>.

8Klónozás és publikálás grafikusan

Desktop GitHub Desktop
  • File → Clone repository… (Ctrl+Shift+O): a GitHub.com fülön a saját repóid listája, az URL fülön bármely cím. A Local path mondja meg, hová kerüljön.
  • Helyi repónál a felső sávban Publish repository: név, leírás, Keep this code private. Ez létrehozza a GitHub-repót, felveszi az origin-t, és feltölt.
  • Repository → Repository settings → Remote: az origin címe.
IDE VS Code
  • Ctrl+Shift+P → Git: Clone → cím vagy Clone from GitHub → mappa kiválasztása → Open.
  • Egy még nem feltöltött projektnél a Source Control panelen: Publish to GitHub (privát vagy nyilvános).
Web GitHub.com
  • A zöld Code gomb: HTTPS / SSH / GitHub CLI cím, Open with GitHub Desktop, Download ZIP.
  • Új, üres repó oldalán a teljes parancssor kimásolható (…create a new repository / …push an existing repository).

9Gyakorlás a szimulátorban

Klónozd le Péter nyilvános hazibuli repóját, nézz körül benne, aztán töltsd fel a saját receptek projektedet egy GitHub-repóba, amelyet (sajnos) README-vel hoztál létre. A cd .. a mappák közötti váltáshoz kell.

PowerShell + Git

Windows PowerShell
Küldetések 0 / 9
    A mostani repó commitgráfja

    10Feladatok

    Gyakorló feladatok

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

    17.1⭐CLI

    Klónozz le egy nyilvános repót (pl. https://github.com/github/gitignore.git), és nézd meg a git remote -v, a git branch -a és a git log --oneline -5 kimenetét.

    17.2⭐Web

    Töltsd le ugyanazt a repót ZIP-ként is, és hasonlítsd össze a két mappát (ls -Force). Mi hiányzik a ZIP-ből, és mi nem működik ezért benne?

    17.3⭐Desktop

    Klónozd le az egyik saját GitHub-repódat a GitHub Desktoppal (File → Clone repository), majd nyisd meg parancssorban is (Repository → Open in …), és futtasd a git status-t.

    17.4⭐⭐CLI

    Egy korábbi, csak helyben létező gyakorló repódat töltsd fel egy új, üres GitHub-repóba a GitHub által javasolt három paranccsal.

    17.5⭐⭐Desktop

    Egy másik helyi repót a GitHub Desktop Publish repository gombjával tegyél fel, privát repóként. Ellenőrizd a GitHubon, majd a gépeden a git remote -v paranccsal.

    17.6⭐⭐CLI

    Nevezd át a GitHubon az egyik repódat (Settings → Repository name). Működik még a git push? Frissítsd a címet a git remote set-url paranccsal.

    17.7⭐⭐⭐CLI

    Szándékosan idézd elő a README-csapdát: hozz létre README-vel egy GitHub-repót, és próbálj bele feltölteni egy helyi repót. Olvasd el a hibaüzeneteket, és oldd meg a --allow-unrelated-histories kapcsolóval. Rajzold le a git log --graph alapján, mi történt.

    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
    helyi repó (local)a repó a saját gépeden, munkakönyvtárral
    távoli repó (remote)a repó egy másik helyen (pl. a GitHubon); a helyi repóban becenévvel hivatkozunk rá
    origina klónozás forrásának szokásos remote-neve
    git cloneegy távoli repó teljes letöltése (történettel), origin és követő ág beállításával
    távoli követő ág (remote-tracking branch)pl. origin/main: helyi jegyzet arról, hol állt a távoli ág a legutóbbi kapcsolatkor
    követés (upstream)a helyi ág és a távoli ág párosítása (main ↔ origin/main); ettől működik paraméter nélkül a pull és a push
    git remote add / set-url / rename / removeremote felvétele · cím cseréje · átnevezés · eltávolítás
    elosztott verziókezelésminden klón a teljes történetet tartalmazza; nincs egyetlen nélkülözhetetlen központ
    --allow-unrelated-historieskét, közös ős nélküli történet összefésülésének engedélyezése
    Publish repository (Desktop)helyi repó feltöltése egy újonnan létrehozott GitHub-repóba

    13Összegzés

    1. A Git elosztott: minden klón a teljes történetet tartalmazza; a GitHub a közös találkozási pont.
    2. A remote egy távoli repó becenévvel ellátott címe; a klón forrása az origin. git remote -v.
    3. git clone <url>: új mappa, teljes történet, origin, követő main. Projektenként egyszer; utána git pull.
    4. Az origin/main csak a legutóbbi kapcsolatkori állapotot mutatja; a többi ágra git switch <ág> hoz létre követő ágat.
    5. Meglévő projekt: üres GitHub-repó → git remote add origin → git push -u origin main (vagy Desktop: Publish repository).

    A következő fejezetben a mindennapi szinkronizálás jön: push, pull, fetch.