From 239536cc75883cacdc7b73314e7ea42c68bcb071 Mon Sep 17 00:00:00 2001
From: Philippe Dosch <Philippe.Dosch@loria.fr>
Date: Tue, 4 Nov 2014 01:56:23 +0100
Subject: [PATCH] =?UTF-8?q?Ajoute=20une=204i=C3=A8me=20partie,=20sur=20les?=
 =?UTF-8?q?=20usages=20avanc=C3=A9s?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 advancedgit.tex | 358 ++++++++++++++++++++++++++++++++++++++++++++++++
 gitmore.tex     |  37 +++++
 2 files changed, 395 insertions(+)
 create mode 100644 advancedgit.tex
 create mode 100644 gitmore.tex

diff --git a/advancedgit.tex b/advancedgit.tex
new file mode 100644
index 0000000..56b4379
--- /dev/null
+++ b/advancedgit.tex
@@ -0,0 +1,358 @@
+%======================================================================
+
+\section{Astuces de base}
+
+%======================================================================
+
+\subsection{Outils liés à Git}
+
+%======================================================================
+
+\frame{\frametitle{Outils liés à Git}
+  \begin{itemize}
+  \item
+    \ex{gitk} : un navigateur graphique de dépôt Git (\emph{i.e.}
+    lecture)
+  \item
+    \ex{git gui} : un \emph{front-end} graphique pour dépôt Git
+    (\emph{i.e.} lecture et écriture)
+  \item
+    \ex{gitstats} : un outil de génération de statistiques pour dépôt
+    Git
+  \item
+    \ex{gitg} : un outil (Linux) permettant de naviguer facilement
+    dans l'intégralité des sources des différentes versions d'un dépôt
+  \item
+    \ex{giggle} : encore un outil de consultation, mais offrant des
+    \textbf{vues fichier} (suivi de tous les commits relatifs à
+    \textbf{un} fichier typiquement)
+  \end{itemize}
+}
+
+%======================================================================
+
+\subsection{Autres commandes intéressantes}
+
+%======================================================================
+
+\frame{\frametitle{Autres commandes intéressantes}
+  \begin{itemize}
+  \item
+    \ex{git checkout} : rétablit le projet dans un de ses états
+    antérieurs (commit, branche, tag...)
+  \item
+    \ex{git blame} : affiche l'auteur et la révision de chaque ligne
+    d'un fichier
+  \item
+    \ex{git remote} : gestion des dépôts distants (centraux ou
+    d'autres utilisateurs)
+  \item
+    \ex{git bisect} : permet de localiser par dichotomie un commit
+    ayant introduit un bug
+  \item
+    \ex{git gc} : compacte le dépôt Git (à utiliser de temps en temps
+    pour gagner de la place)
+  \item
+    \ex{git grep} : recherche d'expression régulière uniquement dans
+    les fichiers suivis par Git
+  \end{itemize}
+}
+
+%======================================================================
+
+% http://stackoverflow.com/questions/7229885/gitignore-vs-gitkeep 
+
+\frame{\frametitle{Répertoires vides}
+  \begin{itemize}
+  \item
+    Il arrive dans certains cas que l'on souhaite ajouter un
+    répertoire vide (sans contenu) dans un dépôt
+  \item
+    Problème : Git ne gère que les contenus de fichiers, ce type de
+    répertoire n'a pas de fichier et ne peut donc pas être géré en
+    l'état
+  \item
+    Une convention : définir un fichier vide nommé \ex{.gitkeep} dans
+    le répertoire pour qu'il puisse être pris en compte
+  \end{itemize}
+}
+
+%======================================================================
+
+% Et encore :
+
+%  - Des commandes comme 'git rebase -i' permettent de réécrire une
+%    partie de l'historique interactivement, ce qui peut être très
+%    pratique avant une publication pour supprimer/réécrire/fusionner
+%    des commits qui ne font que des corrections mineures par rapport à
+%    des commits ayant eu lieu juste avant. À proscrire naturellement si
+%    l'historique sur lequel on veut travailler a déjà été publié.
+%    -> très pratique !!
+%  - Si on utilise des 'git pull' de base, effectuant donc des merge et
+%    pas des rebase, générant ainsi beaucoup de message de merge dans
+%    les logs, une commande comme 'git log --no-merges' peut être utile
+
+% parler de git stash !
+
+% parler de vcsh et consorts
+% http://blog.olivierdelort.net/?p=1261
+
+%======================================================================
+
+\section{Commits partiels}
+
+%======================================================================
+
+\frame{\frametitle{Commit partiel de bas-niveau}
+  \begin{itemize}
+  \item
+    En utilisant \ex{git add --edit}
+    \begin{itemize}
+    \item
+      toutes les modifications de tous les fichiers se retrouvent au
+      sein d'un même fichier, ouvert sous l'éditeur
+    \item
+      toutes les lignes de modifications (préfixées par
+      \textcolor{green}{\ex{+}} ou \textcolor{red}{\ex{-}}) seront
+      ajoutées à l'index
+    \item
+      il est possible de supprimer les lignes qu'on ne veut pas
+      indexer avant de sortir de l'éditeur
+    \end{itemize}
+  \end{itemize}
+}
+
+%======================================================================
+
+\frame{\frametitle{Commit partiel de plus haut niveau}
+  \begin{itemize}
+  \item
+    En utilisant \ex{git add -p}
+    \begin{itemize}
+    \item
+      les modifications sont présentées par \emph{hunk} (parties),
+      \emph{i.e.} regroupements de lignes de modifications connexes
+    \item
+      chaque partie est présentée indépendamment des autres et on
+      choisit interactivement
+      \begin{itemize}
+      \item
+        si on l'ajoute à l'index
+      \item
+        si on l'ajoute à l'index ainsi que toutes les autres du même
+        fichier
+      \item
+        si on ne l'ajoute pas en passant à la partie suivante du même
+        fichier
+      \item
+        si on ne l'ajoute pas en passant au fichier suivant
+      \item
+        ...
+      \end{itemize}
+    \end{itemize}
+  \end{itemize}
+}
+
+%======================================================================
+
+\frame{\frametitle{Autres commits partiels}
+  \begin{itemize}
+  \item
+    Les commits partiels sont également définissables
+    \begin{itemize}
+    \item
+      en choisissant « \emph{patch} » alors qu'on était en indexage
+      interactif (\ex{git add -i})
+    \item
+      depuis \ex{git gui}
+    \item
+      en appuyant sur \ex{TAB} en regard du fichier contenant la
+      partie concernée avec \ex{magit} sous Emacs
+    \end{itemize}
+  \end{itemize}
+}
+
+%======================================================================
+
+\section{Le remisage (\texttt{git stash})}
+
+%======================================================================
+
+\frame{\frametitle{Principe}
+  \begin{itemize}
+  \item
+    Top
+  \end{itemize}
+}
+
+%======================================================================
+
+\frame{\frametitle{Commandes de base}
+  \begin{itemize}
+  \item
+    Détail des commandes
+  \end{itemize}
+}
+
+%======================================================================
+
+% À extraire de https://www.youtube.com/watch?v=ypR-rEBCoag
+
+\frame{\frametitle{Le remisage nommé}
+  \begin{itemize}
+  \item
+    
+  \end{itemize}
+}
+
+%======================================================================
+
+\section{Trouver le(s) coupable(s)}
+
+%======================================================================
+
+\frame{\frametitle{Principe}
+  \begin{itemize}
+  \item
+    C'est le domaine d'action de \ex{git blame}
+  \item
+    Chaque ligne est présentée avec ses méta-informations
+  \item
+    Problème : on accède \textbf{juste} aux dernières
+    méta-informations (pas pratique si le code a été réindenté...)
+  \end{itemize}
+}
+
+%======================================================================
+
+\frame{\frametitle{Historique d'une ligne}
+  \begin{itemize}
+  \item
+    
+  \end{itemize}
+}
+
+%======================================================================
+
+\frame{\frametitle{Avec filtrage sur une fonction !}
+  \begin{itemize}
+  \item
+    % Voir la syntaxe \ex{git log -L :fonction:fichier:}
+  \end{itemize}
+}
+
+%======================================================================
+
+\section{\texttt{vcsh}}
+
+%======================================================================
+
+\subsection{Trucs et astuces}
+
+%======================================================================
+
+\frame{\frametitle{Trucs et astuces}
+  \begin{itemize}
+  \item
+    Première propagation d'un dépôt local vers un dépôt central
+    distant\\
+    \ex{git remote add origin \emph{url}}\\
+    \ex{git push -u origin master}
+  \item
+    Indexation partielle de fichiers (pour répartir les modifications
+    d'un fichier sur plusieurs commits)\\
+    \ex{git add -p}
+  \item
+    Suppression de tous les fichiers non suivis et ignorés\\
+    \ex{git clean -fx}
+  \item
+    Suppression d'un fichier de l'index (il ne participera donc pas
+    au prochain commit)\\
+    \ex{git reset HEAD \emph{fichier}}
+  \end{itemize}
+}
+
+%======================================================================
+
+\frame{\frametitle{Trucs et astuces}
+  \begin{itemize}
+  \item
+    Restaurer un seul fichier à partir du dernier commit\\
+    \ex{git checkout HEAD \emph{fichier}}
+  \item
+    Quelles modifications depuis les 15 derniers jours ?\\
+    \ex{git whatchanged --since="2 weeks ago"}
+  \item
+    Changer le commentaire du dernier commit\\
+    \ex{git commit --amend -m "Le nouveau commentaire."}
+  \item
+    Compter le nombre de commits par contributeur\\
+    \ex{git shortlog -sn}
+  \item
+    Créer une archive ZIP de son projet\\
+    \ex{git archive --format=zip HEAD > projet.zip}
+  \end{itemize}
+}
+
+%======================================================================
+
+\subsection{Bonnes pratiques}
+
+%======================================================================
+
+% Extrait de
+% http://www.git-tower.com/learn/ebook/command-line/appendix/best-practices#start 
+
+\frame{\frametitle{Bonnes pratiques}
+  \begin{itemize}
+  \item
+    Ne pas traiter plusieurs choses sans relation dans un commit
+  \item
+    Faire des commits fréquents
+  \item
+    Ne pas faire un commit sur quelque chose de non finalisé
+  \item
+    Tester avant de faire un commit
+  \item
+    Définir de «~bons~» messages de log
+  \item
+    Se mettre d'accord sur un \emph{workflow} lors de développement en
+    équipe
+  \item
+    Utiliser les branches...
+  \end{itemize}
+}
+
+%======================================================================
+
+%\subsection{Liens}
+
+%======================================================================
+
+
+% Ajouter des liens vers des tutoriels, type git zombie ?
+% Genre : https://try.github.io
+
+\frame{\frametitle{Liens}
+  \begin{itemize}
+  \item
+    \emph{Homepage} : \url{http://git-scm.com/}
+  \item
+    \emph{Livre en français} : \url{http://git-scm.com/book/fr}
+  \item
+    \emph{Github} (hébergement de projets) : \url{https://github.com/}
+  \item
+    \emph{Bitbucket} (hébergement de projets) : \url{https://bitbucket.org/}
+  \item
+    \emph{Git interactif} :
+    \url{http://ndpsoftware.com/git-cheatsheet.html}
+  \item
+    \emph{LearnGitBranching} (pour apprendre à gérer des branches)~:
+    \url{http://pcottle.github.io/learnGitBranching/}
+  \item
+    \emph{Gource} (visualisation 3D d'un projet sous forme d'arbre)~:
+    \url{https://github.com/acaudwell/Gource}
+  \end{itemize}
+}
+
+%======================================================================
diff --git a/gitmore.tex b/gitmore.tex
new file mode 100644
index 0000000..258550f
--- /dev/null
+++ b/gitmore.tex
@@ -0,0 +1,37 @@
+\documentclass{IutSlideBeamerNew}
+
+\title{Git}
+\subtitle{Plus loin avec Git}
+\date{5 novembre 2014}
+
+\AtBeginSubsection[]
+{
+%  \beamertemplateshadingbackground{monbleu}{white}
+  \frame<beamer>
+  {
+    \frametitle{Sommaire}
+    \tableofcontents[currentsection,currentsubsection]
+  }
+%  \beamertemplatesolidbackgroundcolor{white}
+}
+
+\usepackage{gitcommon}
+
+\begin{document}
+
+\frame{\titlepage}
+
+%======================================================================
+
+%\frame{\frametitle{Sommaire}\tableofcontents[part=1]}
+\frame{\frametitle{Sommaire}\tableofcontents}
+
+%======================================================================
+
+%\part{En route}
+
+%======================================================================
+
+\include{advancedgit}
+
+\end{document}
-- 
GitLab