Version utilisée pour la formation à OCP

This commit is contained in:
Benjamin Bohard 2015-07-20 10:16:18 +02:00
parent 232473472a
commit a8aa04147c
43 changed files with 646 additions and 180 deletions

View File

@ -1,5 +1,47 @@
\begin{frame}
\frametitle{}
fichier content/outils/scm/git/commandes.tex à éditer
% contenu (pas trop long) de la diapositive
\end{frame}
\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}

View File

@ -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}

View File

@ -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

View File

@ -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

View File

@ -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}

View File

@ -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}

View File

@ -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}

View File

@ -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{<c1>..<c2>}] Lister les commit accessibles depuis c2 mais pas c1
\item[\commande{<c1>...<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}

View File

@ -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}

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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}

View File

@ -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}

View File

@ -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}

View File

@ -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@<adresse\_serveur>/formation/<groupe>}
\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://<adresse\_serveur>:3000/formation/<groupe>}
\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}

View File

@ -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 :

View File

@ -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}

View File

@ -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

View File

@ -1,4 +1,8 @@
\begin{frame}
\frametitle{}
% contenu (pas trop long) de la diapositive
\end{frame}
\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}

View File

@ -1,4 +1,115 @@
\begin{frame}
\frametitle{}
% contenu (pas trop long) de la diapositive
\end{frame}
\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 <fichier>..." pour désindexer)
modifié : doc/README
Fichiers non suivis:
(utilisez "git add <fichier>..." 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 <fichier>..." 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 <fichier>..." 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}

View File

@ -1,4 +1,8 @@
\begin{frame}
\frametitle{}
% contenu (pas trop long) de la diapositive
\end{frame}
\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}

View File

@ -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/<nom>}
\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}

View File

@ -1,4 +1,11 @@
\begin{frame}
\frametitle{}
% contenu (pas trop long) de la diapositive
\end{frame}
\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}

View File

@ -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}
\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}

View File

@ -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}
\end{frame}

View File

@ -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}
\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}

View File

@ -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}
\end{frame}

View File

@ -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}
\end{frame}

View File

@ -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}
\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}

View File

@ -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}
\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}

View File

@ -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}

View File

@ -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}
\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}

View File

@ -1,4 +1,10 @@
\begin{frame}
\frametitle{}
% contenu (pas trop long) de la diapositive
\end{frame}
\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}

View File

@ -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}

View File

@ -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}

View File

@ -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}

View File

@ -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}

View File

@ -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}

View File

@ -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}

View File

@ -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}