Skip to main content

Ako si vytvoriť čistý klon triedneho repozitára

KNIFE – Knowledge In Friendly Examples Séria: Systemic Thinking in IT & Digital Fabrication Úroveň: Beginner Tagy: git tutorial onboarding template beginner

⚡ Rýchly návod (Top)​

Postav sa v termináli do priečinka, v ktorom má vzniknúť tvoj nový projekt (napr. ~/Skola/STHDF/) — nie do priečinka, ktorý ešte len vznikne. Klon si <moj-priecinok> vytvorí sám ako podpriečinok:

git clone --depth 1 <URL-sablony> <moj-priecinok>
cd <moj-priecinok>
rm -rf .git
git init
git add -A
git commit -m "Initial commit"

Výsledok: <moj-priecinok>/ je nový, samostatný git repozitár s jedným commitom — celý obsah šablóny, žiadna jej história.

S reálnymi hodnotami (šablóna je skutočná, priečinok je vymyslený príklad podľa konvencie z krok 2 nižšie):

git clone --depth 1 https://github.com/06-STH-Projects/2026_sthdf_class_template.git ST-099-Priklad
cd ST-099-Priklad
rm -rf .git
git init
git add -A
git commit -m "Initial commit"

🎯 Čo rieši (účel, cieľ)​

Keď niekto dostane príkaz "sprav si klon tohto repozitára", najprirodzenejšia reakcia je git clone <url>. Problém: to neprenesie len obsah, ale celú históriu zdrojového repozitára — každý commit, každú správu, každého autora, ktorý kedy na šablóne pracoval.

Pri jednorazovom template repozitári to spôsobí tri reálne problémy:

  1. Cudzia história v tvojom repozitári. git log ukazuje commity niekoho iného, nie tvoju prácu — orientácia aj git blame sú od začiatku znečistené.
  2. Skrytý vzťah k pôvodnému repu. Klon si ponecháva origin smerujúci na šablónu — ľahko sa stane, že niekto omylom pushne (alebo sa pokúsi pushnúť) do cudzieho repozitára namiesto vlastného.
  3. Bez štandardu si to každý vyrieši inak — alebo skopíruje zlý postup od niekoho iného. Presne to je dôvod, prečo je toto KNIFE, nie len jednorazová poznámka: raz zapísaný postup sa dá odovzdať ďalej — od učiteľa študentom, aj neskôr medzi študentami navzájom.

🧩 Ako to rieši (princíp)​

Tri kroky, každý s jasným dôvodom:

  1. git clone --depth 1 — stiahne len aktuálny stav súborov, nie celú históriu (rýchlejšie, menej dát, ale história sa aj tak preberie do .git/).
  2. rm -rf .git — odstráni prevzatý .git adresár úplne. Týmto zmizne história aj prepojenie na origin šablóny.
  3. git init + git add -A + git commit — založí úplne novú, prázdnu históriu s jediným commitom: "toto je môj štart".

🧪 Ako to použiť (aplikácia)​

Krok za krokom:

  1. Over si URL šablóny, ktorú ti dal učiteľ/tím lead.

  2. Zvoľ si názov priečinka podľa dohodnutej konvencie — v predmete STHDF napr. ST-042-MojeMeno (individuálna práca) alebo PRJ-017-NazovProjektu (tímový projekt). Konvencia sa neskôr znova použije pri publikovaní výstupov, takže sa jej drž od začiatku.

  3. Spusti tri príkazy z Rýchleho návodu vyššie.

  4. Založ si prázdny repozitár na GitHube (bez README, bez .gitignore — tie už máš z klonu) a pripoj ho:

    git remote add origin <URL-tvojho-noveho-repozitara>
    git branch -M main
    git push -u origin main
  5. Over si, že git remote -v ukazuje TVOJ repozitár, nie šablónu.

Žiadny "školský server" neexistuje. Vlastný repozitár z kroku 4 je obyčajný osobný GitHub účet — nič viac netreba zakladať ani nikde sa registrovať. Ak GitHub účet ešte nemáš, založ si ho na github.com/join (zadarmo).

  1. Neskôr, keď je výstup hotový — nemusíš robiť nič so samotným triednym repozitárom. Tvoj repozitár z krokov 1–5 je úplne nezávislý a taký aj zostáva. Do triedneho dashboardu (students/ST0XX/) ho premieta vyučujúci — tvoja jediná úloha je mať pridelené číslo ST0XX (roster) a zdieľať odkaz na svoj hotový repozitár tam, kde ti povie vyučujúci. Prenos do triedneho repa je jeho proces, nie tvoj.

Konkrétny príklad z praxe: presne týmto postupom vznikol štart repozitára pre nový ročník predmetu — 2026_sthdf_class_template → klon → class_sthdf_2026-2027, s jedným "Initial commit" namiesto prevzatej histórie desiatok predchádzajúcich iterácií šablóny.

📜 Detailný článok​

Prečo nie obyčajný git clone? Bez --depth 1 a bez následného vyčistenia .git/ zdedíš všetko — vrátane vecí, ktoré v šablóne nemuseli byť určené na verejné šírenie (staré poznámky, rozpracované commity, mená predchádzajúcich autorov). Pri jednorazovom štarte nového projektu to nemá žiadnu hodnotu, len šum a riziko.

Prečo nie degit alebo iný špecializovaný nástroj? Existujú nástroje (napr. npx degit), ktoré robia presne toto v jednom príkaze. Zámerne tu ale ide o postup len s holým gitom — funguje všade, kde je git nainštalovaný, bez závislosti na Node.js/npm alebo inom runtime. Pre skupinu, kde nie každý má rovnaké vývojové prostredie, je to spoľahlivejší spoločný menovateľ.

Prečo rm -rf .git a nie napr. git checkout --orphan? --orphan vytvorí novú vetvu bez rodičov, ale pôvodné commity zostávajú v repozitári dosiahnuteľné (kým ich git gc nezmaže) a origin zostáva nastavený na šablónu. rm -rf .git + git init je jednoznačnejšie: po tomto kroku v priečinku neexistuje žiadna stopa po pôvodnom repozitári.

💡 Tipy a poznámky​

  • Priečinok už existuje? git clone odmietne klonovať do neprázdneho priečinka — over si názov vopred, alebo klonuj do dočasného mena a premenuj.
  • Zabudol si rm -rf .git? Spoznáš to podľa toho, že git log ukazuje cudzie commity. Over si to hneď po klone (git log --oneline by mal ukázať len históriu šablóny, kým git init ešte nespravíš).
  • git push zlyhá s "Permission denied"? Skontroluj git remote -v — ak stále ukazuje na šablónu namiesto tvojho repozitára, .git sa nevymazal správne.
  • Windows: postup funguje rovnako v Git Bash; rm -rf .git vo PowerShell nahraď Remove-Item -Recurse -Force .git.

✅ Hodnota / Zhrnutie​

Tri príkazy namiesto opakovaného vysvetľovania naživo — a hlavne jeden zapísaný, opakovateľný postup namiesto toho, aby si ho každý študent (alebo každý nový ročník) objavoval nanovo, prípadne prevzal nesprávnu verziu od spolužiaka. Funguje pre ľubovoľný template repozitár, nielen pre STHDF — je to všeobecný vzor onboardingu do nového projektu.

Zdroje​

Vzniknuté priamo z prípravy 2026_sthdf_class_template pre ročník STHDF 2026-2027 (repozitár 06-STH-Projects/2026_sthdf_class_template, skript tools/clone-student-template.sh) — zapísané ako samostatné KNIFE, aby bol postup prenositeľný aj mimo tohto jedného predmetu.

⬅ KNIFES – Prehľad • Zoznam • Detaily