Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Gregory Mounie
formation-git
Commits
127df82e
Commit
127df82e
authored
Sep 07, 2020
by
Grégory Mounié
Browse files
compilation with scrartcl and minted
TODO: translation of 2/3 of the document
parent
21c50fd8
Changes
1
Hide whitespace changes
Inline
Side-by-side
MOSIG_AdvancedBasic2h/git-model-computer-lab.tex
View file @
127df82e
\documentclass
[a4paper,10pt]
{
art
i
cl
e
}
\documentclass
[a4paper,10pt]
{
scr
artcl
}
\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
{
Sto
ck
age:
le répertoire objects
}
\section
{
Sto
r
age:
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.py
3
< .git
/
objects
/
2
d
/
447
e
8255
ace
8
f
0
d
36527
aa
62
ab
7669
f
121
f
540
\end
{
lstlisting
}
\begin{
minted}
{
console
}
$
.
/
zlibcat.py
3
< .git
/
objects
/
2
d
/
447
e
8255
ace
8
f
0
d
36527
aa
62
ab
7669
f
121
f
540
\end
{
minted
}
Cela vous donnera l'identifiant SHA
-
1
du
\texttt
{
tree
}
. Lisez son
contenu avec zlibcat.py
3
.
...
...
@@ -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
\
ls
tinline
{
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
\
min
tinline
{
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
-
0618531
a
948
d
3537443496
da
7765
fb
4
d
0
b
4
fb
74
f
\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 v
0
.
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
/
v
0
.
1
\end
{
lstlisting
}
\end
{
minted
}
Nous allons avancer la branche
\texttt
{
master
}
~:
\begin
{
lstlisting
}
[
language
=
sh
]
\begin
{
minted
}{
console
}
mon
_
editeur
_
prefere file
2
.txt # inserer quelques lignes
git add file
2
.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
_
copy
2
.txt
git add file
_
copy
2
.txt
git commit
-
m "message dev
1
"
\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
_
copy
2
.txt
git add file
_
copy
2
.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 fichier
3
.txt # inserer quelques lignes
git add fichier
3
.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
{
fichier
3
.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éé fichier
3
.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
%
\
ls
tinline
{
git branch <nouvelle
-
branche> <numéro
-
du
-
commit>
}
.
\
min
tinline
{
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 fichier
3
.txt # inserer quelques lignes
git add fichier
3
.txt
git commit
-
m "message dev
2
"
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
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment