Commit 127df82e authored by Grégory Mounié's avatar Grégory Mounié
Browse files

compilation with scrartcl and minted

TODO: translation of 2/3 of the document
parent 21c50fd8
\documentclass[a4paper,10pt]{article}
\documentclass[a4paper,10pt]{scrartcl}
\usepackage[frenchb]{babel}
\usepackage[utf8]{inputenc}
......@@ -59,7 +59,7 @@ This document is available here~:\\
\subsection{Git: plumbing}
At the first sight, Git is a complicated beast. It uses roughly 100
At first sight, Git is a complicated beast. It uses roughly 100
commands, some with tenths of options. But Git has a simple data
model. Indeed, it has a classical file hierarchy storing multiple
version of the content and the commands to manipulate these
......@@ -96,7 +96,7 @@ python or Java and an ubiquitous compression format
The code can be directly downlocaded from
\url{http://recherche.noiraudes.net/resources/git/TP/zlibcat.py3})
\inputminted{python}{../../FormaContinue_MeteoNov2017/TPs/zlibcat.py3}
\inputminted{python}{../FormaContinue_MeteoNov2017/TPs/zlibcat.py3}
Do not forget to set its execution right after the edition.
......@@ -136,11 +136,11 @@ dans le répertoire \texttt{refs/}, trouver le fichier contenant le
résumé SHA-1 de la tête et noter sa valeur.
Vérifier que c'est bien le même que le commit que vous venez de faire.
\begin{lstlisting}
git log
\end{lstlisting}
\begin{minted}{console}
$ git log
\end{minted}
\section{Stockage: le répertoire objects}
\section{Storage: the \texttt{objects/} directory}
\subsection{À la main}
......@@ -151,9 +151,9 @@ Dans ce répertoire, se trouve un fichier dont le nom est la suite du SHA-1.
Afficher le contenu du fichier en utilisant \texttt{zlibcat.py3} avec
une commande du genre:
\begin{lstlisting}
./zlibcat.py3 < .git/objects/2d/447e8255ace8f0d36527aa62ab7669f121f540
\end{lstlisting}
\begin{minted}{console}
$ ./zlibcat.py3 < .git/objects/2d/447e8255ace8f0d36527aa62ab7669f121f540
\end{minted}
Cela vous donnera l'identifiant SHA-1 du \texttt{tree}. Lisez son
contenu avec zlibcat.py3.
......@@ -167,9 +167,9 @@ vous avez tapez.
Il est possible de faire les mêmes opérations en demandant à Git de
faire le décodage proprement:
\begin{lstlisting}
\begin{minted}{console}
git cat-file -p LE_SHA-1_A_LIRE_DANS_OBJECTS
\end{lstlisting}
\end{minted}
Refaites le chemin complet vers \texttt{file.txt} en partant de
HEAD mais cette fois en utilisant Git.
......@@ -179,26 +179,26 @@ HEAD mais cette fois en utilisant Git.
Nous allons ajouter un fichier dans un sous-répertoire et
l'enregistrer dans un nouveau commit.
\begin{lstlisting}[language=sh]
mkdir sousRepertoire
mon_editeur_prefere sousRepertoire/file.txt # inserer quelques lignes
git add sousRepertoire/file.txt
git commit -m "message 2"
\end{lstlisting}
\begin{minted}{console}
$ mkdir sousRepertoire
$ emacs sousRepertoire/file.txt # inserer quelques lignes
$ git add sousRepertoire/file.txt
$ git commit -m "message 2"
\end{minted}
Utiliser \lstinline{git cat-file -p} pour lire le \texttt{tree}. Il
pointe sur un autre tree (le sous-répertoire), qui pointe sur le
nouveau fichier. Vérifier que le contenu du nouveau fichier est bien
le bon.
Utiliser \mintinline{sh}{git cat-file -p} pour lire le
\texttt{tree}. Il pointe sur un autre tree (le sous-répertoire), qui
pointe sur le nouveau fichier. Vérifier que le contenu du nouveau
fichier est bien le bon.
\subsection{Les fichiers dupliqués}
Dupliquer un fichier et l'insérer dans le dépôt.
\begin{lstlisting}[language=sh]
\begin{minted}{console}
cp file.txt file_copy.txt
git add file_copy.txt
git commit -m "message 3"
\end{lstlisting}
\end{minted}
Vérifier que le blob est le même pour les deux fichiers.
......@@ -210,15 +210,15 @@ Vérifier qu'il y a bien un nouveau blob. Il y a donc deux blobs
stockant quasiment les mêmes données.
Demander à git d'optimiser le stockage avec
\begin{lstlisting}
\begin{minted}{console}
git gc
\end{lstlisting}
\end{minted}
Un fichier \texttt{.pack} (et \texttt{.idx}) est apparu. Il contient
le stockage des fichiers avec des delta. La commande suivante permet d'afficher le contenu résumé du pack:
\begin{lstlisting}
\begin{minted}{console}
git verify-pack -v .git/objects/pack/pack-0618531a948d3537443496da7765fb4d0b4fb74f
\end{lstlisting}
\end{minted}
Ce qui est conservé dans un pack, c'est la dernière version du fichier
avec un chaine de delta qui permet de revenir en arrière dans
......@@ -231,24 +231,24 @@ directement en toute circonstance. Ils fonctionnent de la même manière
que les branches (voir plus loin) mais ne bougent pas avec la tête.
Créez un tag sur la révision suivante~:
\begin{lstlisting}[language=sh]
\begin{minted}{console}
git tag v0.1
\end{lstlisting}
\end{minted}
Vérifiez que le fichier correspondant à ce tag a bien été créé dans le
dossier \texttt{.git/refs/tags} et que son contenu correspond bien au
commit sur lequel est positionnée la tête actuellement~:
\begin{lstlisting}
\begin{minted}{console}
cat .git/refs/tags/v0.1
\end{lstlisting}
\end{minted}
Nous allons avancer la branche \texttt{master}~:
\begin{lstlisting}[language=sh]
\begin{minted}{console}
mon_editeur_prefere file2.txt # inserer quelques lignes
git add file2.txt
git commit -m "message 4"
\end{lstlisting}
\end{minted}
Vérifiez dans le journal que la branche \texttt{master} a bien avancé
et que le tag que vous avez créé précédemment est bien resté en place.
......@@ -257,28 +257,28 @@ et que le tag que vous avez créé précédemment est bien resté en place.
Nous allons créer une nouvelle branche nommée \texttt{develop}, puis
revenir dans la branche \texttt{master}.
\begin{lstlisting}[language=sh]
\begin{minted}{console}
git checkout -b develop
cp file.txt file_copy2.txt
git add file_copy2.txt
git commit -m "message dev1"
\end{lstlisting}
\end{minted}
Vérifier que HEAD pointe bien sur le bon commit de \texttt{develop}.
\begin{lstlisting}[language=sh]
\begin{minted}{console}
git checkout master
cp file.txt file_copy2.txt
git add file_copy2.txt
git commit -m "message 5"
\end{lstlisting}
\end{minted}
Vérifier que HEAD pointe bien sur le bon commit de \texttt{master}.
Et nous allons faire le merge (sauvegarder sans modifier le message)
\begin{lstlisting}
\begin{minted}{console}
git merge develop
\end{lstlisting}
\end{minted}
Vérifier que le commit a bien deux parents et que le tree pointe vers
le même fichier.
......@@ -293,37 +293,37 @@ convient de prendre ses précautions dans ce cas-là.
Récupérez l'identifiant du commit correspondant à la branche
\texttt{develop}. On peut par exemple utiliser~:
\begin{lstlisting}
\begin{minted}{console}
git show develop
\end{lstlisting}
\end{minted}
Notez l'identifiant du commit, et récupérez (\texttt{checkout}) les
données de ce commit~:
\begin{lstlisting}
\begin{minted}{console}
git checkout <numéro-du-commit>
\end{lstlisting}
\end{minted}
Normalement, Git doit vous avertir que vous passez en état «~tête
détachée~», mais c'est simplement un avertissement.
Créez un nouveau fichier et faites un commit~:
\begin{lstlisting}[language=sh]
\begin{minted}{console}
mon_editeur_prefere fichier3.txt # inserer quelques lignes
git add fichier3.txt
git commit -m "message détaché 1"
\end{lstlisting}
\end{minted}
Vérifiez que votre commit est bien dans le journal des révisions~:
\begin{lstlisting}[language=sh]
\begin{minted}{console}
git log --graph --oneline
\end{lstlisting}
\end{minted}
Notez mentalement le numéro de commit. Revenez à la branche master et
regardez le journal des révisions~:
\begin{lstlisting}[language=sh]
\begin{minted}{console}
git checkout master
git log --graph --oneline
\end{lstlisting}
\end{minted}
Mais où est donc passé le commit dans lequel vous aviez ajouté le
fichier \texttt{fichier3.txt}~? Il n'est référencé par aucune branche,
......@@ -342,41 +342,41 @@ révisions, ces points d'entrée étant~:
Nous allons rendre notre commit visible en la fusionnant dans
la branche \texttt{develop}~:
\begin{lstlisting}
\begin{minted}{console}
git checkout develop
git merge <numéro-du-commit> # le numéro est celui du commit
# dans lequel on a créé fichier3.txt
\end{lstlisting}
\end{minted}
Une autre solution possible était de créer une nouvelle branche
directement à partir de ce numéro de commit, avec%
\lstinline{git branch <nouvelle-branche> <numéro-du-commit>}.
\mintinline{bash}{git branch <nouvelle-branche> <numéro-du-commit>}.
\subsection{Reprendre le travail depuis une branche antérieure}
Revenez sur la branche master~:
\begin{lstlisting}
\begin{minted}{console}
git checkout master
\end{lstlisting}
\end{minted}
Nous allons maintenant effectuer les mêmes opérations mais en
repartant de la branche \texttt{develop}, et non de son commit
associé.
\begin{lstlisting}[language=sh]
\begin{minted}{console}
git checkout develop
mon_editeur_prefere fichier3.txt # inserer quelques lignes
git add fichier3.txt
git commit -m "message dev2"
git checkout master
\end{lstlisting}
\end{minted}
Revenez sur la branche \texttt{develop} et vérifiez que rien n'est
perdu~:
\begin{lstlisting}[language=sh]
\begin{minted}{console}
git checkout develop
git log --graph --oneline
\end{lstlisting}
\end{minted}
C'est normal. Lorsque l'on travaille à partir d'une branche, le
pointeur de la branche avance avec la tête. Lorsque l'on change de
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment