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

commit creation

parent a5590b4e
......@@ -58,13 +58,13 @@ the changes to textual documents like the source code of programs.
In the english version of this document, we will often refer to
chapters of the web version of {\em Pro Git Book}
\url{https://git-scm.com/book/en/v2}. This book is freely available in
at \url{https://git-scm.com/book/en/v2}. This book is freely available in
electronic form (Creative Common NC SA 3.0).
For a good introduction to VCS then to Git, read now chapter 1.1
\url{https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control}
and chapter 1.3
\url{https://git-scm.com/book/en/v2/Getting-Started-What-is-Git%3F}
For a good introduction to VCS then to Git, read now
\href{https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control}{Chapter 1.1}
and
\href{https://git-scm.com/book/en/v2/Getting-Started-What-is-Git%3F}{Chapter 1.3}
% Git est un gestionnaire de versions, c'est-à-dire un logiciel qui
......@@ -76,8 +76,8 @@ and chapter 1.3
% push}) qui pourront les récupérer et les intégrer aux leurs quand
% ils le souhaitent (commande \texttt{git pull}).
Numerous VCS exists
\url{https://en.wikipedia.org/wiki/Comparison_of_version-control_software},
\href{https://en.wikipedia.org/wiki/Comparison_of_version-control_software}{Numerous VCS exists},
but Git is the most commonly used, now.
% Il existe beaucoup d'autres gestionnaires de versions. Les pages
......@@ -322,7 +322,7 @@ should do it.
\subsection{Shared repository creation in Gitlab}
\label{sec=creation-depot-partagee}
Alice will connect to her account on \texttt{gitlab.ensimag.fr}:
\textit{Alice} will connect to her account on \texttt{gitlab.ensimag.fr}:
% On va maintenant créer le dépôt partagé. Seule \textit{Alice} fait
% cette manipulation, sur son compte sur \texttt{gitlab.ensimag.fr}. Le
......@@ -358,8 +358,8 @@ projects.
% l'équipe. Cette étape n'est pas nécessaire, mais elle permet de gérer
% efficacement les droits d'accès pour un ensemble de projets.
Using the menu/button « + », Alice creates a group (\emph{New group})
with the logins of the team members as name, like
Using the menu/button « + », \textit{Alice} creates a group (\emph{New
group}) with the logins of the team members as name, like
\verb!alice_bob!. This group should have a \emph{Private} visibility,
the default in Gitlab.
......@@ -368,11 +368,13 @@ the default in Gitlab.
% \texttt{souligné/underscore}, par exemple \verb!alice_bob!. Ce
% groupe est créé avec une visibilité \emph{Private} (le défaut).
Using the « Groups » button, Alice add Bob as team member: left menu
\emph{Members}, then add Bob in \emph{Add new member}. Bob will have
the same role as Alice: \emph{Owner}.
Using the « Groups » button, \textit{Alice} add \textit{Bob} as team
member: left menu \emph{Members}, then add Bob in \emph{Add new
member}. \textit{Bob} will have the same role as \textit{Alice}:
\emph{Owner}.
Note: Bob may have to connect once to Gitlab before.
Note: \textit{Bob} may have to connect at least once to Gitlab before
being added to the team.
\begin{minted}{console}
bob@laptop2$ firefox gitlab.ensimag.fr
\end{minted}
......@@ -403,7 +405,7 @@ Now, Alice and Bob will work directly in their HOME.
% votre machine de travail habituelle} (PC de l'Ensimag ou votre
% machine personnelle).
The figure \ref{fig:git} presents the typical exchanges and typical states of the files.
The figure \ref{fig:git} presents the typical exchanges and states of the files.
\footnote{\url{https://git-scm.com/book/en/v2/Getting-Started-Git-Basics}\\
Git has three main states that your files can reside in: committed, modified, and staged:
\begin{itemize}
......@@ -426,94 +428,128 @@ Git has three main states that your files can reside in: committed, modified, an
\subsection{Working repository creation}
As the project is empty, there is no file in it. \textit{Alice} add
the first files as a first step.
As the project is empty, there is no file in it. \textit{Alice} adds
the first files as the first step.
% On va maintenant créer le premier répertoire de travail. Pour
% l'instant, il n'y a aucun fichier dans notre dépôt, donc la première
% chose à faire sera d'y ajouter les fichiers sur lesquels on veut
% travailler. Dans notre exemple, c'est \textit{Alice} qui va s'en occuper.
Pour créer un répertoire de travail dans le répertoire
\verb|~/projet1| (qui n'existe pas encore), \textit{Alice} entre la
commande~:
\textit{Alice} clone the remote repository to create her working
directory \verb|~/project1|:
% Pour créer un répertoire de travail dans le répertoire
% \verb|~/projet1| (qui n'existe pas encore), \textit{Alice} entre la
% commande~:
{\small
\begin{minted}{console}
alice@laptop1$ git clone ssh://git@gitlab.ensimag.fr/alice_bob/projet1.git projet1
alice@laptop1$ git clone ssh://git@gitlab.ensimag.fr/alice_bob/project1.git project1
\end{minted}
}
Pour l'instant, ce répertoire est vide, ou presque~: il contient un
répertoire caché \texttt{.git/} qui contient les méta-données utiles à
Git (c'est là que sera stocké l'historique du projet).
The new directory is almost empty. It contains just a hidden
subdirectory \texttt{.git/} with the Git meta-data and file history.
% Pour l'instant, ce répertoire est vide, ou presque~: il contient un
% répertoire caché \texttt{.git/} qui contient les méta-données utiles à
% Git (c'est là que sera stocké l'historique du projet).
Pour cette séance machine, un répertoire \texttt{sandbox/} a été prévu
pour vous, pour pouvoir vous entraîner sans casser un vrai projet.
\textit{Alice} télécharge le répertoire depuis
\url{https://ensiwiki.ensimag.fr/index.php/Fichier:Sandbox.tar.gz}
puis le décompresse et l'ajoute au dépôt local git~:
Alice downloads the directory \texttt{sandbox/} (at
\url{https://ensiwiki.ensimag.fr/index.php/Fichier:Sandbox.tar.gz}),
extract it and add it to the Git history.
% Pour cette séance machine, un répertoire \texttt{sandbox/} a été prévu
% pour vous, pour pouvoir vous entraîner sans casser un vrai projet.
% \textit{Alice} télécharge le répertoire depuis
% \url{https://ensiwiki.ensimag.fr/index.php/Fichier:Sandbox.tar.gz}
% puis le décompresse et l'ajoute au dépôt local git~:
\begin{minted}{console}
alice@laptop1$ cd ~/projet1/
alice@laptop1$ tar xzvf ~/chemin/vers/le/repertoire/sandbox.tar.gz
alice@laptop1$ wget https://ensiwiki.ensimag.fr/index.php/Fichier:Sandbox.tar.gz
alice@laptop1$ cd ~/project1/
alice@laptop1$ tar xzvf ../Fichier:Sandbox.tar.gz
alice@laptop1$ git status
alice@laptop1$ git add sandbox/
alice@laptop1$ git commit -m "ajout du repertoire sandbox/"
alice@laptop1$ git status
alice@laptop1$ git commit -m "add sandbox/ directory"
alice@laptop1$ git status
\end{minted}
La commande « \texttt{git add sandbox/} » dit à Git de « traquer »
tous les fichiers du répertoire \texttt{sandbox/}, c'est-à-dire qu'il
va enregistrer le contenu de ces fichiers, et suivre leur historique
ensuite. La commande \texttt{git commit} enregistre effectivement le
contenu de ces fichiers dans le dépôt local.
\textit{Alice} has done her first commit !
Explanations can be found in \href{https://git-scm.com/book/en/v2/Git-Basics-Recording-Changes-to-the-Repository}{Chapter 2.2}
% La commande « \texttt{git add sandbox/} » dit à Git de « traquer »
% tous les fichiers du répertoire \texttt{sandbox/}, c'est-à-dire qu'il
% va enregistrer le contenu de ces fichiers, et suivre leur historique
% ensuite. La commande \texttt{git commit} enregistre effectivement le
% contenu de ces fichiers dans le dépôt local.
Now \textit{Alice} sends the commit to the shared repository:
\textit{Alice} peut maintenant envoyer le squelette qui vient d'être importé
vers le dépôt partagé~:
% \textit{Alice} peut maintenant envoyer le squelette qui vient d'être importé
% vers le dépôt partagé~:
\begin{minted}{console}
alice@laptop1$ git push
\end{minted}
% Avec les vieux Git seulement, normalement ce n'est plus d'actualité.
Si ça ne marche pas, essayez \texttt{git push -{}-all}.
% Si ça ne marche pas, essayez \texttt{git push -{}-all}.
Tout est prêt pour commencer à travailler. \textit{Bob} peut à son tour
récupérer sa copie de travail~:
Now \textit{Bob} gets his own working repository:
% Tout est prêt pour commencer à travailler. \textit{Bob} peut à son tour
% récupérer sa copie de travail~:
{\small
\begin{minted}{console}
bob@laptop2$ cd
bob@laptop2$ git clone ssh://git@gitlab.ensimag.fr/alice_bob/projet1.git projet1
bob@laptop2$ cd projet1
bob@laptop2$ git clone ssh://git@gitlab.ensimag.fr/alice_bob/project1.git project1
bob@laptop2$ cd project1
bob@laptop2$ git status
bob@laptop2$ ls
\end{minted}
}
\textit{Bob} repository should have a \texttt{sandbox/} directory.
Si tout s'est bien passé, la commande \texttt{ls} ci-dessus devrait
faire apparaître le répertoire \texttt{sandbox/}.
% Si tout s'est bien passé, la commande \texttt{ls} ci-dessus devrait
% faire apparaître le répertoire \texttt{sandbox/}.
\section{Utilisation de Git pour le développement}
\section{Git first usage}
\label{sec=utilisation}
Pour commencer, on va travailler dans le répertoire \texttt{sandbox}, qui
contient deux fichiers pour s'entraîner~:
The \texttt{sandbox/} directory contains two files:
% Pour commencer, on va travailler dans le répertoire \texttt{sandbox}, qui
% contient deux fichiers pour s'entraîner~:
\begin{minted}{bash}
cd sandbox
emacs hello.c
\end{minted}
Il y a deux problèmes identifiés par des commentaires dans le fichier \texttt{hello.c} ().
\textit{Alice} résout l'un des problème, et \textit{Bob} choisit l'autre. Par ailleurs, chacun ajoute son nom
en haut du fichier, et enregistre le résultat.
Two problems are present in the file \texttt{hello.c}. \textit{Alice}
solve one of the problem, et \textit{Bob} solve the other one. Both
add their name at the top and save the file.
% choisit l'autre
% In
% Il y a deux problèmes identifiés par des commentaires dans le fichier \texttt{hello.c} ().
% \textit{Alice} résout l'un des problème, et \textit{Bob} choisit l'autre. Par ailleurs, chacun ajoute son nom
% en haut du fichier, et enregistre le résultat.
\subsection{Création de nouvelles révision}
\subsection{Commit creation}
\begin{minted}{bash}
git status # comparaison du répertoire de
# travail et du dépôt.
git status # comparaison of working directory and history
\end{minted}
On voit apparaître~:
produce~:
\begin{verbatim}
On branch master
Changes not staged for commit:
......@@ -523,18 +559,28 @@ Changes not staged for commit:
modified: hello.c
\end{verbatim}
Ce qui nous intéresse ici est la ligne « modified: hello.c » qui signifie que
vous avez modifié \texttt{hello.c}, et que ces modifications n'ont
pas été enregistrées dans le dépôt local.
La distinction entre « Changes not staged for commit » et « Changes to be
committed » n'est pas importante pour l'instant.
On peut vérifier plus précisément
ce qu'on vient de faire~:
\texttt{hello.c} is modified and the modifications are not yet
registered in the local history.
% Ce qui nous intéresse ici est la ligne « modified: hello.c » qui signifie que
% vous avez modifié \texttt{hello.c}, et que ces modifications n'ont
% pas été enregistrées dans le dépôt local.
% La distinction entre « Changes not staged for commit » et « Changes to be
% committed » n'est pas importante pour l'instant.
{\em Alice} and {\em Bob} look at the details of the differences
between current state of the file and its last state in history:
\begin{minted}{bash}
git diff HEAD
\end{minted}
Comme {\em Alice} et {\em Bob} ont fait des modifications différentes, le diff
affiché sera différent, mais ressemblera dans les deux cas à~:
In both cases, the {\em diff} should look like this:
% Comme {\em Alice} et {\em Bob} ont fait des modifications différentes, le diff
% affiché sera différent, mais ressemblera dans les deux cas à~:
\begin{verbatim}
diff --git a/sandbox/hello.c b/sandbox/hello.c
index a47665a..7f67d33 100644
......@@ -548,29 +594,39 @@ index a47665a..7f67d33 100644
#include <stdio.h>
\end{verbatim}
Les lignes commençant par '-' correspondent à ce qui a été enlevé, et
les lignes commençant par '+' à ce qui a été ajouté par rapport au
précédent commit. Si vous avez suivi les consignes ci-dessus à propos
du fichier \texttt{.gitconfig}, vous devriez avoir les lignes supprimées
en rouge et les ajoutées en vert.
Lines starting with '-' are removed from previous commit.
Lines starting with '+' are added to previous commit.
% Les lignes commençant par '-' correspondent à ce qui a été enlevé, et
% les lignes commençant par '+' à ce qui a été ajouté par rapport au
% précédent commit. Si vous avez suivi les consignes ci-dessus à propos
% du fichier \texttt{.gitconfig}, vous devriez avoir les lignes supprimées
% en rouge et les ajoutées en vert.
Maintenant, {\em Alice} et {\em Bob} font~:
Now, both, {\em Alice} and {\em Bob} create a new commit~:
\begin{minted}{bash}
git commit -a # Enregistrement de l'état courant de
# l'arbre de travail dans le dépôt local.
git commit -a # register all modifications of the local repository
\end{minted}
L'éditeur est lancé et demande d'entrer un message de 'log'. Ajouter
des lignes et d'autres renseignements sur les modifications apportées à
\texttt{hello.c} (on voit en bas la liste des fichiers modifiés). Un bon
message de log commence par une ligne décrivant rapidement le
changement, suivi d'une ligne vide, suivi d'un court texte expliquant
pourquoi la modification est bonne.
On voit ensuite apparaître~:
The editor start. They have to write a log message. A good log message
start with a title line, then a blank line, than a short text. The log
message should explain the reason of the modification (Why).
% L'éditeur est lancé et demande d'entrer un message de 'log'. Ajouter
% des lignes et d'autres renseignements sur les modifications apportées à
% \texttt{hello.c} (on voit en bas la liste des fichiers modifiés). Un bon
% message de log commence par une ligne décrivant rapidement le
% changement, suivi d'une ligne vide, suivi d'un court texte expliquant
% pourquoi la modification est bonne.
After saving the message and quitting the editor, they reade in the terminal:
\begin{verbatim}
[master 2483c22] Ajout de mon nom
[master 2483c22] Add my name
1 files changed, 2 insertions(+), 12 deletions(-)
\end{verbatim}
Ceci signifie qu'un nouveau « commit » (qu'on appelle aussi parfois
« revision » ou « version ») du projet a été enregistrée dans le dépôt.
Ce commit est identifié par une chaîne hexadécimale (« 2483c22 » dans
......@@ -610,10 +666,10 @@ alice@laptop1$ git push
\end{minted}
On voit apparaître~:
\begin{verbatim}
To ssh://git@gitlab.ensimag.fr/alice_bob/projet1.git
To ssh://git@gitlab.ensimag.fr/alice_bob/project1.git
! [rejected] master -> master (non-fast forward)
error: failed to push some refs to
'ssh://git@gitlab.ensimag.fr/alice_bob/projet1.git'
'ssh://git@gitlab.ensimag.fr/alice_bob/project1.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again. See the
'Note about fast-forwards' section of 'git push --help' for details.
......
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