Git Repositories

Renommage et tp en md pour git basic
authorCyrille Pontvieux <jrd@enialis.net>
Mon, 29 Feb 2016 00:23:31 +0000 (01:23 +0100)
committerCyrille Pontvieux <jrd@enialis.net>
Mon, 29 Feb 2016 00:23:31 +0000 (01:23 +0100)
supports/basic/markdown-logo.png [new file with mode: 0644]
supports/basic/slides_git_basic.cfg [moved from supports/basic/git_basic.cfg with 64% similarity]
supports/basic/slides_git_basic.md [moved from supports/basic/git_basic.md with 100% similarity]
supports/basic/tp_git_basic.cfg [new file with mode: 0644]
supports/basic/tp_git_basic.md [new file with mode: 0644]
supports/support_formateur.odt [changed mode: 0755->0644]
supports/viseo/css/base.css
supports/viseo/css/theme.css

diff --git a/supports/basic/markdown-logo.png b/supports/basic/markdown-logo.png
new file mode 100644 (file)
index 0000000..93e729b
Binary files /dev/null and b/supports/basic/markdown-logo.png differ
similarity index 64%
rename from supports/basic/git_basic.cfg
rename to supports/basic/slides_git_basic.cfg
index ffec27e..b5600d7 100644 (file)
@@ -1,6 +1,6 @@
 [landslide]
-source = git_basic.md
-destination = git_basic.html
+source = slides_git_basic.md
+destination = slides_git_basic.html
 theme = ../viseo
 embed = false
 relatives = true
diff --git a/supports/basic/tp_git_basic.cfg b/supports/basic/tp_git_basic.cfg
new file mode 100644 (file)
index 0000000..fe670e7
--- /dev/null
@@ -0,0 +1,8 @@
+[landslide]
+source = tp_git_basic.md
+destination = tp_git_basic.html
+theme = ../viseo
+embed = false
+relatives = true
+extensions = fenced_code,tables,attr_list
+linenos = no
diff --git a/supports/basic/tp_git_basic.md b/supports/basic/tp_git_basic.md
new file mode 100644 (file)
index 0000000..702e4f3
--- /dev/null
@@ -0,0 +1,407 @@
+# TP Git<br>Bases et concepts essentiels
+.fx: first-slide
+
+<a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/deed.fr"><img alt="CC-by-sa" style="display: inline;" src="cc-by-sa-80x15.png" title="La présentation « Git Basic » de Cyrille Pontvieux est mis à disposition selon les termes de la licence Creative Commons Attribution - Partage dans les Mêmes Conditions 4.0 International"/></a>
+
+<a href="mailto:cyrille@enialis.net">Cyrille Pontvieux</a>
+
+<a href="http://www.viseo.com">Viseo</a>
+
+---
+
+# Introduction
+.fx: chapter
+
+---
+
+## Recettes de cuisine en *Markdown*
+.fx: table-full-width
+
+Le but de ce TP va être de gérer des fichiers sources pour les manipuler sous **git**.
+
+Afin de ne pas privilégier un langage de développements, tous les fichiers manipulés vont être des fichiers texte **.md** (format [MarkDown](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet)) permettant la publication de document formatés.
+
+| ![](git.png) | ![](markdown-logo.png) |
+| :---: | :---: |
+
+---
+
+## Mise en place de l'environnement 
+.fx: top
+
+Les composants suivants sont requis :
+
+- git
+- python
+- pip
+
+L'installation de ces composants sont détaillés par plateforme dans le fichier **INSTALL.html**
+
+- Aller dans le répertoire `tp/basic`
+- Installer les dépendances python :  
+`pip install --user -r requirements.txt`  
+(sans le `--user` sous Windows)
+- Ignorer les « erreurs » éventuelles
+
+# Presenter Notes
+Un [Prompt Git](http://www.git-prompt.sh/) est disponible
+
+---
+
+## Initialisation du dépôt
+
+- Créer un répertoire **git_basic** dans votre **home** :  
+`mkdir ~/git_basic`
+- Copier le contenu du répertoire `tp/basic` dans `~/git_basic` :  
+`cp * ~/git_basic/`
+- Se rendre dans ce répertoire :  
+`cd ~/git_basic`
+- Initialiser le dépôt.  
+*La commande git commence par **init** ☺*
+
+# Presenter Notes
+- Sur quelle branche vous trouvez-vous ? 
+- Qu'y a-t-il dans votre dépôt git ?
+- Dans votre workspace ?
+- Dans votre index ?
+
+---
+
+# Manipulation de l'index
+.fx: chapter
+
+---
+
+## Ajouter les fichiers initiaux
+On va **ajouter** les fichiers existants.
+
+- Ajouter l'ensemble des fichiers dans l'index.  
+Utilisez `git add`
+- Afficher le contenu de l'index : `git status`
+- Retirer ce qui ne vous sert pas :  
+le fichier **tarte_aux_poireaux.txt**  
+*Utilisez l'aide de `git status` pour savoir comment faire.*
+- Afficher le contenu du fichier `.gitignore`
+
+# Presenter Notes
+Astuces :
+
+- Dans ce cas-là on peut aussi utiliser `git reset -- <file>`
+- On peut ajouter dans le `.gitignore` les fichiers qu'on ne voudra **jamais** commiter.
+- Questions sur la branche, le dépôt git, l'index et le workspace
+
+---
+
+## Recette de la tarte aux poireaux
+
+- Vider votre index : `git reset`
+- Créer le répertoire `src` dans l'index  
+Que se passe-t-il ? Utiliser `git status`
+- Ajouter le fichier vide `.gitkeep` dans `src`
+- Ajouter le fichier `src/.gitkeep` dans l'index  
+Que se passe-t-il ? Quel est l'intérêt ?
+- Supprimer `src/.gitkeep` de l'index et sur disque
+- Créer `tarte_aux_poireaux.md` dans `src` (juste une ligne titre)
+- Ajouter le fichier dans l'index
+- Constater qu'il n'y a qu'un fichier dans l'index
+- Modifier le fichier `src/tarte_aux_poireaux.md`
+- Relancer `git status`
+
+# Presenter Notes
+- Questions sur la branche, le dépôt git, l'index, le workspace et les fichiers non-suivis
+- Pourquoi `tarte_aux_poireaux.md` est dans l'index et dans les fichiers non-suivis ?
+
+---
+
+## Constater le résultat
+
+- Dans un autre terminal (`maj+ctrl+t` sous Linux), lancer :  
+`./md2html`
+- Ouvrir avec un navigateur Internet le fichier `tarte_aux_poireaux.html` **généré** dans le répertoire `html`.
+- Les modifications successives seront visibles après un raffraichissement (**F5**).
+
+---
+
+# Mes premiers commit<br>Ajouter des recettes !
+.fx: chapter
+
+---
+
+## Le tout premier commit 1/2
+- Le premier commit n'a pas de parent, *c'est triste*.
+- On va faire 2 commits :
+    - un avec les fichiers initiaux du projet
+    - un avec notre nouvelle recette.
+- Enlever tout de l'index
+- Remettre les fichiers initiaux du projet dans l'index (conserver son workspace) sans la `tarte_aux_poireaux` (ni *.txt*, ni *.md*)
+- Créer le fichier `src/.gitkeep`  
+`$ git add .gitignore gfm.css md2html requirements.txt src/.gitkeep`  
+`$ git commit`  
+
+---
+
+## Le tout premier commit 2/2
+- `git commit` ne marche pas :  
+`*** Please tell me who you are`  
+- Suivre les instructions pour configurer git.
+- Recommencer : `git commit`
+- Saisir le message dans l'éditeur
+- À l'enregistrement, on a créé notre premier commit.
+
+# Presenter Notes
+- Questions sur la branche, le dépôt git, l'index, le workspace et les fichiers non-suivis
+
+---
+
+## Le tout deuxième commit
+On va finalement commiter notre recette
+
+- Ajouter le fichier `tarte_aux_poireaux.md` à l'index.
+- Supprimer le fichier `src/.gitkeep` devenu inutile : `git rm`
+- Commiter avec un message expliquant l'ajout de la recette de la tarte aux poireaux
+- Afficher l'arbre avec `gitk`
+- Supprimer le fichier `tarte_aux_poireaux.txt`, on n'en a plus besoin.
+
+# Presenter Notes
+- Questions sur la branche, le dépôt git, l'index, le workspace et les fichiers non-suivis
+
+---
+
+# Pointeurs<br>Branches et étiquettes
+.fx: chapter
+
+---
+
+## Création d'un tag
+- Créer un tag représentant votre premier recueil de recettes :  
+`git tag recettes_v1`
+- Lancer ou rafraichir `gitk`
+- Créer une recette `tarte_a_la_rhubarbe.md`
+- Ajouter ceci dans l'index
+- Committer
+- Lancer ou rafraichir `gitk`
+
+# Presenter Notes
+- Questions sur la branche, le dépôt git, l'index, le workspace et les fichiers non-suivis
+
+---
+
+## Revenir sur le tag
+- Revenir à l'état du tag précédent
+`git checkout recettes_v1`
+- Observer à nouveau `gitk` avec et sans l'option `--all` :
+`gitk`  
+`gitk --all`
+
+# Presenter Notes
+- Questions sur la branche, le dépôt git, l'index, le workspace et les fichiers non-suivis
+- Où est passée la tarte à la rhubarbe ?
+
+---
+
+## Création de branches
+- On va se placer dans le cas ou **2 développeurs** implémentent de *chaque côté* :
+    - les **tartes salées** et  
+    - les **tartes sucrées**  
+à partir de cette version.
+- Former des **binômes** pour la suite
+
+---
+
+## Tartes salées
+- Créer la branche **tartes_salées** à partir d'où vous êtes :  
+`git branch tartes_salées`
+- Sur quelle branche vous trouvez-vous ?
+
+---
+
+## Tartes sucrées
+- Créer une branche `tartes_sucrées` à partir d'où vous êtes **et** placez vous dessus :  
+`git checkout -b tartes_sucrées`
+- Sur quelle branche vous trouvez-vous ?
+- Observer les branches existantes avec :  
+`git branch`
+- Observer à nouveau `gitk` avec et sans l'option `--all`
+- faire une recette de **tarte aux fraises**, une recette de **tarte au chocolat**.
+- faire un *add + commit* par tarte.
+
+# Presenter Notes
+- Sur quelle branche vous trouvez-vous ?
+- De combien de commit la branche a avancé par rapport au tag
+- Est-on sous la branche master ?
+
+---
+
+# Manipulation du **remote**
+.fx: chapter
+
+---
+
+## Ajouter un remote au dépôt existant
+- Lister les *remotes* : `git remote`
+- Constater qu'il n'y a rien
+- Ajouter un remote :  
+`git remote add origin git://<ipformateur>/stagiaire1…10`  
+*prendre le n° donné par le formateur*
+- Lister les *remotes* : `git remote`
+- Constater qu'il y a le remote **origin** et afficher ses détails :  
+`git remote show origin`
+
+---
+
+## Partager ses commits
+- Pousser la branche **actuelle** :  
+`git push`
+- Ça ne fonctionne pas :
+    - pour ceux qui on un **git < 2.0** suivez l'instruction pour **default simple**
+    - suivez ensuite l'instruction pour configurer la branche à pousser sur le remote (**tartes_sucrées**)
+- Recommencer de **pousser** puis lister les **branches locales** puis **distantes** :
+    - `git branch -l`
+    - `git branch -r`
+- Voir la liste complète graphiquement avec :  
+`gitk --all`
+
+---
+
+## Partager le reste
+- Pousser tous les **tags** :  
+`git push --tags`
+- Poussez les **autres branches** :  
+`git checkout <branche>`  
+`git push -u origin <branche>`
+- ou  
+`git push -u --all origin`
+
+---
+
+## Cloner un dépôt.
+
+- `git clone git://<ipformateur>/stagiaireN ~/git_basic2`
+- Remarque : les protocoles les plus courants sont **SSH** et **HTTPS**
+- Aller dans `~/git_basic2` et constater que les **branches** et les **tags** poussés sont bien présents
+- Vous pouvez supprimer ce répertoire, il ne sera **plus utilisé** par la suite
+- L'un des binômes va utiliser le **dépôt de l'autre** désormais. **Synchonisez-vous**
+
+---
+
+# Fusion de branches
+.fx: chapter
+
+---
+
+## Merge
+- L'un des binômes va réaliser la fusion et la pousser (*push*), l'autre la récupére (*pull*)
+- Merger `tartes_sucrées` sur `master`
+    - Se placer sur `master`
+    - Lancer le merge :  
+`git merge tartes_sucrées`
+- Constater le résultat sur `gitk`
+- Que s'est-il passé ?
+
+---
+
+## `push` et `fetch` sur le dépôt
+- La **tarte au chocolat** de la branche `tartes_sucrées` doit être modifiée différemment par les binômes :
+    - binôme 1 : ajouter l'ingrédient **chocolat blanc**
+    - binôme 2 : ajouter l'ingrédient **chocolat noir**
+- Le **binôme 1 pousse**
+- Le **binôme 2 pousse** également mais c'est **refusé** (*non fast-forward*)
+- Le **binôme 2** récupère l'image distante avec `get fetch` puis va fusioner la branche distante :  
+`git merge origin/tartes_sucrées`
+- Des **conflits** sont indiqués, il faut les **résoudre** pour continuer
+
+---
+
+## Résolution de conflits
+- Pour résoudre des conflits, il existe plusieurs outils, ici nous utiliserons **meld** ou **kdiff3**
+- Faire un `git status` pour constater le besoin de résolution
+- Résoudre les conflits en utilisant :  
+`git mergetool`  
+*Garder le chocolat blanc et le noir*
+- **Valider** le merge une fois les conflits résolus :  
+`git commit`
+
+# Presenter Notes
+- résolution avec **kdiff3** sous Windows  
+```
+$ git config --global --edit
+[merge]
+ tool=kdiff3
+[mergetool "kdiff3"]
+ path = c:\Program Files\kdiff3\kdiff3.exe
+ keepBackup = false
+ trustExitCode = false
+```
+- résolution avec **meld** sous Linux et Windows
+
+---
+
+## Nettoyer après conflits
+- Faire un `git status` et voir le fichier `.orig` qui traine
+- Le supprimer avec `git clean` :
+    - `git clean -n` *pour **voir** les fichiers à supprimer*
+    - `git clean -f` *pour **supprimer** les fichiers*
+- Refaire l'opération de modification depuis l'autre poste :  
+    - ajout de **smarties** d'un côté
+    - ajout de **m&ms** de l'autre
+    - **inverser** le binôme qui résout les conflits
+
+---
+
+# git **rebase**
+.fx: chapter
+
+---
+
+## Ne pas avoir peur de git rebase 1/2
+Le `git rebase` est **LA fonctionnalité** de git, avec les branches bien sûr.
+
+- Faire des développement en **//** sur `master` et sur la branche `tarte_salées`
+- Sur la branche `master`
+    - Modifier la **tarte aux poireaux** en ajoutant de la **crème**. ⇒ Commiter
+- Sur la branche `tarte_salées`
+    - Modifier la **tarte aux poireaux** en ajoutant des **œufs**. ⇒ Commiter
+    - Créer une **tarte aux concombres**. ⇒ Commiter
+- Regardez sur `gitk`, on est prêt à **rebaser** les 2 commits qui partent de la branche `tarte_salées`
+
+---
+
+## Ne pas avoir peur de git rebase 2/2
+- Se placer sur `tarte_salées` et la **rebaser** sur `master` :  
+`git rebase master`
+- **⇒ Conflits** sur la **tarte aux poireaux**
+- Regarder la console, git précise ce qu'il faut faire pour résoudre le conflit :
+    - Lancer l'outil de **merge** `git mergetool`
+    - **Continuer** le rebase avec :
+`git rebase --continue`
+- *C'est fait !*
+- Constater avec `gitk --all` que la **base** de la branche `tarte_salées` a été déplacée et que les commits de cette branche ont **tous changé de sha1**
+
+---
+
+# Picorrage
+.fx: chapter
+
+---
+
+## Cherry-pick
+- Créer un commit au mauvais endroit :
+    - Se placer sur le tag à nouveau  
+`git checkout recette_v1`
+    - Créer un branche temporaire `fromage`  
+`git checkout -b fromage`
+    - Créer une **tarte au fromage**, on indexe, on commit
+- Lancer `gitk` : le commit n'est pas sur `master`. **Un seul commit** à déplacer ⇒ `cherry-pick`
+- **Hash** du commit à déplacer : `git log -n 1`
+- Se placer sur `master` et lancer le picorrage :  
+`git cherry-pick <coller le hash>`
+- Lancer `gitk --all`, et voir les **2 commits** de tarte au formage
+
+# Presenter Notes
+- `git rev-parse HEAD` peut aussi être utilisé
+- On peut aussi utiliser le nom de la branche : `fromage`
+
+---
+
+# Bravo !
+.fx: last-slide
old mode 100755 (executable)
new mode 100644 (file)
index d6e3d51..f56911e 100644 (file)
@@ -92,6 +92,10 @@ a {
 ul {
     margin: 0;
 }
+section > p + ul {
+    margin-top: 20px;
+    margin-bottom: auto;
+}
 pre, code, tt {
     font-family: Consolas, 'Bitstream Vera Sans Mono', 'Lucida Console', FreeMono, Courier, monospace;
 }
index 4c2cf60..fe7aed7 100644 (file)
@@ -240,6 +240,15 @@ div.slide.column > div.inner > section > * {
 div.slide.vcenter > div.inner > section > * {
   align-self: center;
 }
+div.slide.top > div.inner > section {
+  justify-content: flex-start;
+}
+div.slide.top > div.inner > section > * {
+  margin-top: 20px;
+}
+div.slide.table-full-width > div.inner > section > table {
+  width: 100%;
+}
 section li {
   padding: 5px 0;
 }