« Git/Premiers pas » : différence entre les versions
Contenu supprimé Contenu ajouté
Aucun résumé des modifications |
git init est déplacé dans un chapitre précédent ; beaucoup de contenu déplacé vers des chapitres car c'est prématuré ici ; j'ai refais un chapitre pas à pas qui détaille bien (sorties git log) chaque étape ajout/modif/suppression |
||
Ligne 1 :
{{git}}
Nous allons maintenant entré dans le vif du sujet et faire une première modification dans le code source d'une application.
Cette première expérience va nous permettre de découvrir plusieurs notions importantes : l'espace de travail et l'index.
== Préalable ==
On reprend l'exemple précédent.
<source lang="bash">
git clone https://gerrit.wikimedia.org/r/p/test/mediawiki/extensions/examples.git
cd examples
</source>
Faisons d'abord un
<source lang="bash">
</source>
qui va nous répondre
<pre>
* master
</pre>
Git nous indique qu'il existe une seule branche appelée <tt>master</tt> et que c'est sur cette branche que nous travaillons comme l'indique l'astérisque en face de <tt>master</tt>.
Cela nous est confirmé par
<source lang="bash">
git status
</source>
qui nous répond
<pre>
# On branch master
nothing to commit, working directory clean
</pre>
Vous pouvez faire un
<source lang="bash">
git log
</source>
Pour voir quel est l'auteur et la date de la dernière modification : cela nous servira de repère pour la suite.
Commençons par une modification simple : l'ajout d'un fichier. Cela peut être une première étape si vous avez créer un dépôt vide.
Par exemple, créons un fichier <tt>mon_nouveau_fichier.txt</tt> avec un petit texte dedans.
<source lang="bash">
echo "Ceci est un test de git" > mon_nouveau_fichier.txt
</source>
Voyons la façon dont git perçoit ce nouveau fichier
<source lang="bash">
git status
</source>
<pre>
# On branch master
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# mon_nouveau_fichier.txt
nothing added to commit but untracked files present (use "git add" to track)
</pre>
Il nous indique qu'on est toujours sur la branche <tt>master</tt>, qu'il y a un fichier <tt>mon_nouveau_fichier.txt</tt> mais qu'il n'est pas suivi (« untracked ») par git.
Comme nous voulons intégrer ce fichier au projet, on ne peut pas encore faire le <tt>commit</tt> cat <tt>commit<tt> n'envoit que les fichiers qui sont *tracked*, c'est à dire dans l'index (*staging*). Ajoutons le fichier, comme git nous le suggère, avec <tt>add</tt>
<source lang="bash">
git add mon_nouveau_fichier.txt
</source>
On refait un
<source lang="bash">
git status
</source>
Et, cette fois, git nous répond
<pre>
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: mon_nouveau_fichier.txt
#
</pre>
Le fichier <tt>mon_nouveau_fichier.txt</tt> sera bien intégré dans notre prochain <tt>commit</tt>. Allons-y :
<source lang="bash">
git commit -m "mon premier commit"
</source>
Remarquons ici qu'avec <tt>-m</tt>, nous avons choisi de préciser le message de commit directement sur la ligne de commande. En lançant <code>git commit</code> tout court, l'éditeur de texte (<code>$EDITOR</code>) s'ouvre automatiquement pour inviter à saisir un commentaire de soumission.
<pre>
[master 17eaa3e] mon premier commit
1 file changed, 1 insertion(+)
create mode 100644 mon_nouveau_fichier.txt
</pre>
Constatons immédiatement l'effet de ce commit :
<source lang="bash">
git log
</source>
Notre dernier commit apparaît, en premier de la liste (c'est le plus récent).
<pre>
commit 17eaa3e060b29d708a87867dcb725b7ec64ffaeb
Author: Michel Boudran <michel.boudran@fr.wikibooks.org>
Date: Tue Jul 22 22:00:39 2014 +0200
mon premier commit
</pre>
Avec
<source lang="bash">
git log --graph
</source>
On voit clairement que notre commit est lié au commit précédent.
== Modifier un fichier ==
Faisons une autre modification. Par exemple, modifions le fichier <tt>mon_nouveau_fichier.txt</tt> en ajoutant une ligne.
<source lang="bash">
echo "Une seconde ligne pour un second test de git" >> mon_nouveau_fichier.txt
</source>
Voyons ce que git nous dit :
<source lang="bash">
git status
</source>
<pre>
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
# (use "git push" to publish your local commits)
#
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: mon_nouveau_fichier.txt
#
no changes added to commit (use "git add" and/or "git commit -a")
</pre>
Git nous indique bien que le fichier a été modifié, voyons le résumé de ces modifications telles qu'elles sont perçues par git :
<source lang="bash">
git diff
</source>
<pre>
diff --git a/mon_nouveau_fichier.txt b/mon_nouveau_fichier.txt
index a031263..762359c 100644
--- a/mon_nouveau_fichier.txt
+++ b/mon_nouveau_fichier.txt
@@ -1 +1,2 @@
Ceci est un test de git
+Une seconde ligne pour un second test de git
</pre>
Git nous montre la ligne qui a été ajoutée (le « + » en début de ligne).
On va maintenant faire le commit. Comme précédemment, il faut au ajouter le fichier au *staging* :
<source lang="bash">
git add mon_nouveau_fichier.txt
</source>
{{remarque|
Si vous voulez ajouter au staging tous les changements qui ont été effectués (fichiers ajoutés, modifiés, supprimés), il vous suffit de faire
<source lang="bash">
git add --all
</source>
}}
<source lang="bash">
</source>
<pre>
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
# (use "git push" to publish your local commits)
#
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: mon_nouveau_fichier.txt
#
</pre>
<source lang="bash">
git commit -m "ma première modification"
</source>
</pre>
[master 5556307] ma première modification
1 file changed, 1 insertion(+)
<pre>
Remarquez le code « 5556307 » : il s'agit d'une abréviation de l'identifiant unique de l'objet Git (en l'occurrence une soumission). Chaque objet est haché en {{w|SHA-1}}. L'identifiant complet est en fait <tt>5556307824d8d0425b38c9da696b84430e30f09f</tt>, mais généralement les huit premiers caractères suffisent à l'identifier à coup sûr.
</source lang="bash">
git log --graph
</source>
<pre>
* commit 5556307824d8d0425b38c9da696b84430e30f09f
| Author: Michel Boudran <michel.boudran@fr.wikibooks.org>
| Date: Tue Jul 22 22:18:08 2014 +0200
|
| ma première modification
|
* commit 17eaa3e060b29d708a87867dcb725b7ec64ffaeb
| Author: Michel Boudran <michel.boudran@fr.wikibooks.org>
| Date: Tue Jul 22 22:00:39 2014 +0200
|
| mon premier commit
|
</pre>
On voit bien que nos deux <tt>commits</tt> se succèdent.
== Supprimer un fichier ==
<source lang="bash">
git rm mon_nouveau_fichier.txt
git status
</source>
<pre>
# On branch master
# Your branch is ahead of 'origin/master' by 2 commits.
# (use "git push" to publish your local commits)
#
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# deleted: mon_nouveau_fichier.txt
#
</pre>
Il n'est pas nécessaire de faire un add.
<source lang="bash">
git commit -m "ma première suppression de fichier"
</source>
<pre>
[master 77ea581] ma première suppression de fichier
1 file changed, 2 deletions(-)
delete mode 100644 mon_nouveau_fichier.txt
</pre>
== Continuer ==
Vous maîtrisez désormais le strict minimum pour travailler avec git. Vous pouvez ajouter, modifier et supprimer des fichier et enregistrer les changements dans votre dépôt local ainsi que consulter l'historique des modifications. Cela reste toutefois une vision simpliste de la gestion de projet et nous verrons dans la suite comment exploiter les branches locales et comment partager votre travail avec d'autres contributeurs en publiant vos modifications sur un dépôt distant et en récupérant les modifications des autres contributeurs.
[[en:Git/Introduction]]
|