diff --git a/content/outils/scm/git/commandes.tex b/content/outils/scm/git/commandes.tex index 71300d0..762a027 100644 --- a/content/outils/scm/git/commandes.tex +++ b/content/outils/scm/git/commandes.tex @@ -1,5 +1,47 @@ \begin{frame} - \frametitle{} - fichier content/outils/scm/git/commandes.tex à éditer - % contenu (pas trop long) de la diapositive -\end{frame} \ No newline at end of file + \frametitle{Commandes git} + \framesubtitle{Récapitulatif} + \tiny{ + \begin{columns} + \begin{column}{.3\textwidth} + Faire le point : + \begin{itemize} + \item status + \item ls-files + \item diff + \item log + \item grep + \item cherry + \item show + \item bisect + \item blame + \end{itemize} + \end{column} + \begin{column}{.3\textwidth} + Modifier le contenu : + \begin{itemize} + \item checkout + \item pull + \item fetch + \item merge + \item rebase + \item add + \item reset + \item clean + \item commit + \item cherry-pick + \item revert + \item push + \item filter-branch + \end{itemize} + \end{column} + \begin{column}{.3\textwidth} + Organiser le développement : + \begin{itemize} + \item branch + \item tag + \end{itemize} + \end{column} + \end{columns} + } +\end{frame} diff --git a/content/outils/scm/git/commandes/bisect.tex b/content/outils/scm/git/commandes/bisect.tex new file mode 100644 index 0000000..59bf1e4 --- /dev/null +++ b/content/outils/scm/git/commandes/bisect.tex @@ -0,0 +1,7 @@ +\begin{frame} + \frametitle{Commandes git} + \framesubtitle{bisect} + \begin{description} + \item[\commande{git bisect start}] Démarrer une session de recherche du commit problématique par division binaire + \end{description} +\end{frame} diff --git a/content/outils/scm/git/commandes/cherry-pick.tex b/content/outils/scm/git/commandes/cherry-pick.tex index 441e0e4..566455b 100644 --- a/content/outils/scm/git/commandes/cherry-pick.tex +++ b/content/outils/scm/git/commandes/cherry-pick.tex @@ -4,7 +4,6 @@ \begin{description} \item[\commande{git cherry-pick}] Appliquer les changements introduits dans un commit donné \end{description} - \skbinput[from=fig]{apps/git_commande_cherry-pick} \begin{exampleblock}{Options à retenir} \begin{description} \item[\commande{--abort}] Interrompre le processus diff --git a/content/outils/scm/git/commandes/clean.tex b/content/outils/scm/git/commandes/clean.tex index 457d96f..40d2c0c 100644 --- a/content/outils/scm/git/commandes/clean.tex +++ b/content/outils/scm/git/commandes/clean.tex @@ -4,7 +4,6 @@ \begin{description} \item[\commande{git clean}] Supprime les fichiers non suivis du répertoire de travail \end{description} - \skbinput[from=fig]{apps/git_commande_clean} \begin{exampleblock}{Options à retenir} \begin{description} \item[\commande{-xdf}] Combinaison pour supprimer du répertoire de travail les dossiers et fichiers non suivis diff --git a/content/outils/scm/git/commandes/diff.tex b/content/outils/scm/git/commandes/diff.tex index 938b8cb..34259b0 100644 --- a/content/outils/scm/git/commandes/diff.tex +++ b/content/outils/scm/git/commandes/diff.tex @@ -2,7 +2,7 @@ \frametitle{Commandes git} \framesubtitle{diff} \begin{description} - \item[\commande{git diff}] Afficher la différence entre deux états (entre le répertoire de travail ou l'index et la branche ou entre + \item[\commande{git diff}] Afficher la différence entre deux états (entre le répertoire de travail ou l'index et la branche par exemple) \end{description} % contenu (pas trop long) de la diapositive \end{frame} diff --git a/content/outils/scm/git/commandes/filter-branch.tex b/content/outils/scm/git/commandes/filter-branch.tex new file mode 100644 index 0000000..da33536 --- /dev/null +++ b/content/outils/scm/git/commandes/filter-branch.tex @@ -0,0 +1,13 @@ +\begin{frame} + \frametitle{Commandes git} + \framesubtitle{filter-branch} + \begin{description} + \item[\commande{git filter-branch}] Exécuter une commande sur un ensemble de commit + \end{description} + \begin{exampleblock}{Options à retenir} + \begin{description} + \item[\commande{--tree-filter}] Modifier le contenu de l'arborescence pour chaque version du projet + \item[\commande{--env-filter}] Modifier la teneur des variables d'environnement pour chaque commit + \end{description} + \end{exampleblock} +\end{frame} diff --git a/content/outils/scm/git/commandes/grep.tex b/content/outils/scm/git/commandes/grep.tex new file mode 100644 index 0000000..7bc0deb --- /dev/null +++ b/content/outils/scm/git/commandes/grep.tex @@ -0,0 +1,14 @@ +\begin{frame} + \frametitle{Commandes git} + \framesubtitle{grep} + \begin{description} + \item[\commande{git grep}] Rechercher dans chaque fichier d'un arbre quelconque + \end{description} + \begin{exampleblock}{Options à retenir} + \begin{description} + \item[\commande{--break}] Sépare les résultats pour une meilleure lisibilité + \item[\commande{--heading}] Donne le contexte du résultat + \end{description} + \end{exampleblock} + % contenu (pas trop long) de la diapositive +\end{frame} diff --git a/content/outils/scm/git/commandes/log.tex b/content/outils/scm/git/commandes/log.tex index 638ce29..a7e22bd 100644 --- a/content/outils/scm/git/commandes/log.tex +++ b/content/outils/scm/git/commandes/log.tex @@ -2,7 +2,14 @@ \frametitle{Commandes git} \framesubtitle{log} \begin{description} - \item[\commande{git log}] Afficher une liste de commits + \item[\commande{git log}] Afficher une liste de commit \end{description} - % contenu (pas trop long) de la diapositive + \begin{exampleblock}{Options à retenir} + \begin{description} + \item[\commande{-L}] Retracer l'historique d'un morceau de code + \item[\commande{..}] Lister les commit accessibles depuis c2 mais pas c1 + \item[\commande{...<2>}] Lister les commit accessibles depuis l'un ou l'autre mais pas des deux à la fois + \item[\commande{--not Ref}] Lister les commit qui ne sont pas accessibles depuis Ref + \end{description} + \end{exampleblock} \end{frame} diff --git a/content/outils/scm/git/commandes/ls-files.tex b/content/outils/scm/git/commandes/ls-files.tex new file mode 100644 index 0000000..508b752 --- /dev/null +++ b/content/outils/scm/git/commandes/ls-files.tex @@ -0,0 +1,7 @@ +\begin{frame} + \frametitle{Commandes git} + \framesubtitle{ls-files} + \begin{description} + \item[\commande{git ls-files}] Afficher les informations sur les fichiers de l'index et du répertoire de travail. + \end{description} +\end{frame} diff --git a/content/outils/scm/git/commandes/merge.tex b/content/outils/scm/git/commandes/merge.tex index e1e8bbc..411d0ee 100644 --- a/content/outils/scm/git/commandes/merge.tex +++ b/content/outils/scm/git/commandes/merge.tex @@ -2,9 +2,9 @@ \frametitle{Commandes git} \framesubtitle{merge} \begin{description} - \item[\commande{git merge}] Intégrer les commits d'une branche à une autre + \item[\commande{git merge}] Intégrer les commit d'une branche à une autre \end{description} - \skbinput[from=fig]{apps/git_commande_merge} + %\skbinput[from=fig]{apps/git_commande_merge} \begin{exampleblock}{Options à retenir} \begin{description} \item[\commande{--abort}] Pour faire machine arrière lors d'un merge manuel diff --git a/content/outils/scm/git/commandes/pull.tex b/content/outils/scm/git/commandes/pull.tex index cdddbbf..68bf458 100644 --- a/content/outils/scm/git/commandes/pull.tex +++ b/content/outils/scm/git/commandes/pull.tex @@ -7,7 +7,7 @@ \skbinput[from=fig]{apps/git_commande_pull} \begin{exampleblock}{Options à retenir} \begin{description} - \item[\commande{--rebase}] Choisir la stratégie rebase pour incorporer les changements (équivalent à la succession des commandes \commande{fetch} et \commande{rebase} + \item[\commande{--rebase}] Choisir la stratégie rebase pour incorporer les changements (équivalent à la succession des commandes \commande{fetch} et \commande{rebase}) \end{description} \end{exampleblock} % contenu (pas trop long) de la diapositive diff --git a/content/outils/scm/git/commandes/rebase.tex b/content/outils/scm/git/commandes/rebase.tex index 319a223..d6190f4 100644 --- a/content/outils/scm/git/commandes/rebase.tex +++ b/content/outils/scm/git/commandes/rebase.tex @@ -4,7 +4,7 @@ \begin{description} \item[\commande{git rebase}] Rejouer les modifications après mise à jour de la branche \end{description} - \skbinput[from=fig]{apps/git_commande_rebase} + %\skbinput[from=fig]{apps/git_commande_rebase} \begin{exampleblock}{Options à retenir} \begin{description} \item[\commande{-i}] Réordonner les modifications manuellement diff --git a/content/outils/scm/git/commandes/reset.tex b/content/outils/scm/git/commandes/reset.tex index 8e0e711..5cb42d7 100644 --- a/content/outils/scm/git/commandes/reset.tex +++ b/content/outils/scm/git/commandes/reset.tex @@ -4,7 +4,7 @@ \begin{description} \item[\commande{git reset}] Revenir à une version antérieure \end{description} - \skbinput[from=fig]{apps/git_commande_reset} + %\skbinput[from=fig]{apps/git_commande_reset} \begin{exampleblock}{Options à retenir} \begin{description} \item[\commande{--hard}] Écraser le contenu du répertoire de travail et de l'index diff --git a/content/outils/scm/git/commandes/revert.tex b/content/outils/scm/git/commandes/revert.tex index 5ddee92..4aad399 100644 --- a/content/outils/scm/git/commandes/revert.tex +++ b/content/outils/scm/git/commandes/revert.tex @@ -4,7 +4,7 @@ \begin{description} \item[\commande{git revert}] Créer le commit annulant un autre commit \end{description} - \skbinput[from=fig]{apps/git_commande_revert} + %\skbinput[from=fig]{apps/git_commande_revert} \begin{exampleblock}{Options à retenir} \begin{description} \item[\commande{--abort}] Interrompre le traitement diff --git a/content/outils/scm/git/etats_fichier.tex b/content/outils/scm/git/etats_fichier.tex new file mode 100644 index 0000000..da0fc55 --- /dev/null +++ b/content/outils/scm/git/etats_fichier.tex @@ -0,0 +1,12 @@ +\begin{frame} +\frametitle{Les trois états des fichiers} +\begin{itemize} +\item non-suivi (avec la variante ignoré) +\item suivi : +\begin{itemize} + \item non modifié (par rapport au dernier état archivé) + \item modifié (par rapport au dernier état archivé) + \item sélectionné pour être archivé +\end{itemize} +\end{itemize} +\end{frame} diff --git a/content/outils/scm/git/exercices/exercice_01/steps.tex b/content/outils/scm/git/exercices/exercice_01/steps.tex index 2561c76..730c502 100644 --- a/content/outils/scm/git/exercices/exercice_01/steps.tex +++ b/content/outils/scm/git/exercices/exercice_01/steps.tex @@ -7,7 +7,7 @@ \end{itemize} \begin{exampleblock}{En cas d'oubli} \commande{git} émet un avertissement lors du premier commit si ces variables ne sont pas renseignées. - Il est possible de corriger cet oubli facilement si les commits n'ont pas encore été partagés. + Il est possible de corriger cet oubli facilement si les commit n'ont pas encore été partagés. \end{exampleblock} \end{frame} diff --git a/content/outils/scm/git/exercices/exercice_02.tex b/content/outils/scm/git/exercices/exercice_02.tex index 0b40f7b..58fcb8e 100644 --- a/content/outils/scm/git/exercices/exercice_02.tex +++ b/content/outils/scm/git/exercices/exercice_02.tex @@ -10,4 +10,5 @@ \end{itemize} \item un répertoire local doit être converti en dépôt git ; \end{itemize} + L'exercice propose la création d'un dépôt suivant ces différents contextes. \end{frame} diff --git a/content/outils/scm/git/exercices/exercice_02/steps.tex b/content/outils/scm/git/exercices/exercice_02/steps.tex index 5b85c4d..72d5a7a 100644 --- a/content/outils/scm/git/exercices/exercice_02/steps.tex +++ b/content/outils/scm/git/exercices/exercice_02/steps.tex @@ -1,21 +1,21 @@ \begin{frame} \frametitle{Initialiser le dépôt} \framesubtitle{Récupérer le dépôt git distant en ssh} - % contenu (pas trop long) de la diapositive + Le serveur de dépôt de test propose un dépôt par groupe. + + \commande{git clone ssh://gogs@/formation/} \end{frame} \begin{frame} \frametitle{Initialiser le dépôt} \framesubtitle{Récupérer le dépôt git distant en https} - % contenu (pas trop long) de la diapositive + L'accès au serveur est aussi permis en http(s) + + \commande{git clone http://:3000/formation/} \end{frame} -\begin{frame} - \frametitle{Initialiser le dépôt} - \framesubtitle{Récupérer le dépôt CVS distant} - % contenu (pas trop long) de la diapositive -\end{frame} - \begin{frame} \frametitle{Initialiser le dépôt} \framesubtitle{Convertir le dossier local en dépôt git} - % contenu (pas trop long) de la diapositive + N'importe quelle répertoire peut être converti en dépôt git. + + \commande{git init} \end{frame} diff --git a/content/outils/scm/git/exercices/exercice_03/steps.tex b/content/outils/scm/git/exercices/exercice_03/steps.tex index f13fec2..64b2b66 100644 --- a/content/outils/scm/git/exercices/exercice_03/steps.tex +++ b/content/outils/scm/git/exercices/exercice_03/steps.tex @@ -5,8 +5,8 @@ Exemples : \begin{itemize} - \item \commande{git remote add formation ssh://gogs@localhost/bbohard.git} - \item \commande{git remote add formation https://gogs@localhost/bbohard.git} + \item \commande{git remote add formation ssh://gogs@localhost:3000/formation/exercices.git} + \item \commande{git remote add formation http://gogs@localhost:3000/formation/exercices.git} \end{itemize} \begin{exampleblock}{Vérification} Les dépôts distants configurés peuvent être listés avec : diff --git a/content/outils/scm/git/exercices/exercice_04.tex b/content/outils/scm/git/exercices/exercice_04.tex index 394fdb1..8e15875 100644 --- a/content/outils/scm/git/exercices/exercice_04.tex +++ b/content/outils/scm/git/exercices/exercice_04.tex @@ -1,7 +1,7 @@ \begin{frame} \frametitle{Exercice} \framesubtitle{Premier commit} - Le premier commit est toujours le plus facile. Pas de conflit à attendre, pas stress… + Le premier commit est toujours le plus facile. Pas de conflit à attendre, pas de stress… - Cet exercice permet de décortiquer le fonctionnement des \emph{arbres} de git avec l'ajout d'un simple fichier dans un dossier. + Cet exercice permet de revoir le fonctionnement des \emph{arbres} de git avec l'ajout d'un simple fichier dans un dossier. \end{frame} diff --git a/content/outils/scm/git/exercices/exercice_04/steps.tex b/content/outils/scm/git/exercices/exercice_04/steps.tex index 0911a8b..0ed1537 100644 --- a/content/outils/scm/git/exercices/exercice_04/steps.tex +++ b/content/outils/scm/git/exercices/exercice_04/steps.tex @@ -100,7 +100,7 @@ aucune modification ajoutée à la validation mais des fichiers non suivis sont \frametitle{Premier pas} \framesubtitle{Création d'un fichier} \commande{git add .} -\skbinput[from=fig]{apps/git_trees} +\skbinput[from=fig]{apps/git_commande_add} \end{frame} \begin{frame}[fragile] @@ -121,10 +121,15 @@ Modifications qui seront validées : \end{frame} \begin{frame} + \frametitle{Premier pas} + \framesubtitle{Création d'un fichier} \commande{git commit -m "Ajout du premier fichier."} +\skbinput[from=fig]{apps/git_commande_commit} \end{frame} \begin{frame}[fragile] + \frametitle{Premier pas} + \framesubtitle{Création d'un fichier} \commande{git status} \begin{minted}[fontsize=\tiny]{bash} Sur la branche master diff --git a/content/outils/scm/git/exercices/exercice_05.tex b/content/outils/scm/git/exercices/exercice_05.tex index 2f5d5f8..9ae1b9a 100644 --- a/content/outils/scm/git/exercices/exercice_05.tex +++ b/content/outils/scm/git/exercices/exercice_05.tex @@ -1,4 +1,8 @@ \begin{frame} - \frametitle{} - % contenu (pas trop long) de la diapositive -\end{frame} \ No newline at end of file + \frametitle{Exercice} + \framesubtitle{Gérer son répertoire de travail} + Le répertoire de travail est la vue du dépôt la plus facile à prendre en main dans un dépôt git. + + Cet exercice a pour but de bien maîtriser les quatre états des fichiers dans un dépôt git : non-suivi, suivi et identique au contenu de l'index, suivi et différent et enfin, suivi, différent et selectionné pour archivage. + La difficulté majeure, à ce stade, est de toujours contrôler les passages d'état pour ne pas archiver un fichier indésirable par exemple. +\end{frame} diff --git a/content/outils/scm/git/exercices/exercice_05/steps.tex b/content/outils/scm/git/exercices/exercice_05/steps.tex index 2f5d5f8..0052ff0 100644 --- a/content/outils/scm/git/exercices/exercice_05/steps.tex +++ b/content/outils/scm/git/exercices/exercice_05/steps.tex @@ -1,4 +1,115 @@ \begin{frame} - \frametitle{} - % contenu (pas trop long) de la diapositive -\end{frame} \ No newline at end of file + \frametitle{Gérer son répertoire de travail} + \framesubtitle{Créer un fichier} + \commande{echo "userA userApwd" > password} +\end{frame} + +\begin{frame} + \frametitle{Gérer son répertoire de travail} + \framesubtitle{Modifier un fichier} + Ajouter du texte au fichier doc/README +\end{frame} + +\begin{frame}[fragile] + \frametitle{Gérer son répertoire de travail} + \framesubtitle{Admirer la complexité de la situation} + \commande{git status} + \begin{minted}[fontsize=\tiny]{console} +Sur la branche master +Modifications qui seront validées : + (utilisez "git reset HEAD ..." pour désindexer) + + modifié : doc/README + +Fichiers non suivis: + (utilisez "git add ..." pour inclure dans ce qui sera validé) + + password + \end{minted} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Gérer son répertoire de travail} + \framesubtitle{À la croisée des chemins} + Associer les commandes suivantes : + \begin{columns} + \begin{column}{.3\textwidth} + \tiny{\commande{git add .}} + + \tiny{\commande{git commit -m "Tout de go"}} + \end{column} + \begin{column}{.3\textwidth} + \tiny{\commande{git commit -am "Implicite"}} + \end{column} + \begin{column}{.3\textwidth} + \tiny{\commande{git add doc/README}} + + \tiny{\commande{git commit -m "Explicite"}} + \end{column} + \end{columns} +aux résultats suivants : + \begin{columns} + \begin{column}{.3\textwidth} + \begin{minted}[fontsize=\tiny,breaklines,frame=single]{console} +Sur la branche master +Fichiers non suivis: + (utilisez "git add ..." pour inclure dans ce qui sera validé) + + password + +aucune modification ajoutée à la validation mais des fichiers non suivis sont présents (utilisez "git add" pour les suivre) + \end{minted} + \end{column} + \begin{column}{.3\textwidth} + \begin{minted}[fontsize=\tiny,breaklines,frame=single]{console} +Sur la branche master +rien à valider, la copie de travail est propre + \end{minted} + \end{column} + \begin{column}{.3\textwidth} + \begin{minted}[fontsize=\tiny,breaklines,frame=single]{console} +Sur la branche master +Fichiers non suivis: + (utilisez "git add ..." pour inclure dans ce qui sera validé) + + password + +aucune modification ajoutée à la validation mais des fichiers non suivis sont présents (utilisez "git add" pour les suivre) + \end{minted} + \end{column} + \end{columns} +\end{frame} + +\begin{frame} + \frametitle{Gérer son répertoire de travail} + \framesubtitle{Parer les erreurs prévisibles} + \commande{echo "password" > .gitignore} + + \commande{git add .gitignore} + + \commande{git commit -m "Filtre de fichier à ne pas suivre"} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Gérer son répertoire de travail} + \framesubtitle{Laisser sur le côté de la route} + \commande{git status} + \begin{minted}[fontsize=\tiny]{console} +Sur la branche master +rien à valider, la copie de travail est propre + \end{minted} +\end{frame} + +\begin{frame} + \frametitle{Gérer son répertoire de travail} + \framesubtitle{Et s'il est trop tard ?} + \commande{git reset HEAD\~{}1} +\end{frame} + +\begin{frame} + \frametitle{Gérer son répertoire de travail} + \framesubtitle{Recueil de .gitignore} + Des .gitignore adaptés à différents contextes sont faciles à obtenir sur l'Internet. + + \url{https://github.com/github/gitignore} +\end{frame} diff --git a/content/outils/scm/git/exercices/exercice_06.tex b/content/outils/scm/git/exercices/exercice_06.tex index 2f5d5f8..55c0312 100644 --- a/content/outils/scm/git/exercices/exercice_06.tex +++ b/content/outils/scm/git/exercices/exercice_06.tex @@ -1,4 +1,8 @@ \begin{frame} - \frametitle{} - % contenu (pas trop long) de la diapositive -\end{frame} \ No newline at end of file + \frametitle{Exercice} + \framesubtitle{Utiliser les branches} + Les branches sont faciles à créer et détruire dans un dépôt git. + Cela en fait un outil de choix pour l'organisation du développement. + + L'exercice suivant aborde les manipulations de base avec les branches. +\end{frame} diff --git a/content/outils/scm/git/exercices/exercice_06/steps.tex b/content/outils/scm/git/exercices/exercice_06/steps.tex index e2c6349..5cbf1de 100644 --- a/content/outils/scm/git/exercices/exercice_06/steps.tex +++ b/content/outils/scm/git/exercices/exercice_06/steps.tex @@ -1,65 +1,219 @@ \begin{frame} - \frametitle{} - % contenu (pas trop long) de la diapositive - % contenu (pas trop long) de la diapositive + \frametitle{Utiliser les branches} + \framesubtitle{Créer une branche} + On créé une branche qui contiendra le fichier password. + + \commande{git checkout -b branche\_indiscrete} + + équivalent de la succession de commandes : + \begin{enumerate} + \item \commande{git branch branche\_indiscrete} + \item \commande{git checkout branche\_indiscrete} + \end{enumerate} \begin{tikzpicture} - % Commit DAG - \gitDAG[grow right sep = 2em]{ - A -- B -- { - C, - D -- E, - } - }; - % Tag reference - \gittag - [v0p1] % node name - {v0.1} % node text - {above=of A} % node placement - {A} % target - % Remote branch - \gitremotebranch - [origmaster] % node name - {origin/master} % node text - {above=of C} % node placement - {C} % target - % Branch - \gitbranch - {master} % node name and text - {above=of E} % node placement - {E} % target - % HEAD reference - \gitHEAD - {above=of master} % node placement - {master} % target + \gitDAG[grow right sep = 1em]{ + A -- B}; + \gitbranch{master}{above=of B}{B} + \gitHEAD{above=of master}{master} \end{tikzpicture} \begin{tikzpicture} - \gitDAG[grow right sep = 2em]{ - A -- B -- { - C -- D' -- E', - {[nodes=unreachable] D -- E }, - } - }; - % Tag reference - \gittag - [v0p1] % node name - {v0.1} % node text - {above=of A} % node placement - {A} % target - % Remote branch - \gitremotebranch - [origmaster] % node name - {origin/master} % node text - {above=of C} % node placement - {C} % target - % Branch - \gitbranch - {master} % node name and text - {above=of E'} % node placement - {E'} % target - % HEAD reference - \gitHEAD - {above=of master} % node placement - {master} % target - \SAandWT + \gitDAG[grow right sep = 1em]{ + A -- B}; + \gitbranch{master}{above=of B}{B} + \gitHEAD{above=of master}{master} + \gitbranch[brindis]{brancheindiscrete}{below=of B}{B} + \end{tikzpicture} + \begin{tikzpicture} + \gitDAG[grow right sep = 1em]{ + A -- B}; + \gitbranch{master}{above=of B}{B} + \gitbranch[brindis]{brancheindiscrete}{below=of B}{B} + \gitHEAD{below=of brindis}{brindis} \end{tikzpicture} \end{frame} +\begin{frame} + \frametitle{Utiliser les branches} + \frametitle{Aparté} + \commande{git add password} + + \commande{git commit -m "le fichier indésirable"} +\end{frame} +\begin{frame} + \frametitle{Utiliser les branches} + \frametitle{Aparté} + \commande{git log master..branche\_indiscrete} + + \commande{git log master..} + + \commande{git reflog} + +\end{frame} + +\begin{frame} + \frametitle{Utiliser les branches} + \framesubtitle{Merge} + \commande{git checkout master} + + \commande{git branch merge/automatique} + + \commande{git branch merge/conflit} + + \commande{git branch merge/rebase} + % \begin{tikzpicture} + % \gitDAG[grow down sep = 1em]{ + % A -- B}; + % \gitbranch{master}{left=of B}{B} + % \gitHEAD{left=of master}{master} + % \gitbranch[auto]{merge/automatique}{right=of master}{B} + % \gitbranch[conflit]{merge/conflit}{right=of auto}{B} + % \gitbranch[rebase]{merge/rebase}{right=of conflit}{B} + % \end{tikzpicture} +\end{frame} +\begin{frame} + \frametitle{Utiliser les branches} + \framesubtitle{Merge} + \commande{git checkout merge/automatique} + + \commande{cp doc/README\{,.md\}} + + \commande{git add doc/} + + \commande{git commit -m "Copie du fichier"} + % \begin{tikzpicture} + % \gitDAG[grow down sep = 1em]{ + % A -- B --{C}}; + % \gitbranch{master}{right=of B}{B} + % \gitHEAD{left=of auto}{auto} + % \gitbranch[auto]{merge/automatique}{left=of C}{C} + % \gitbranch[conflit]{merge/conflit}{right=of master}{B} + % \gitbranch[rebase]{merge/rebase}{right=of conflit}{B} + % \end{tikzpicture} +\end{frame} +\begin{frame} + \frametitle{Utiliser les branches} + \framesubtitle{Merge} + \commande{git checkout merge/conflit} + + Édition du fichier doc/README + + \commande{git commit -am "Des ennuis en perspective"} + + % \begin{tikzpicture} + % \gitDAG[grow down sep = 1em]{ + % A -- B --{C, D}}; + % \gitbranch{master}{right=of B}{B} + % \gitHEAD{left=of conflit}{conflit} + % \gitbranch[auto]{merge/automatique}{right=of C}{C} + % \gitbranch[conflit]{merge/conflit}{left=of D}{D} + % \gitbranch[rebase]{merge/rebase}{right=of master}{B} + % \end{tikzpicture} +\end{frame} +\begin{frame} + \frametitle{Utiliser les branches} + \framesubtitle{Merge} + \commande{git checkout merge/rebase} + + Édition du fichier doc/README + + \commande{git commit -am "Des ennuis en perspective"} + + % \begin{tikzpicture} + % \gitDAG[grow right sep = 1em]{ + % A -- B --{C, D, E}}; + % \gitbranch{master}{above=of B}{B} + % \gitHEAD{above=of rebase}{rebase} + % \gitbranch[auto]{merge/automatique}{above=of C}{C} + % \gitbranch[conflit]{merge/conflit}{above=of D}{D} + % \gitbranch[rebase]{merge/rebase}{above=of E}{E} + % \end{tikzpicture} +\end{frame} +\begin{frame} + \frametitle{Utiliser les branches} + \framesubtitle{Merge} + + \commande{git checkout master} + + Édition du fichier doc/README pour ajouter des alias + + \commande{git commit -am "Des ennuis en perspective"} + + Pour chaque branche merge/*, tenter la commande : + \commande{git merge merge/} +\end{frame} +\begin{frame} + \frametitle{Utiliser les branches} + \framesubtitle{Rebase} + \commande{git checkout merge/rebase} + + \commande{git rebase master} + % \begin{tikzpicture} + % \gitDAG[grow down sep = 1em]{ + % A -- B --{C, D, E'}}; + % \gitbranch{master}{right=of B}{B} + % \gitHEAD{left=of rebase}{rebase} + % \gitbranch[auto]{merge/automatique}{right=of C}{C} + % \gitbranch[conflit]{merge/conflit}{right=of D}{D} + % \gitbranch[rebase]{merge/rebase}{left=of E'}{E'} + % \end{tikzpicture} + +\end{frame} +% \begin{tikzpicture} +% % Commit DAG +% \gitDAG[grow right sep = 2em]{ +% A -- B -- { +% C, +% D -- E, +% } +% }; +% % Tag reference +% \gittag +% [v0p1] % node name +% {v0.1} % node text +% {above=of A} % node placement +% {A} % target +% % Remote branch +% \gitremotebranch +% [origmaster] % node name +% {origin/master} % node text +% {above=of C} % node placement +% {C} % target +% % Branch +% \gitbranch +% {master} % node name and text +% {above=of E} % node placement +% {E} % target +% % HEAD reference +% \gitHEAD +% {above=of master} % node placement +% {master} % target +% \end{tikzpicture} +% \begin{tikzpicture} +% \gitDAG[grow right sep = 2em]{ +% A -- B -- { +% C -- D' -- E', +% {[nodes=unreachable] D -- E }, +% } +% }; +% % Tag reference +% \gittag +% [v0p1] % node name +% {v0.1} % node text +% {above=of A} % node placement +% {A} % target +% % Remote branch +% \gitremotebranch +% [origmaster] % node name +% {origin/master} % node text +% {above=of C} % node placement +% {C} % target +% % Branch +% \gitbranch +% {master} % node name and text +% {above=of E'} % node placement +% {E'} % target +% % HEAD reference +% \gitHEAD +% {above=of master} % node placement +% {master} % target +% \SAandWT +% \end{tikzpicture} diff --git a/content/outils/scm/git/exercices/exercice_07.tex b/content/outils/scm/git/exercices/exercice_07.tex index 2f5d5f8..5897dc3 100644 --- a/content/outils/scm/git/exercices/exercice_07.tex +++ b/content/outils/scm/git/exercices/exercice_07.tex @@ -1,4 +1,11 @@ \begin{frame} - \frametitle{} - % contenu (pas trop long) de la diapositive -\end{frame} \ No newline at end of file + \frametitle{Exercice} + \framesubtitle{Inspection générale} + Un historique de code n'a d'intérêt que si le besoin de connaître les actions + qui ont mené à un état se fait sentir. + + git met à disposition divers outils pour inspecter l'historique. + Cet exercice se propose de présenter certains de ces outils. + + Cet exercice s'appuie sur le contenu du dépôt git \emph{exercices} fourni. +\end{frame} diff --git a/content/outils/scm/git/exercices/exercice_07/steps.tex b/content/outils/scm/git/exercices/exercice_07/steps.tex index 2f5d5f8..ebbc783 100644 --- a/content/outils/scm/git/exercices/exercice_07/steps.tex +++ b/content/outils/scm/git/exercices/exercice_07/steps.tex @@ -1,4 +1,25 @@ \begin{frame} - \frametitle{} + \frametitle{Inspection} + \framesubtitle{log} + Comparer les branches en explorant les différentes options de git log + + \commande{git log} % contenu (pas trop long) de la diapositive -\end{frame} \ No newline at end of file +\end{frame} +\begin{frame} + \frametitle{Inspection} + \framesubtitle{bisect} + Travail à faire sur la branche branche/minee + + \commande{git bisect} + % contenu (pas trop long) de la diapositive +\end{frame} +\begin{frame} + \frametitle{Inspection} + \framesubtitle{blame} + Travail à faire sur la branche branche/minee + + \commande{git blame} + % contenu (pas trop long) de la diapositive +\end{frame} + diff --git a/content/outils/scm/git/exercices/exercice_08.tex b/content/outils/scm/git/exercices/exercice_08.tex index 2f5d5f8..1e464fc 100644 --- a/content/outils/scm/git/exercices/exercice_08.tex +++ b/content/outils/scm/git/exercices/exercice_08.tex @@ -1,4 +1,8 @@ \begin{frame} - \frametitle{} + \frametitle{Exercice} + \framesubtitle{Travail collaboratif} + En fait de travail collaboratif, chacun peut facilement personnifier l'enfer pour ses collègues. + + L'exercice suivant propose de nettoyer son dépôt personnel avant de le rendre public. % contenu (pas trop long) de la diapositive -\end{frame} \ No newline at end of file +\end{frame} diff --git a/content/outils/scm/git/exercices/exercice_08/steps.tex b/content/outils/scm/git/exercices/exercice_08/steps.tex index 2f5d5f8..6367274 100644 --- a/content/outils/scm/git/exercices/exercice_08/steps.tex +++ b/content/outils/scm/git/exercices/exercice_08/steps.tex @@ -1,4 +1,16 @@ \begin{frame} - \frametitle{} + \frametitle{Travail collaboratif} + \framesubtitle{Nettoyage} + Travail à faire sur la branche histoire/confuse + + \commande{git rebase -i} % contenu (pas trop long) de la diapositive -\end{frame} \ No newline at end of file +\end{frame} +\begin{frame} + \frametitle{Travail collaboratif} + \framesubtitle{Nettoyage} + Travail à faire sur la branche branche/indiscrete + + \commande{git filter-branch} + % contenu (pas trop long) de la diapositive +\end{frame} diff --git a/content/outils/scm/git/exercices/exercice_09.tex b/content/outils/scm/git/exercices/exercice_09.tex index 2f5d5f8..1c569b4 100644 --- a/content/outils/scm/git/exercices/exercice_09.tex +++ b/content/outils/scm/git/exercices/exercice_09.tex @@ -1,4 +1,8 @@ \begin{frame} - \frametitle{} + \frametitle{Travail collaboratif} + \framesubtitle{Partager} + Reprendre les exercices en incluant les commandes push, pull et fetch. + + Côté serveur, tester les hooks. % contenu (pas trop long) de la diapositive -\end{frame} \ No newline at end of file +\end{frame} diff --git a/content/outils/scm/git/exercices/exercice_10.tex b/content/outils/scm/git/exercices/exercice_10.tex index 2f5d5f8..55894db 100644 --- a/content/outils/scm/git/exercices/exercice_10.tex +++ b/content/outils/scm/git/exercices/exercice_10.tex @@ -1,4 +1,9 @@ \begin{frame} - \frametitle{} + \frametitle{Exercice} + \framesubtitle{Intégration dans les processus} + + git est intégré dans divers processus, notamment les processus de packaging. + + Cet exercice donne un aperçu d'une telle intégration dans le cas du packaging debian. % contenu (pas trop long) de la diapositive -\end{frame} \ No newline at end of file +\end{frame} diff --git a/content/outils/scm/git/exercices/exercice_10/steps.tex b/content/outils/scm/git/exercices/exercice_10/steps.tex index 2f5d5f8..52404ee 100644 --- a/content/outils/scm/git/exercices/exercice_10/steps.tex +++ b/content/outils/scm/git/exercices/exercice_10/steps.tex @@ -1,4 +1,35 @@ \begin{frame} - \frametitle{} + \frametitle{Packaging debian} + \framesubtitle{buildpackage} + buildpackage regroupe les outils simplifiant le packaging debian basé sur des sources maintenues en dépôts git. + + \commande{apt-get install git-buildpackage} % contenu (pas trop long) de la diapositive -\end{frame} \ No newline at end of file +\end{frame} +\begin{frame} + \frametitle{Packaging debian} + \framesubtitle{patchs} + gbp-pq est la commande permettant de faire correspondre les commit d'une branche aux patchs d'un paquet. + + Depuis la branche de packaging : + \commande{gbp-pq import} + + Après modification du code et organisation en commit : + \commande{gbp-pq export} + % contenu (pas trop long) de la diapositive +\end{frame} +\begin{frame} + \frametitle{Packaging debian} + \framesubtitle{changelog} + git dch permet d'automatiser l'écriture du changelog en se basant sur les commit. + + \commande{git dch} + % contenu (pas trop long) de la diapositive +\end{frame} +\begin{frame} + \frametitle{Packaging debian} + \framesubtitle{description du paquet} + Finalement, git buildpackage produit les fichiers nécessaires à la construction du paquet : .dsc, archive des sources, etc. + \commande{apt-get install git-buildpackage} + % contenu (pas trop long) de la diapositive +\end{frame} diff --git a/content/outils/scm/git/web/basicssh.tex b/content/outils/scm/git/web/basicssh.tex index c0b15ea..ea6bab8 100644 --- a/content/outils/scm/git/web/basicssh.tex +++ b/content/outils/scm/git/web/basicssh.tex @@ -1,5 +1,7 @@ \begin{frame} - \frametitle{} - fichier content/outils/scm/git/web/basicssh.tex à éditer - % contenu (pas trop long) de la diapositive -\end{frame} \ No newline at end of file + \frametitle{Serveur de dépôts git} + \framesubtitle{Serveur basique ssh} + Ajout des clés des utilisateurs au fichier ~/.ssh/authorized\_keys de l'utilisateur administrant les dépôts. + + Préciser l'utilisation d'un shell restreint, git-shell, pour limiter les droits (\commande{chsh git /usr/bin/git-shell}). +\end{frame} diff --git a/content/outils/scm/git/web/gitlab.tex b/content/outils/scm/git/web/gitlab.tex index 869aaa7..2475f2e 100644 --- a/content/outils/scm/git/web/gitlab.tex +++ b/content/outils/scm/git/web/gitlab.tex @@ -3,7 +3,8 @@ \framesubtitle{GitLab} Application combinant un serveur de dépôts git avec une interface web conviviale. \begin{itemize} - \item Ruby - \item + \item Gestion des utilisateurs + \item Navigation dans les dépôts + \item Gestion des évènements git et web \end{itemize} \end{frame} diff --git a/content/outils/scm/git/web/gitolite.tex b/content/outils/scm/git/web/gitolite.tex index 1be4785..e15331f 100644 --- a/content/outils/scm/git/web/gitolite.tex +++ b/content/outils/scm/git/web/gitolite.tex @@ -1,5 +1,11 @@ \begin{frame} - \frametitle{} - fichier content/outils/scm/git/web/gitolite.tex à éditer - % contenu (pas trop long) de la diapositive -\end{frame} \ No newline at end of file + \frametitle{Serveur de dépôts git} + \framesubtitle{gitolite} + Application de gestion de dépôts git sans interface graphique + \begin{itemize} + \item Gestion des utilisateurs + \item Accès par ssh + \item Gestion fine des droits + \item Gestion sous la forme d'un dépôt git + \end{itemize} +\end{frame} diff --git a/content/outils/scm/git/web/gogs.tex b/content/outils/scm/git/web/gogs.tex index 2f5d5f8..90405d7 100644 --- a/content/outils/scm/git/web/gogs.tex +++ b/content/outils/scm/git/web/gogs.tex @@ -1,4 +1,10 @@ \begin{frame} - \frametitle{} - % contenu (pas trop long) de la diapositive -\end{frame} \ No newline at end of file + \frametitle{Serveur de dépôts git} + \framesubtitle{Gogs} + Application combinant un serveur de dépôts git avec une interface web conviviale. + \begin{itemize} + \item Gestion des utilisateurs + \item Navigation dans les dépôts + \item Gestion des évènements git et web + \end{itemize} +\end{frame} diff --git a/figures/apps/git_commande_cherry-pick.tex b/figures/apps/git_commande_cherry-pick.tex index fdceb66..4325046 100644 --- a/figures/apps/git_commande_cherry-pick.tex +++ b/figures/apps/git_commande_cherry-pick.tex @@ -47,14 +47,5 @@ ++(-5,-10) node[anchor=base,fill=remote2color,shape=rectangle,draw,minimum width=50pt,minimum height=20pt,rounded corners=0.2cm] {} ++(-5,-10) node[anchor=base,fill=remote3color,shape=rectangle,draw,minimum width=50pt,minimum height=20pt,rounded corners=0.2cm] {} ++(-5,-10) node[anchor=base,fill=remote4color,shape=rectangle,draw,minimum width=50pt,minimum height=20pt,rounded corners=0.2cm] {Remote}; -\path[color=black,draw=black,fill=black] - (185,37.5) node[white] {checkout} - (240,37.5) % creux - -- (245,32) - -- (130,32) - -- (125,37.5) - -- (130,43) - -- (245,43) - -- cycle; \end{tikzpicture} diff --git a/figures/apps/git_commande_clean.tex b/figures/apps/git_commande_clean.tex index fdceb66..4325046 100644 --- a/figures/apps/git_commande_clean.tex +++ b/figures/apps/git_commande_clean.tex @@ -47,14 +47,5 @@ ++(-5,-10) node[anchor=base,fill=remote2color,shape=rectangle,draw,minimum width=50pt,minimum height=20pt,rounded corners=0.2cm] {} ++(-5,-10) node[anchor=base,fill=remote3color,shape=rectangle,draw,minimum width=50pt,minimum height=20pt,rounded corners=0.2cm] {} ++(-5,-10) node[anchor=base,fill=remote4color,shape=rectangle,draw,minimum width=50pt,minimum height=20pt,rounded corners=0.2cm] {Remote}; -\path[color=black,draw=black,fill=black] - (185,37.5) node[white] {checkout} - (240,37.5) % creux - -- (245,32) - -- (130,32) - -- (125,37.5) - -- (130,43) - -- (245,43) - -- cycle; \end{tikzpicture} diff --git a/figures/apps/git_commande_commit.tex b/figures/apps/git_commande_commit.tex index fdceb66..44743ca 100644 --- a/figures/apps/git_commande_commit.tex +++ b/figures/apps/git_commande_commit.tex @@ -48,13 +48,14 @@ ++(-5,-10) node[anchor=base,fill=remote3color,shape=rectangle,draw,minimum width=50pt,minimum height=20pt,rounded corners=0.2cm] {} ++(-5,-10) node[anchor=base,fill=remote4color,shape=rectangle,draw,minimum width=50pt,minimum height=20pt,rounded corners=0.2cm] {Remote}; \path[color=black,draw=black,fill=black] - (185,37.5) node[white] {checkout} - (240,37.5) % creux - -- (245,32) - -- (130,32) - -- (125,37.5) - -- (130,43) - -- (245,43) + (215,37.5) node[white] {commit} + ++(30,0) % creux + -- ++(-5,5) + -- ++(-50,0) + -- ++(5,-5) + -- ++(-5,-5) + -- ++(50,0) + -- ++(5,5) -- cycle; \end{tikzpicture} diff --git a/figures/apps/git_commande_fetch.tex b/figures/apps/git_commande_fetch.tex index fdceb66..b0f6116 100644 --- a/figures/apps/git_commande_fetch.tex +++ b/figures/apps/git_commande_fetch.tex @@ -48,13 +48,14 @@ ++(-5,-10) node[anchor=base,fill=remote3color,shape=rectangle,draw,minimum width=50pt,minimum height=20pt,rounded corners=0.2cm] {} ++(-5,-10) node[anchor=base,fill=remote4color,shape=rectangle,draw,minimum width=50pt,minimum height=20pt,rounded corners=0.2cm] {Remote}; \path[color=black,draw=black,fill=black] - (185,37.5) node[white] {checkout} - (240,37.5) % creux - -- (245,32) - -- (130,32) - -- (125,37.5) - -- (130,43) - -- (245,43) + (345,37.5) node[white] {fetch} + ++(-30,0) % creux + -- ++(5,5) + -- ++(50,0) + -- ++(-5,-5) + -- ++(5,-5) + -- ++(-50,0) + -- ++(-5,5) -- cycle; \end{tikzpicture} diff --git a/figures/apps/git_commande_pull.tex b/figures/apps/git_commande_pull.tex index fdceb66..972d0dc 100644 --- a/figures/apps/git_commande_pull.tex +++ b/figures/apps/git_commande_pull.tex @@ -48,13 +48,14 @@ ++(-5,-10) node[anchor=base,fill=remote3color,shape=rectangle,draw,minimum width=50pt,minimum height=20pt,rounded corners=0.2cm] {} ++(-5,-10) node[anchor=base,fill=remote4color,shape=rectangle,draw,minimum width=50pt,minimum height=20pt,rounded corners=0.2cm] {Remote}; \path[color=black,draw=black,fill=black] - (185,37.5) node[white] {checkout} - (240,37.5) % creux - -- (245,32) - -- (130,32) - -- (125,37.5) - -- (130,43) - -- (245,43) + (295,37.5) node[white] {pull} + ++(50,0) % creux + -- ++(5,5) + -- ++(-90,0) + -- ++(-5,-5) + -- ++(5,-5) + -- ++(90,0) + -- ++(-5,5) -- cycle; \end{tikzpicture} diff --git a/figures/apps/git_commande_push.tex b/figures/apps/git_commande_push.tex index fdceb66..4ac366f 100644 --- a/figures/apps/git_commande_push.tex +++ b/figures/apps/git_commande_push.tex @@ -48,13 +48,14 @@ ++(-5,-10) node[anchor=base,fill=remote3color,shape=rectangle,draw,minimum width=50pt,minimum height=20pt,rounded corners=0.2cm] {} ++(-5,-10) node[anchor=base,fill=remote4color,shape=rectangle,draw,minimum width=50pt,minimum height=20pt,rounded corners=0.2cm] {Remote}; \path[color=black,draw=black,fill=black] - (185,37.5) node[white] {checkout} - (240,37.5) % creux - -- (245,32) - -- (130,32) - -- (125,37.5) - -- (130,43) - -- (245,43) + (295,37.5) node[white] {push} + ++(60,0) % creux + -- ++(-5,5) + -- ++(-100,0) + -- ++(5,-5) + -- ++(-5,-5) + -- ++(100,0) + -- ++(5,5) -- cycle; \end{tikzpicture} diff --git a/presentations/outils/git/formation_git.tex b/presentations/outils/git/formation_git.tex index e4ad517..94ac6bf 100644 --- a/presentations/outils/git/formation_git.tex +++ b/presentations/outils/git/formation_git.tex @@ -101,10 +101,11 @@ \section{Qu'attendre d'un SCM ?} \skbinput[from=rep]{outils/scm/definition} \skbinput[from=rep]{outils/scm/fonctionnalites_attendues} -\section{Les atouts de git} +\section{Les caractéristiques de git} \skbinput[from=rep]{outils/scm/git/presentation} \skbinput[from=rep]{outils/scm/git/decentralise} \skbinput[from=rep]{outils/scm/git/stockage} +\skbinput[from=rep]{outils/scm/git/etats_fichier} \section{S'adapter au processus} \skbinput[from=rep]{outils/scm/workflow/branching} \skbinput[from=rep]{outils/scm/workflow/driessen} @@ -139,26 +140,27 @@ \skbinput[from=rep]{outils/scm/git/commandes/clone} \section{Pour faire le point} \skbinput[from=rep]{outils/scm/git/commandes/status} +\skbinput[from=rep]{outils/scm/git/commandes/ls-files} \skbinput[from=rep]{outils/scm/git/commandes/diff} \skbinput[from=rep]{outils/scm/git/commandes/log} +\skbinput[from=rep]{outils/scm/git/commandes/grep} \skbinput[from=rep]{outils/scm/git/commandes/cherry} \skbinput[from=rep]{outils/scm/git/commandes/show} \skbinput[from=rep]{outils/scm/git/commandes/bisect} -\skbinput[from=rep]{outils/scm/git/commandes/ls-files} \skbinput[from=rep]{outils/scm/git/commandes/blame} \section{Pour modifier le contenu du dépôt} \skbinput[from=rep]{outils/scm/git/commandes/checkout} -\skbinput[from=rep]{outils/scm/git/commandes/pull} \skbinput[from=rep]{outils/scm/git/commandes/fetch} +\skbinput[from=rep]{outils/scm/git/commandes/pull} \skbinput[from=rep]{outils/scm/git/commandes/merge} \skbinput[from=rep]{outils/scm/git/commandes/rebase} \skbinput[from=rep]{outils/scm/git/commandes/add} +\skbinput[from=rep]{outils/scm/git/commandes/commit} +\skbinput[from=rep]{outils/scm/git/commandes/push} +\skbinput[from=rep]{outils/scm/git/commandes/cherry-pick} \skbinput[from=rep]{outils/scm/git/commandes/reset} \skbinput[from=rep]{outils/scm/git/commandes/clean} -\skbinput[from=rep]{outils/scm/git/commandes/commit} -\skbinput[from=rep]{outils/scm/git/commandes/cherry-pick} \skbinput[from=rep]{outils/scm/git/commandes/revert} -\skbinput[from=rep]{outils/scm/git/commandes/push} \skbinput[from=rep]{outils/scm/git/commandes/filter-branch} \section{Pour organiser son développement} \skbinput[from=rep]{outils/scm/git/commandes/branch} @@ -181,13 +183,13 @@ \skbinput[from=rep]{outils/scm/git/exercices/exercice_05/steps} \skbinput[from=rep]{outils/scm/git/exercices/exercice_06} \skbinput[from=rep]{outils/scm/git/exercices/exercice_06/steps} -\section{Dépôt commun} \skbinput[from=rep]{outils/scm/git/exercices/exercice_07} \skbinput[from=rep]{outils/scm/git/exercices/exercice_07/steps} +\section{Dépôt commun} \skbinput[from=rep]{outils/scm/git/exercices/exercice_08} \skbinput[from=rep]{outils/scm/git/exercices/exercice_08/steps} \skbinput[from=rep]{outils/scm/git/exercices/exercice_09} -\skbinput[from=rep]{outils/scm/git/exercices/exercice_09/steps} +%\skbinput[from=rep]{outils/scm/git/exercices/exercice_09/steps} \section{Paquet debian} \skbinput[from=rep]{outils/scm/git/exercices/exercice_10} \skbinput[from=rep]{outils/scm/git/exercices/exercice_10/steps}