Commit 09ef2ada authored by Grégory Mounié's avatar Grégory Mounié
Browse files

translation of the fist half (alpha)

parent 127df82e
......@@ -87,11 +87,10 @@ then a minimalist repository.
\subsection{ZLIB cat in python}
The goal of the following program is to show you that git use plain
Zlib compression format. Thus the file contents are perfectly
readeable without git. Eg. Zlib is part of the standard library of
python or Java and an ubiquitous compression format
(cf. https://en.wikipedia.org/wiki/Zlib)
The goal of the following program is to show you that Git use plain
Zlib compression format. Thus the file contents easily readeable. Zlib
is part of the standard library of libpng, python or Java and an
ubiquitous compression format (cf. https://en.wikipedia.org/wiki/Zlib)
The code can be directly downlocaded from
\url{http://recherche.noiraudes.net/resources/git/TP/zlibcat.py3})
......@@ -129,102 +128,108 @@ $ ls -F .git
You should find a file \texttt{HEAD}. Read its content.
The current state of the working
La tête (HEAD) du dépot est indiqué dans le répertoire indiqué dans le
fichier \texttt{HEAD}. En suivant le contenu du fichier \texttt{HEAD}
dans le répertoire \texttt{refs/}, trouver le fichier contenant le
résumé SHA-1 de la tête et noter sa valeur.
The current state of the working directory (HEAD) is written in the
\texttt{HEAD} file. Following the value in the \texttt{refs/}
directory, find the file content with the SHA-1 variable of the head
et note its value.
Vérifier que c'est bien le même que le commit que vous venez de faire.
First check that the value of the SHA-1 is the same as the commit.
\begin{minted}{console}
$ git log
\end{minted}
\section{Storage: the \texttt{objects/} directory}
\subsection{From SHA-1 to SHA-256}
\subsection{À la main}
Git is transitionning, very slowly, from SHA-1 hash to SHA-256 to
evade from the vulnerabilities of SHA-1.
Dans le répertoire \texttt{objects} se trouve un répertoire commençant
par les deux premières lettres du SHA-1.
\section{Content-addressable storage: the \texttt{objects/} directory}
Dans ce répertoire, se trouve un fichier dont le nom est la suite du SHA-1.
\subsection{First, by hand}
Afficher le contenu du fichier en utilisant \texttt{zlibcat.py3} avec
une commande du genre:
In the \texttt{objects/} directory, you should find a directory with a
name of two characters, the first two characters of the SHA-1.
In this directory, you should find a file, with a name composed of the
remaining character of the SHA-1.
Display the content of the file using \texttt{zlibcat.py3} with a
command similar to:
\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.
Note the SHA-1 of the \texttt{tree}. Using the same procedure, display
the content of the \texttt{tree} with \texttt{zlibcat.py3}.
En fait, le format du \texttt{tree} est un peu plus compliqué que cela à
lire, mais il ne reste qu'un fichier dans \texttt{objects/} que vous
n'avez pas lu. Lisez son contenu et vérifier que c'est bien celui que
vous avez tapez.
The tree format is slightly more complicated. Yet, only one unread
file remain in \texttt{objects/}. Check that the last file content is
the content of \texttt{file.txt}.
\subsection{en utilisant Git}
\subsection{Second, using Git}
Il est possible de faire les mêmes opérations en demandant à Git de
faire le décodage proprement:
Git provides directly a tool to read the content of file given the SHA-1 value.
\begin{minted}{console}
git cat-file -p LE_SHA-1_A_LIRE_DANS_OBJECTS
$ git cat-file -p THE_SHA-1_FILE_NAME_TO_READ
\end{minted}
Refaites le chemin complet vers \texttt{file.txt} en partant de
HEAD mais cette fois en utilisant Git.
Redo the full chain from \texttt{HEAD} to \texttt{file.txt} using
\texttt{cat-file}.
\subsection{Les trees}
\subsection{Trees}
Nous allons ajouter un fichier dans un sous-répertoire et
l'enregistrer dans un nouveau commit.
Write a subdirectory, new file in it, with the same name, but
different content, and register the file in a new commit.
\begin{minted}{console}
$ mkdir sousRepertoire
$ emacs sousRepertoire/file.txt # inserer quelques lignes
$ git add sousRepertoire/file.txt
$ mkdir subDir
$ emacs subDir/file.txt # insert few lines
$ git add subDir/file.txt
$ git commit -m "message 2"
\end{minted}
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.
Following again the path of \mintinline{sh}{git cat-file -p}, read the
\texttt{tree}. It contents now a reference to another tree (the
subdirectory). The subdirectory tree reference the new file. Check the
content of the new file.
\subsection{Les fichiers dupliqués}
\subsection{Duplicates}
Dupliquer un fichier et l'insérer dans le dépôt.
Copy the first file and register the copy.
\begin{minted}{console}
cp file.txt file_copy.txt
git add file_copy.txt
git commit -m "message 3"
$ cp file.txt file_copy.txt
$ git add file_copy.txt
$ git commit -m "message 3"
\end{minted}
Vérifier que le blob est le même pour les deux fichiers.
Following again the path of \mintinline{sh}{git cat-file -p}, read the
\texttt{tree}. Check that the blob are the same for both files (same
SHA-1, thus same file).
\section{Stockage par delta}
\section{Delta storage}
Modifier légèrement \texttt{file.txt} et enregister un commit.
Modify slightly the content of \texttt{file.txt}. Commit the modification.
Vérifier qu'il y a bien un nouveau blob. Il y a donc deux blobs
stockant quasiment les mêmes données.
Check that a new blob appear. Both blob should have very similar data
in them.
Demander à git d'optimiser le stockage avec
Ask Git to optimize the storage:
\begin{minted}{console}
git gc
$ git gc
\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:
A new \texttt{pack} file (and \texttt{.idx}) is now present in the
\texttt{objects/pack/ directory}. The pack file includes the file
contents with delta. The following command allow to display the table
of content of the pack:
\begin{minted}{console}
git verify-pack -v .git/objects/pack/pack-0618531a948d3537443496da7765fb4d0b4fb74f
\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
l'histoire du fichier.
The pack contains the last value of the file and the delta to come
back in the file history.
\section{Les tags~: répertoire refs}\label{sec:tags}
\section{The tags in the \texttt{refs/} directory}\label{sec:tags}
Les tags servent à étiqueter des révisions afin de pouvoir y revenir
directement en toute circonstance. Ils fonctionnent de la même manière
......
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