]> rtime.felk.cvut.cz Git - edu/osp-wiki.git/commitdiff
Update git assignment for this year
authorMichal Sojka <sojkam1@fel.cvut.cz>
Wed, 9 Mar 2011 17:05:15 +0000 (18:05 +0100)
committerMichal Sojka <sojkam1@fel.cvut.cz>
Wed, 9 Mar 2011 17:05:15 +0000 (18:05 +0100)
cviceni/4.mdwn

index bc3bacc7efd0e891ddf25d4ccd9e5bf3fe72963a..70e807984166f4ea905b3452b4684e29b63a19cd 100644 (file)
@@ -8,9 +8,9 @@ Cíl
 Naučit se pracovat verzovacím systémem [Git][git]. Konrétně nás bude
 zajímat:
 
-* Využití Gitu pro distribuovaný vývojový model, který je praktikován
-  mnoha open source projekty.
-* Efektivní prohledávání historie projektu, které je užitečné
+* využití Gitu pro distribuovaný vývojový model, který je praktikován
+  mnoha open source projekty,
+* efektivní prohledávání historie projektu, které je užitečné
   například při rozhodnování jak správně vyřešit určitý konflikt.
 
 [git]:http://git-scm.com/
@@ -20,7 +20,7 @@ zajímat:
 
 Git je velmi univerzální nástroj pro správu a synchronizaci dat
 v souborech. Kromě verzování softwaru ho lidé používají
-k [mnoha dalším činnostem][gitsurvey09-usedfor]. Jedna z často
+k [mnoha dalším činnostem][gitsurvey-usedfor]. Jedna z často
 zmiňovaných nevýhod Gitu je, že oproti jiným verzovacím systémům je
 těžší se ho naučit a používat. Možným důvodem je to, že git nabízí
 větší funkcionalitu než většina ostatních systémů, která se ale
@@ -29,10 +29,10 @@ velkých projektů jako Linuxové jádro. Ať už to tak je, nebo ne, faktem
 je, že Git se neustále vyvíjí a mnoho úsilí je věnováno právě zlepšení
 uživatelské přivětivosti.
 
-[gitsurvey09-usedfor]:http://git.wiki.kernel.org/index.php/GitSurvey2009#07._I_use_Git_for_.28check_all_that_apply.29:
+[gitsurvey-usedfor]:http://www.survs.com/app/12/wo/EO2kVRp9LtOtfmGQs0tl3g/0.0.0.7.7.3.0.1.1.5.6.1.1.9.1
 
 Pro pochopení Gitu je důležité mít základní představu o tom, jak Git
-pracuje s větvemi, jak bylo popsáno v [[přednášce|prednasky/intro-to-git.pdf]]
+pracuje s větvemi, což bylo popsáno v [[přednášce|prednasky/intro-to-git.pdf]]
 na slidech "*Working on branches*" a "*Working with remotes*".
 
 V tomto cvičení budeme opět pracovat s projektem
@@ -42,7 +42,7 @@ pomocí grafických nástrojů.
 
 * Příkaz `gitk` zobrazuje graficky historii a dovoluje její
   interaktivní procházení. Přijímá stejné volby jako `git log`, takže
-  v příkazech níže ho můžete použít i pro vizualizaci výstupu `git
+  v příkazech níže ho můžete použít i pro "vizualizaci" výstupu `git
   log`.
 
 * Příkaz `git gui` je grafický nástroj částečně nahrazující příkazy
@@ -114,7 +114,7 @@ Lokální větve
    Příkaz `git ls-files po m4` vypíše všechny soubory z adresářů *po*
    a *m4*, které jsou spravované gitem a příkazem `git update-index
    --assume-unchanged` pak gitu sdělíme, aby si do indexu poznamenal,
-   že tyto soubory má ignorovat.
+   že má tyto soubory ignorovat.
    
    > *Poznámka:* Možná víte o souborech *.gitignore* (viz `man
    > gitignore`), které slouží k podobnému účelu. Ostatně midnight
@@ -170,21 +170,37 @@ schopnost pracovat s více vzdálenými repozitáři.
    Vidíme, že máme nakonfigurovaný repozitář s názvem *origin* a jeho
    URL.
 
-1. Pokud chceme nějaký [konkrétní vzdálený repozitář][w/osp.git] používat často,
+1. Pokud chceme nějaký vzdálený repozitář používat často,
    vyplatí se ho pojmenovat krátkým jménem (v příkladu níže *osp*),
    abychom nemuseli pořád psát dlouhé URL:
    
-        git remote add osp git://repo.or.cz/midnight-commander/osp.git
+        git remote add osp ssh://git@rtime.felk.cvut.cz/osp/mc
+
+   V tomto repozitáři je uloženo zadání dnešní úlohy. Abyste se k němu
+   dostali, musí server znát váš veřenjný SSH klíč. Jak toho docílit
+   najdete na [[rtime-git-ssh-key|samostatné stránce]]. Přístup k
+   repozitářům na serveru rtime budete potřebovat i v písemce. **Proto
+   vám důrazně doporučujeme zprovoznit přístup už na tomto cvičení,
+   abyste při písemce neztráceli čas.**
        
 2. Nyní můžeme stáhnout obsah právě přidaného repozitáře:
 
         git fetch osp
+
+       remote: Counting objects: 17, done.
+       remote: Compressing objects: 100% (9/9), done.
+       remote: Total 10 (delta 4), reused 7 (delta 1)
+       Unpacking objects: 100% (10/10), done.
+       From ssh://rtime.felk.cvut.cz/osp/mc
+        * [new branch]      master     -> osp/master
+        * [new branch]      only-directories -> osp/only-directories
+
 3. Příkaz nám vypíše, že v repozitáři byly dvě nové větve. Všechny
    větve ze vzdálených repozitářů vypíšeme příkazem
    
         git branch -r
    Zjednodušeně řečeno, jediný rozdíl mezi lokální a vzdálenou větví
-   je v tom, že vzdálená větev má prefix `<remote>/`.
+   je v tom, že jméno vzdálené věteve má prefix `<remote>/`.
 
 4. Nyní nás zajímá co je ve větvích, které jsme právě stáhli:
 
@@ -251,15 +267,14 @@ obou větvích, dojde k tzv. *konfliktu*, který musí být vyřešen ručně.
         git merge osp/only-directories
    Výsledek bude vypadat pravděpodobně takto:
 
-        Renaming doc/mc.1.in => doc/man/mc.1.in
         Auto-merging doc/man/mc.1.in
-        Auto-merging src/find.c
-        CONFLICT (content): Merge conflict in src/find.c
-        Automatic merge failed; fix conflicts and then commit the result.
-   Vidíme, že git správně zjistil, že soubor `doc/mc.1.in` byl
-   v novější verzi přejmenován a provedl sloučení až po přejmenování.
-   Při slučování změn ve `src/find.c` už takové štěstí nemáme a
-   výsledkem je konflikt.
+       Auto-merging src/filemanager/find.c
+       CONFLICT (content): Merge conflict in src/filemanager/find.c
+       Automatic merge failed; fix conflicts and then commit the result. 
+
+   Vidíme, že se automaticky povedlo sloučit změny v souboru
+   `doc/mc.1.in`, ale při slučování změn ve `src/find.c` už takové
+   štěstí nemáme a výsledkem je konflikt.
         
 
 Řešení konfliktů
@@ -278,16 +293,15 @@ V průběhu řešení konfliktu je užitečné používat příkaz `git status`,
 abychom zjistili co je ještě potřeba vyřešit. V našem případě vypadá
 výstup zhruba takhle:
    
-    # On branch merge-assignment
-    # Changes to be committed:
-    #
-    #  modified:   doc/man/mc.1.in
-    #
-    # Unmerged paths:
-    #   (use "git add/rm <file>..." as appropriate to mark resolution)
-    #
-    #  both modified:      src/find.c
-    #
+        # On branch homework
+        # Changes to be committed:
+        #
+        #      modified:   doc/man/mc.1.in
+        #
+        # Unmerged paths:
+        #   (use "git add/rm <file>..." as appropriate to mark resolution)
+        #
+        #      both modified:      src/filemanager/find.c
 
 Konflikt lze řešit následujícími způsoby:
 
@@ -319,7 +333,7 @@ K tomu, aby výsledky vaší práce na open source projektech byly snadno
 dostupné pro ostatní je užitečné založit si vlastní repozitář, odkud
 si budou moct ostatní vaše změny stáhnout.
 
-1. [Zaregistrujte][reg] se na [repo.or.cz][roc]. K repozitáři na
+1. [Zaregistrujte se][reg] na [repo.or.cz][roc]. K repozitáři na
    repo.or.cz se přistupuje protokolem SSH a autorizace se provádí na
    základě veřejných klíčů.
    
@@ -350,8 +364,8 @@ si budou moct ostatní vaše změny stáhnout.
    Můžete založit buď [nový projekt][new] a nebo udělat tzv.
    [fork existujícího projektu][forkmc]. Pro oba typy projektů můžete
    zvolit zda bude repozitář pouze automaticky aktualizovanou kopií
-   jiného repozitáře (*mirror*) a nebo zda-li bude možné do něj přímo
-   ukládat nové commity (*push*).
+   jiného repozitáře (*mirror mode*) a nebo zda-li bude možné do něj přímo
+   ukládat nové commity (*push mode*).
    
    Pro účely tohoto cvičení si
    [založte fork][forkmc] [Midnight commanderu][w/osp.git] v *Push módu*, který se
@@ -373,8 +387,8 @@ si budou moct ostatní vaše změny stáhnout.
 Zadání
 ======
 
-Proveďte sloučení větve `git://repo.or.cz/midnight-commander/osp.git
-only-directories` s aktuální vývojovou větví (`master` z prvního cvičení). Výsledek
+Proveďte sloučení větve `ssh://git@rtime.felk.cvut.cz/osp/mc
+only-directories` s aktuální vývojovou větví `origin/master. Výsledek
 uložte do [vámi vytvořeného repozitáře (forku) na repo.or.cz][forkmc]
 do větve `homework`.