{ "cells": [ { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Matematikai Algoritmusok és Felfedezések II.\n", "\n", "## 4. GitHub \n", "\n", "### 2021 szeptember 30." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "\"Drawing\"" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Verziókövetés \n", "\n", "Egy verziókövető rendszer alatt olyan eszözök összeségét értjük, melyek segítségével fájlok állapotának előzményeit tudjuk tárolni. Tehát egy verziókövető rendszer segítségével bármikor elmentheted a fájlaid aktuális állapotát és a korábbi állapotokat bármikor visszaállíthatod. \n", "\n", "- **Repository:** Egy tároló, ami tartalmazza a munkánk minden korábbi mentett változatát. \n", "- **Working directory:** Ahol éppen dolgozunk ." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Az SVN-ek tipikus műveletei: \n", "\"Drawing\"" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ " - `add`: fájl hozzáadása\n", " - `commit`: változtatás fájlokon, a wroking directory állapotát elmenjük a repositoryba\n", " - `delete`: fájl törlése\n", " \n", " \n", " - `diff`: egy fájl összehasonlítása a repositoryban szereplő verzióval\n", " - `status`: egész repository összehasonlítása a working directoryval\n", " - `log`: eddigi változtatások listája\n", " \n", " \n", " - `checkout`: working directory létrehozás a repository egy megadott verziója alapján \n", " - `update`: a working directory frissítése a repository alapján\n", " - `revert`: a working directory visszaállítása hogy egyező legyen a repository egy megadott állapotával" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Elosztott verziókövetés\n", "\n", "Több repository van, cél, hogy mind ugyanazt tartalmazza. \n", "\n", "Egy lehetőség, hogy van egy központi repository. Ez többféle gondhoz is vezethet.\n", "\n", "A Git nem ezt a modelt követi, hanem minden felhasználó rendelkezik a repository teljes másolatával. Így könnyű offline dolgozni, viszont időnként nehéz összehangolni a repositorykat. \n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Git (még nem Hub)\n", "\n", "Tutorial: https://realpython.com/python-git-github-intro/\n", "\n", "Interaktív vizualizáció: https://learngitbranching.js.org/" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Telepítés" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "\n", "\"Drawing\"\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "\"Drawing\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\"Drawing\"\n", "\n", "Cheatsheet: http://www.ndpsoftware.com/git-cheatsheet.html#loc=workspace;" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Staging area (Index)\n", "\n", "A git esetén létezik egy `staging area`. Ide kerülnek a commit-ra váró dolgok, melyeket végül egyben lehet commitolni. \n", "\n", "Így minden fájlnak háromféle verziója is lehet egyszerre:\n", "\n", "- a merev lemezen lévő\n", "- a staging areaban lévő\n", "- a repositoryban lévő\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Alapvető workflow\n", "\n", "Név beállítás: `git config --global user.name \"your name goes here\"`\n", "\n", "Új repository létrehozása: `git init`. Az adott mappához lesz csatolva.\n", "\n", "\n", "A `git add file_név` a megadott fájlt a staging areaba helyezi. \n", "\n", "A `git commit` pedig a staging area tartalma alapján elmenti a dolgokat a repoba, létrehoz egy új \"commit\"-ot. \n", "\n", "A változtatások mentése hatékonyan van megvalósítva, nem az egész fájl mentődik, hanem a különbség! " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Status és log\n", "\n", "A `git status` megmutatja, hogy éppen mi a külömbség a staging area és a workspace között\n", "\n", "A `git log` a korábbi commit-okat felsorolja." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### .gitignore\n", "\n", "A .gitignore egy szöveges fájl amiben megjelölhetjük, hogy mely fájlokat ne vegye figyelembe a github.\n", "Például:\n", "\n", "```\n", "__pycache__\n", "venv\n", "env\n", ".pytest_cache\n", ".coverage```" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "#### Mit ne adjunk hozzá a repositoryhoz?" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- Generált fájlokat (Túl nagyon és nem hatékony)\n", "- Bizalmas információt. (Néha nem is gondolnál rá!!)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### SHA \n", "\n", "Minden commit után egy hash érték számolódik ki és hozzárendelődik a commithoz. Ezzel az értékkel tudunk hivatkozni a commitokra. \n", "\n", "Elég annyit megadni, amiből már egyértlemű.\n", "\n", "\n", "- Korábbi állapot betöltése: `git checkout sha`" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Branching\n", "\n", "A branchekre úgy gondolhatunk mint egy cimke valamelyik commiton. Ha valamelyik cimkét aktiváljuk, akkor ott tudunk dolgozni. A cimke az új commitokkal együtt vándorol lefelé. Így nagyából a commitok által alkotott fa ágainak is megfelelnek branchek. \n", "\n", "- `git branch newbranch` új branch létrehozása\n", "- `git checkout branchname` Váltás egy adott branchre\n", "\n", "Az alavető branch általában `master` vagy `main`." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "#### HEAD\n", "\n", "A `HEAD` mutatja, hogy épp hová nézünk a fán. Ha egy commitot checkoutolunk egy branch helyett akkor \"deatached HEAD\" állapotba kerülünk. \n", "\n", "\n", "\"Drawing\"\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Hármomféle mód van arra, hogy különböző branchekről commitokat rakjunk át egy másik branchre. \n", "\n", "- `merging` \n", "- `rebasing` \n", "- `cherry-picking` " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Merge\n", "\n", "Egy új commit segítségével kombinálja a két ágat. \n", "\n", "\n", "Fast forward merge: ha az egyik ág a másikon alapszik, csak előreugrik a branch a megfelelő commit-ig.\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" } }, "source": [ "### Rebasing\n", "\n", "A branch kiindulásának megváltoztatás, hogy úgy nézzen ki mintha máshonnan indultál volna. Ez abban segít, hogy lineáris maradjon a history. \n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" } }, "source": [ "### Cherry-picking\n", "\n", "Csak specifikusan megadott commitok végrehajtása az adott branch-en." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## GitHub\n", "\n", "A gitre épülő rendszer, mely a távoli repositoryk fentartására lehet használni.\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "### Dolgozás távoli repositorykal \n", "A fő parancsok:\n", "\n", "- `git clone` Távoli repository alapján új repository\n", "- `git fetch` Távoli repository alapján megfelelő branchek frissítése\n", "- `git pull` Távoli repository alapján megfelelő branchek frissítése majd merge \n", "- `git push` Távoli repository frissítése saját alapján" ] } ], "metadata": { "celltoolbar": "Slideshow", "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.3" } }, "nbformat": 4, "nbformat_minor": 2 }