Version utilisée pour la formation à OCP
This commit is contained in:
parent
232473472a
commit
a8aa04147c
|
@ -1,5 +1,47 @@
|
|||
\begin{frame}
|
||||
\frametitle{}
|
||||
fichier content/outils/scm/git/commandes.tex à éditer
|
||||
% contenu (pas trop long) de la diapositive
|
||||
\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}
|
|
@ -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}
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -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}
|
|
@ -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}
|
|
@ -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}
|
||||
|
|
|
@ -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}
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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}
|
|
@ -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}
|
||||
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -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
|
||||
\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}
|
||||
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{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}
|
||||
|
|
|
@ -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 :
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -1,4 +1,8 @@
|
|||
\begin{frame}
|
||||
\frametitle{}
|
||||
% contenu (pas trop long) de la diapositive
|
||||
\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}
|
|
@ -1,4 +1,115 @@
|
|||
\begin{frame}
|
||||
\frametitle{}
|
||||
% contenu (pas trop long) de la diapositive
|
||||
\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}
|
|
@ -1,4 +1,8 @@
|
|||
\begin{frame}
|
||||
\frametitle{}
|
||||
% contenu (pas trop long) de la diapositive
|
||||
\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}
|
|
@ -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}
|
||||
|
|
|
@ -1,4 +1,11 @@
|
|||
\begin{frame}
|
||||
\frametitle{}
|
||||
% contenu (pas trop long) de la diapositive
|
||||
\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}
|
|
@ -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}
|
||||
\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}
|
||||
|
||||
|
|
|
@ -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}
|
|
@ -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}
|
||||
\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}
|
|
@ -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}
|
|
@ -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}
|
|
@ -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}
|
||||
\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}
|
|
@ -1,5 +1,7 @@
|
|||
\begin{frame}
|
||||
\frametitle{}
|
||||
fichier content/outils/scm/git/web/basicssh.tex à éditer
|
||||
% contenu (pas trop long) de la diapositive
|
||||
\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}
|
|
@ -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}
|
||||
|
|
|
@ -1,5 +1,11 @@
|
|||
\begin{frame}
|
||||
\frametitle{}
|
||||
fichier content/outils/scm/git/web/gitolite.tex à éditer
|
||||
% contenu (pas trop long) de la diapositive
|
||||
\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}
|
|
@ -1,4 +1,10 @@
|
|||
\begin{frame}
|
||||
\frametitle{}
|
||||
% contenu (pas trop long) de la diapositive
|
||||
\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}
|
|
@ -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}
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -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}
|
||||
|
|
Loading…
Reference in New Issue