{
"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": [
"
"
]
},
{
"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",
"
"
]
},
{
"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",
"
\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\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",
"
\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
}