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

alpha de la version anglaise du tp 1

parent ec609ef9
......@@ -67,23 +67,9 @@ 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
% permet de conserver l'historique des fichiers sources d'un projet, et
% d'utiliser cet historique pour fusionner automatiquement plusieurs
% révisions (ou « versions »). Chaque membre de l'équipe travaille sur
% sa version du projet, et peut envoyer les versions suffisamment
% stables à ses coéquipiers via un dépôt partagé (commande \texttt{git
% push}) qui pourront les récupérer et les intégrer aux leurs quand
% ils le souhaitent (commande \texttt{git pull}).
\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
% \url{http://ensiwiki.ensimag.fr/index.php/Gestionnaire_de_Versions} ou
% vous donnent un aperçu de l'existant.
For the following of sections of this practical, we will used a {\em
Gitlab server}. Gitlab has similar functionalities to Github, but is
......@@ -95,22 +81,6 @@ UGA, you may also use
open an account, and use \url{https://gitlab.com}.
% Ce TP utilise le serveur Gitlab de l'Ensimag
% \url{https://gitlab.ensimag.fr}. Gitlab, site web et logiciel libre
% que chacun peut installer chez soi, et Github, site web unique et
% dominant, sont les moyens de gestion des dépôts partagés actuellement
% les plus utilisés. Néanmoins, les outils de bases dans l'envers du
% décor, et l'automatisation de la gestion des dépôts, utilisés dans
% certains de vos futurs projets, ne sont pas compliqués.
% \subsection{Lien de cette séance avec le TP \og galerie d'image\fg{} }
% Ce TP est prévu avec un répertoire {\tt sandbox} à
% télécharger. Néanmoins si vous avez déjà commencé le TP, vous pouvez
% parfaitement utiliser votre propre code à la place. Il suffira d'adapter
% les manipulations et les noms de fichiers en conséquence.
\subsection{Tracks}
\begin{description}
\item[Git newbies] group yourself in small teams of at least two
......@@ -125,41 +95,11 @@ laptop is perfectly fine). The gitlab server is freely accessible at
any time from any places. The git repository of the team is assumed
to be in \texttt{gitlab.ensimag.fr}.
% Pour la séance, choisissez deux PC adjacents par équipe
% (on peut utiliser son ordinateur portable à la place d'un PC de l'école). Chaque
% étudiant travaille sur son compte.
% Le dépôt partagé doit être accessible en permanence donc hébergé sur
% un serveur. Ce dépôt est simplement un répertoire qui contiendra
% l'ensemble de l'historique du projet. On ne travaillera jamais dans
% le dépot directement, mais on utilisera Git pour envoyer et récupérer
% des révisions. Tous les membres de l'équipe auront accès à ce dépôt
% en lecture et en écriture. Dans la suite des explications, on suppose
% que le dépôt est hébergé sur \texttt{gitlab.ensimag.fr}.
% On choisit le compte de l'étudiant qui
% hébergera le dépôt partagé. À l'Ensimag, les répertoires utilisateurs
% (\texttt{\$HOME}) sont protégés, on ne peut pas créer de répertoire
% partagés dedans. Alice va donc créer le dépôt sur
% \texttt{gitlab.ensimag.fr}. Ce dépôt doit être accessible en
% permanence donc hébergé sur un serveur. Ce dépôt est simplement un
% répertoire qui contiendra l'ensemble de l'historique du projet. On ne
% travaillera jamais dans ce répertoire directement, mais on utilisera
% Git pour envoyer et récupérer des révisions. Tous les membres de
% l'équipe auront accès à ce dépôt en lecture et en écriture, donc le
% choix du compte hébergeant le dépôt n'a pas beaucoup d'importance.
Let us assume that the team is composed of two people, \texttt{Alive}
on \texttt{laptop1} and \textit{Bob} on \texttt{laptop2}. Explanations
may be extended to any number of team members.
% L'équipe est constituée d'\textit{Alice} qui travaille sur son
% portable \texttt{laptop1} et \textit{Bob} qui travaille également sur
% son portable \texttt{laptop2}. Si \textit{Alice} ou \textit{Bob}
% travaille sur un PC de l'école, il faut remplacer \texttt{laptop1} ou
% \texttt{laptop2} par le nom de la machine (e.g. \texttt{ensipc42}).
% Les explications sont écrites pour 2 utilisateurs pour simplifier,
% mais il peut y avoir un nombre quelconque de coéquipiers.
\tikzstyle{depot}=[draw=black,shape=ellipse]
\begin{center}
......@@ -201,20 +141,6 @@ at every Git transfer.
You need first to create your own public-private pair of ssh keys.
Read now the chapter \url{https://git-scm.com/book/en/v2/Git-on-the-Server-Generating-Your-SSH-Public-Key}
% La connexion distante au serveur Gitlab peut s'effectuer de deux
% façons avec \texttt{https}, ou bien avec \texttt{ssh}.
% Vous avez utilisé \texttt{ssh} pour vous connecter à une machine
% distante, comme par exemple~:
% \begin{minted}{bash}
% petrot@chene[:08b09e6b]% ssh petrotf@ensipc123.ensimag.fr
% Last login: Fri Nov 16 18:25:36 2018 from chene.tima.u-ga.fr
% [petrotf@ensipc123 ~]$ logout
% petrot@chene[:08b09e6b]%
% \end{minted}
% Comme le montre l'exemple, il est possible de se connecter \emph{sans avoir à taper son mot de passe}.
% C'est particulièrement utile avec \texttt{git} qui réalise souvent plusieurs connexions et exige donc que l'on tape son mot de passe $n$ fois, ce qui rend fou.
\begin{itemize}
\item If you do not have it yet, create a public-private key pair with
\texttt{ssh-keygen}. Choose a good passphrase. A sentence, or few
......@@ -225,8 +151,6 @@ Read now the chapter \url{https://git-scm.com/book/en/v2/Git-on-the-Server-Gener
Thus now, you should have two files \texttt{id\_rsa.pub} (public
part) and \texttt{id\_rsa} (private part) in your directory
\texttt{\textasciitilde/.ssh}.
% La commande génère deux fichiers dans ~: d'une part \texttt{id\_rsa}, qui est la clef privée à garder au chaud et à ne jamais partager avec quiconque, et d'autre part la clef publique associée \texttt{id\_rsa.pub}, que l'on peut partager librement.
\item Check if you have an already running ssh-agent. Any modern Linux
graphical session should have it by default.
......@@ -301,73 +225,30 @@ and nothing will be registered.
The section \texttt{[push]} is there only to homogenize the behavior of old Git version.
% La section \texttt{[push]} permet d'avoir le même comportement avec Git 2.x et Git 1.x (utiliser \texttt{current} au lieu de \texttt{simple} avec les très vieilles versions de
% Git).
% La section {\tt [push]} permet d'avoir un comportement raisonnable avec
% les branches quand on utilise un dépôt partagé (c'est le cas par défaut
% avec Git 2.0+). Avec les versions anciennes de Git, il faut utiliser
% \texttt{current} à la place de \texttt{simple}.
\section{Starting a new project}
This section is done only once per project, thus only one team member
should do it.
% Le contenu de cette section est réalisé une bonne fois pour toute, au
% début du projet. Si certains membres de l'équipe ne comprennent pas
% les détails, ce n'est pas très grave, nous verrons ce que tout le
% monde doit savoir dans la section~\ref{sec=utilisation}.
\subsection{Shared repository creation in Gitlab}
\label{sec=creation-depot-partagee}
\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
% dépôt partagé doit être créé sur un serveur pour être accessible en
% permanence ; \texttt{gitlab.ensimag.fr} est celui sur lesquels sont
% hébergés les dépôts Git à l'Ensimag.
% Il faut dans un premier temps vous connecter à votre compte~:
\begin{minted}{console}
alice@laptop1$ firefox gitlab.ensimag.fr
\end{minted}
% Attention, l'accès à cette machine est sécurisée~: si vous vous
% trompez de mot de passe plusieurs fois, votre machine sera interdite
% d'accès pendant quelques minutes. Si vous avez l'erreur \texttt{ssh:
% connect to host depots.ensimag.fr port 22: Connection refused},
% alors continuez la séance depuis le PC d'un voisin (faites un
% \texttt{ssh ensipc123}, en remplaçant \texttt{123} par le bon numéro
% de machine, puis continuez à travailler).
% Si votre mot de passe n'est pas reconnu, rendez-vous sur la page
% \url{https://copass-client.grenet.fr/} et modifiez ou re-validez votre mot
% de passe, puis réessayez.
\subsubsection{Group creation (team members)}
This step is not mandatory but it helps to manage access right on the
projects.
% Nous allons commencer par créer un groupe pour les deux membres de
% 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 « + », \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.
% En utilisant le menu/Bouton « + » au sommet de la page, Alice crée un
% groupe (\emph{New group}) nommé avec les logins séparés par un
% \texttt{souligné/underscore}, par exemple \verb!alice_bob!. Ce
% groupe est créé avec une visibilité \emph{Private} (le défaut).
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}:
......@@ -379,32 +260,12 @@ being added to the team.
bob@laptop2$ firefox gitlab.ensimag.fr
\end{minted}
% En utilisant le bouton « Groups » au sommet de la page, Alice
% sélectionne son groupe nouvellement créé et ajoute Bob aux membres du
% groupe (\emph{Members} dans le menu gauche, puis « Bob » dans
% \emph{Add new member}). Elle lui donnera le même rôle que le sien,
% celui de \emph{Owner}.
\subsubsection{Création du dépôt (de code)}
\subsubsection{Repository creation}
Using the menu/button « + », Alice creates an empty projet (\emph{New project}). the project name is \texttt{project1} under the group \verb!alice_bob!.
% En utilisant le menu/Bouton « + » au sommet de la page, Alice crée un
% projet (\emph{New project}) nommé \texttt{projet1}. Ce projet est créé
% avec le groupe \verb!alice_bob!. Si elle était sur la page du groupe,
% elle peut directement indiqué que ce projet appartient au
% groupe. Sinon, elle peut remplacer son login (le groupe par défaut
% lors de la création d'un projet) par \verb!alice_bob!.
% Bob faisant partie du groupe, il a directement l'accès au projet.
Now, Alice and Bob will work directly in their HOME.
% Nous avons terminé la création du dépôt sur
% \texttt{gitlab.ensimag.fr}. Vous pouvez maintenant \textbf{revenir sur
% votre machine de travail habituelle} (PC de l'Ensimag ou votre
% machine personnelle).
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:
......@@ -414,8 +275,6 @@ Git has three main states that your files can reside in: committed, modified, an
\item Staged means that you have marked a modified file in its current version to go into your next commit snapshot.
\end{itemize}
}
% dans lesquels vos fichiers vont se retrouver
% au fur et mesure des manipulations du TP.
\begin{figure}[H]
\centering
......@@ -431,19 +290,9 @@ Git has three main states that your files can reside in: committed, modified, an
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.
\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/project1.git project1
......@@ -453,22 +302,10 @@ alice@laptop1$ git clone ssh://git@gitlab.ensimag.fr/alice_bob/project1.git proj
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).
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$ wget https://ensiwiki.ensimag.fr/images/8/86/Sandbox.tar.gz
alice@laptop1$ cd ~/project1/
......@@ -480,31 +317,18 @@ alice@laptop1$ git commit -m "add sandbox/ directory"
alice@laptop1$ git status
\end{minted}
\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.
\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}
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é~:
\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}.
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
......@@ -517,17 +341,11 @@ bob@laptop2$ ls
\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/}.
\section{Git first usage}
\label{sec=utilisation}
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
......@@ -537,12 +355,6 @@ 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{Commit creation}
\begin{minted}{bash}
......@@ -563,12 +375,6 @@ Changes not staged for commit:
\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}
......@@ -578,9 +384,6 @@ git diff HEAD
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
......@@ -597,12 +400,6 @@ index a47665a..7f67d33 100644
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.
Now, both, {\em Alice} and {\em Bob} create a new commit~:
\begin{minted}{bash}
git commit -a # register all modifications of the local repository
......@@ -612,14 +409,6 @@ 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 read in their terminal:
\begin{verbatim}
[master 2483c22] Add my name
......@@ -629,11 +418,6 @@ After saving the message and quitting the editor, they read in their terminal:
A new « commit » is registered. The hexadecimal number "2483c22" is
the identification number of the commit.
% 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
% notre cas).
Some commands are dedicated to the history visualization:
\begin{minted}{bash}
gitk # Graphical history
......@@ -649,9 +433,6 @@ git gui blame hello.c # history of each line
The "commit" will be published to any user in the next section.
% On va maintenant mettre ce « commit » à disposition des
% autres utilisateurs.
More on commit in \href{https://git-scm.com/book/en/v2/Git-Basics-Recording-Changes-to-the-Repository}{Chapter 2.2}
\subsection{Merge}
......@@ -687,12 +468,6 @@ Merge the remote changes (e.g. 'git pull') before pushing again. See the
\end{verbatim}
% L'expression « non-fast-forward » (qu'on pourrait traduire par « absence
% d'avance rapide ») veut dire qu'il y a des modifications dans le dépôt
% vers lequel on veut envoyer nos modifications et que nous n'avons
% pas encore récupérées. Il faut donc fusionner les modifications avant
% de continuer.
{\em Alice} has first to merge {\em Bob} modifications already published.
{\em Alice} do the merge~:
......@@ -700,9 +475,6 @@ Merge the remote changes (e.g. 'git pull') before pushing again. See the
alice@laptop1$ git pull
\end{minted}
% Après quelques messages sur l'avancement de l'opération, on voit
% apparaître~:
{\em Alice} and {\em Bob} have change the same lines, thus the
automatic merge should fail.
......@@ -712,13 +484,6 @@ CONFLICT (content): Merge conflict in sandbox/hello.c
Automatic merge failed; fix conflicts and then commit the result.
\end{verbatim}
% Ce qui vient de se passer est que {\em Bob} et {\em Alice} ont fait
% des modifications au même endroit du même fichier dans les commits
% qu'ils ont faits chacun de leur côté (en ajoutant leurs noms sur la
% même ligne), et Git ne sait pas quelle version choisir pendant la
% fusion~: c'est un conflit, et nous allons devoir le résoudre
% manuellement. Allez voir \texttt{hello.c}.
La bonne nouvelle, c'est que les modifications faites par \textit{Alice} et Bob
sur des endroits différents du fichier ont été fusionnées. Quand une
équipe est bien organisée et évite de modifier les mêmes endroits en
......@@ -729,7 +494,6 @@ automatiquement.
{\em Alice} has to set \texttt{hello.c} to the correct version by
hand. Hopefully, problematic lines are well indicated in the file.
%En haut du fichier, on trouve~:
\begin{minted}{diff}
<<<<<<< HEAD
/* Auteurs : Alice et ... */
......@@ -738,17 +502,6 @@ hand. Hopefully, problematic lines are well indicated in the file.
>>>>>>> 2483c228b1108e74c8ca4f7ca52575902526d42a
\end{minted}
% Les lignes entre \verb|<<<<<<<| et \verb|=======| contiennent la
% version de votre commit (qui s'appelle HEAD). Les lignes entre
% \verb|=======| et \verb|>>>>>>>| contiennent la version que nous
% venons de récupérer par « pull » (nous avions dit qu'il était identifié
% par la chaîne 2483c22, en fait, l'identifiant complet est plus long,
% nous le voyons ici).
% Il faut alors « choisir » dans \texttt{hello.c} la version qui convient
% (ou même la modifier). Ici, on va fusionner à la main (\textit{i.e.} avec un
% éditeur de texte) et remplacer l'ensemble par ceci~:
{\em Alice} has to remove indicators to put the file in the desired state:
\begin{verbatim}
/* Auteurs : Alice et Bob */
......@@ -774,8 +527,6 @@ no changes added to commit (use "git add" and/or "git commit -a")
\end{verbatim}
To be sure of the results, {\em Alice} check the differences:
% Si on n'est pas sûr de soi après la résolution des conflits, on peut
% lancer la commande~:
\begin{minted}{bash}
git diff # git diff sans argument, alors qu'on avait
# l'habitude d'appeler 'git diff HEAD'
......@@ -796,13 +547,6 @@ index 5513e89,614e4b9..0000000
\end{verbatim}
%(les '+' et les '-' sont répartis sur deux colonnes, ce qui correspond
% aux changements par rapport aux deux « commits » qu'on est en train de
% fusionner. Si vous ne comprenez pas ceci, ce n'est pas très grave !)
% Après avoir résolu manuellement les conflits à l'intérieur du fichier,
% on marque ces conflits comme résolus, explicitement, avec \texttt{git
% add}~:
{\em Alice} mark the conflicts as solved, using \texttt{git add}:
\begin{verbatim}
$ git add hello.c
......@@ -817,33 +561,14 @@ Changes to be committed:
\end{verbatim}
% On note que \texttt{hello.c} n'est plus considéré « both modified »
% (c'est-à-dire contient des conflits non-résolus) par Git, mais simplement
% comme « modified ».
% Quand il n'y a plus de fichier en conflit, il faut faire un commit
% (comme « git pull » nous l'avait demandé)~:
Then, {\em Alice} finishes to build the merge commit:
\begin{minted}{bash}
git commit
\end{minted}
% (Dans ce cas, il est conseillé, même pour un débutant, de ne pas
% utiliser l'option \verb|-a|, mais c'est un détail)
The default message is sufficient.
% Un éditeur s'ouvre, et propose un message de commit du type « \texttt{Merge
% branch 'master' of ...} », on peut le laisser tel quel, sauver et
% quitter l'éditeur.
% Nb~: s'il n'y avait pas eu de conflit, ce qui est le cas le plus
% courant, « git pull » aurait fait tout cela~: télécharger le nouveau
% commit, faire la fusion automatique, et créer si besoin un nouveau
% commit correspondant à la fusion.
%On peut maintenant regarder plus en détails ce qu'il s'est passé~:
Looking at the details:
\begin{minted}{bash}
gitk
......@@ -851,10 +576,6 @@ gitk
{\em Alice} logs show 3 commits: the two modifications and the merge.
% Pour \textit{Alice}, on voit apparaître les deux « commit » fait par {\em Bob} et
% {\em Alice} en parallèle, puis le « merge commit » que nous venons de créer
% avec « git pull ». Pour {\em Bob}, rien n'a changé.
La fusion étant faite, {\em Alice} peut mettre à disposition son travail
(le premier commit, manuel, et le commit de fusion) avec~:
......@@ -863,28 +584,19 @@ La fusion étant faite, {\em Alice} peut mettre à disposition son travail
alice@laptop1$ git push
\end{minted}
and {\em Bob} get it without a glinch:
%et {\em Bob} peut récupérer le tout avec~:
\begin{minted}{console}
bob@laptop2$ git pull
\end{minted}
% (cette fois-ci, aucun conflit, tout se passe très rapidement et en une
% commande)
%Les deux utilisateurs peuvent comparer ce qu'ils ont avec~:
All repositories should be in the same state now:
\begin{minted}{bash}
gitk
\end{minted}
% Ils ont complètement synchronisé leurs répertoires. On peut également
% faire~:
\begin{minted}{bash}
git pull # do nothing: already up-to-date
git push # do nothing: already up-to-date
\end{minted}
% Mais ces commandes se contenteront de répondre \texttt{Already up-to-date.}
% et \texttt{Everything up-to-date}.
\subsection{Add new files}
......@@ -905,14 +617,10 @@ Untracked files:
toto.c
nothing added to commit but untracked files present (use "git add" to track)
\end{verbatim}
% Notre fichier \texttt{toto.c} est considéré comme « Untracked » (non suivi
% par Git). Si on veut que \texttt{toto.c} soit ajouté au dépôt, il faut
% l'enregistrer (\texttt{git commit} ne suffit pas)~:
To put it in the next commit, {\em Alice} has to mark him for tracking
first with \texttt{git add toto.c}:
%{\em Alice} fait à présent~:
\begin{minted}{console}
alice@laptop1$ git add toto.c
alice@laptop1$ git status
......@@ -929,8 +637,6 @@ Changes to be committed:
{\em Alice} create the commit in one line, providing the message:
% fait à présent (-m permet de donner directement le message
% de log)~:
\begin{minted}{bash}
alice@laptop1$ git commit -m "ajout de toto.c"
\end{minted}
......@@ -941,8 +647,6 @@ should display:
create mode 100644 toto.c
\end{verbatim}
% \texttt{toto.c} a été enregistré dans le dépôt. {\em Alice} peut publier ce
% changement~:
{\em Alice} publishes the commit:
\begin{minted}{console}
alice@laptop1$ git push
......@@ -960,16 +664,16 @@ Fast forward
\end{verbatim}
% Le fichier \texttt{toto.c} est maintenant présent chez {\em Bob}.
\subsection{Fichiers ignorés par Git}
{\em Bob} crée à présent un nouveau fichier \texttt{temp-file.txt}, puis
fait~:
{\em Bob} creates a new file \texttt{temp-file.txt}.
The command:
\begin{minted}{console}
bob@laptop2$ git status
\end{minted}
On voit maintenant apparaître~:
should display:
\begin{verbatim}
On branch master
Untracked files:
......@@ -979,35 +683,29 @@ Untracked files:
nothing added to commit but untracked files present (use "git add" to track)
\end{verbatim}
Si {\em Bob} souhaite que le fichier \texttt{temp-file.txt} ne soit pas enregistré
dans le dépôt (soit « ignoré » par Git), il doit placer son nom dans un
fichier \texttt{.gitignore} dans le répertoire contenant \texttt{temp-file.txt}.
Concrètement, {\em Bob} tape la commande
If {\em Bob} do not want to track the file in the repository, he
should register in the repository that this file should be ignored.
He will add the file name into a file \texttt{.gitignore} in the same
directory.
{\em Bob} opens the file:
\begin{minted}{console}
bob@laptop2$ emacs .gitignore
\end{minted}