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