GIT

L'outil de versioning par excellence

Top 10

Je ne vais pas rentrer dans une longue présentation de Git car il y a déjà des milliers de tuto sur internet. En quelques mots, Git est un système qui va te permettre de faire des sauvegardes de ton code. Il est extrêmement utilisé dans le milieu du développement informatique comme outil de partage et de déploiement.

Si tu veux connaître les 10 commandes que j’utilise le plus en Git, alors n’aie pas peur, utilise le scroll de ta souris !

1) Init

Git peut s’utiliser avec des logiciels comme sourcetree mais pour te montrer les commandes, on va utiliser le Terminal.

La commande suivante te permet de créer un dépôt Git sur ta machine.

git init

Un message t’indique si le dépôt a bien été créé. L’erreur la plus commune que tu pourrais rencontrer, c’est lorsque tu lances la commande et que le dossier n’est pas vide.

Tu peux voir également qu’un dossier « .git » a été créé dans le répertoire de travail.

Initialized empty Git repository in /Users/golendercaria/Sites/git/.git/

2) Status

La commande la plus utilisée est sans doute celle-ci, grâce à elle tu peux connaître à tout moment l’état de tes fichiers et de ton dépôt.

Dans les exemples qui vont suivre, tu pourras voir que j’utilise constamment cette commande avant de faire quoique ce soit.

git status

3) Add

Grâce à VIM créons un nouveau fichier, là où nous avons initialisé le dépôt Git.

vim index.html

Pour l’exemple, j’ajoute grossièrement un squelette de page HTML.

<html>
        <head>

        </head>
        <body>

        </body>
</html>

Faisons un peu un git status.

On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)

	index.html

nothing added to commit but untracked files present (use "git add" to track)

Git nous donne plusieurs informations. Pour ce chapitre, ce qui nous intéresse, c’est le « Untracked files » qui veut dire que le fichier index n’est pas encore « suivi« . Et justement, afin de voir son évolution et d’avoir l’historique des changements, nous allons devoir le suivre.

Ci-dessous, Git nous donne la commande à utiliser pour nous permettre de faire cela et d’ajouter le fichier à ce que l’on appelle l’index.

git add index.html

Astuce, il est aussi possible de mettre un « . » à la place de index.html, le point va faire en sorte d’ajouter tous les fichiers à l’index.

4) Commit

Une fois le fichier ajouté, je lance un coup de git status et voici ce que je vois dans la console.

On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

	new file:   index.html

Git indique qu’il y a un fichier qui peut être commit donc nous allons pouvoir sauvegarder notre fichier. Avec l’option « m » je peux directement ajouter un commentaire pour aller plus vite, sinon il y a une seconde étape.

git commit -m "Sauvegarde du fichier index.html"

Voilà ! C’est dans la boîte.

[master (root-commit) e170d90] Sauvegarde du fichier index.html
 1 file changed, 8 insertions(+)
 create mode 100644 index.html

5) Diff

Il existe une commande qui permet de voir les modifications qui ont été faites sur un fichier depuis sa dernière sauvegarde.

Pour commencer, réalisons d’abord un petit changement dans le fichier index.html et ajoutons un titre à la page.

vim index.html
<html>
        <head>
                <title>Titre de ma page</title>
        </head>
        <body>

        </body>
</html>

Ensuite, lançons la fameuse commande qui va permettre de voir les modifications en spécifiant le nom de notre fichier html.

git diff index.html 

Le petit «  » représente la ligne qui a été supprimée, et le « + » la ligne qui a été ajoutée.

diff --git a/index.html b/index.html
index c418f26..788d5d6 100644
--- a/index.html
+++ b/index.html
@@ -1,6 +1,6 @@
 <html>
        <head>
-
+               <title>Titre de ma page</title>
        </head>
        <body>

Je vais enregistrer les modifications.

git add .
git commit -m "Ajout d'un titre"

6) Clone

Lorsque j’utilise Git, c’est souvent avec un serveur ou un service associé, comme par exemple Bitbucket ou Github sur lesquels j’initialise mes dépôts et qui me sert de serveur de sauvegarde.

Afin de gagner du temps et d’avoir plus facile dans les explications à venir, je renomme le dossier dans lequel je travaille et je fais comme si c’était mon serveur distant.

mv git server

Je crée un nouveau répertoire, je me place dedans et ensuite je clone mon dépôt distant (qui est local pour le coup).

mkdir local_site
cd local_site
git clone /Users/golendercaria/Sites/server/.git

En regardant ce qu’il y a dans mon nouveau dossier, je peux voir un répertoire server, donc pour faire plus propre je déplace tout à la racine et je supprime ce dossier.

mv server/* ./
mv server/.git ./
rm -r server

Et je n’oublie pas de convertir le dépôt en mode bare, c’est-à-dire sans répertoire de travail, comme ce dépôt va servir de « stockage ».

git config --bool core.bare true

7) Push

Je vais faire une nouvelle modification afin de générer un commit.

vim index.html
<html>
        <head>
                <title>Titre de ma page</title>
        </head>
        <body>
                <h1>Git c'est super !</h1>
        </body>
</html>
git add .
git commit -m "Ajout h1"

Lorsque j’ai fini de faire des modifications sur mes fichiers, je peux les envoyer sur mon serveur distant.

Pour faire un envoi, c’est la commande push que je vais utiliser.

git push

Dans la console, je peux voir que mes fichiers ont bien été envoyés.

Counting objects: 3, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 313 bytes | 313.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To /Users/golendercaria/Sites/server/.git
   7897bcf..c4a1fb9  master -> master

8) Branch

Dans Git il y a le concept de branche. Au commencement il n’y en n’a qu’une seule et elle se nomme master. Dans le modèle que j’utilise, cette branche représente toujours la production.

Pour faire simple, les branches te permettent de faire une copie complète du code et de pouvoir travailler sur cette copie de manière totalement isolée. Mais pas d’inquiétude ! Je vais te montrer deux trois exemples concrets pour bien comprendre le fonctionnement.

Voici la commande pour afficher la liste des branches.

git branch

Pour le moment, je n’ai qu’une seule branche.

* master

Pour créer une nouvelle branche, il suffit d’ajouter un nom. Dans l’exemple suivant je vais ajouter une branche de développement.

git branch dev

Si je retape un git branch je peux voir que ma branche a été bien créée. L’astérisque me permet de savoir sur quelle branche je suis en train de travailler.

  dev
* master

Pour me déplacer dans une nouvelle branche c’est la commande ci-dessous que je vais utiliser.

git checkout dev

Git m’indique que j’ai bien changé de branche.

Switched to branch 'dev'

Pour bien comprendre le concept, je vais faire une modification dans cette branche. J’ouvre mon fichier html et je rajoute un paragraphe. Ensuite je commit exactement de la même manière qu’auparavant.

<html>
        <head>
                <title>Titre de ma page</title>
        </head>
        <body>
                <h1>Git c'est super !</h1>
                <p>Je suis dans la branche dev</p>
        </body>
</html>

Maintenant si je change de branche, à ton avis qu’est-ce qu’il va se passer ? Et bien tu vas voir, je refais un checkout sur master.

git checkout master

J’édite le fichier html et voici ce que je vois.

<html>
        <head>
                <title>Titre de ma page</title>
        </head>
        <body>
                <h1>Git c'est super !</h1>
        </body>
</html>

Tu peux voir que le paragraphe n’est pas présent dans cette branche.

9) Fusion

Git dispose d’un système de fusion de codes qui est très pratique lorsque l’on travaille à plusieurs sur un même projet.

Sur la branche master, je vais fusionner la branche dev avec la commande merge (l’option –no-ff sert à désactiver le fast-forward, je l’expliquerai dans un second article).

git merge --no-ff dev

Quand Git va faire un merge, il va en fait faire un commit. Dans mon cas je vais laisser le message par défaut.

Pour sauvegarder et quitter, appuie sur la touche esc et entre wq (pour write quit), ensuite presse la touche enter.

Merge branch 'dev'
  
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.

Si tu vois le message suivant, c’est que le merge s’est bien passé.

Merge made by the 'recursive' strategy.
 index.html | 1 +
 1 file changed, 1 insertion(+)

Et si j’édite le fichier html, je peux voir que mon paragraphe a bien été ajouté dans cette copie.

<html>
        <head>
                <title>Titre de ma page</title>
        </head>
        <body>
                <h1>Git c'est super !</h1>
                <p>Je suis dans la branche dev</p>
        </body>
</html>

10) Pull

Lorsqu’un développeur fait un push sur le dépôt central, les autres développeurs qui ont fait un clone du projet auront alors la possibilité de récupérer les changements via la commande pull.

P.S. Pour l’exemple, j’ai copié le dépôt et j’ai fait une modification dans le fichier html (j’ai changé dev en master dans le paragraphe).

git pull

Git m’indique que la récupération a bien été faite.

remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 1), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From /Users/golendercaria/Sites/server/
   c4a1fb9..a631dd3  master     -> origin/master
Updating 6b55532..a631dd3
Fast-forward
 index.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Je vérifie mon fichier html pour voir si le paragraphe a bien été récupéré.

<html>
        <head>
                <title>Titre de ma page</title>
        </head>
        <body>
                <h1>Git c'est super !</h1>
                <p>Je suis dans la branche master</p>
        </body>
</html>

Fin

Voilà, cet article touche à sa fin, j’espère que j’ai pu te faire découvrir Git avec simplicité. Pour ma part. je trouve que Git est un fantastique outil et je l’utilise au quotidien.

12/05/2018

Yann Vangampelaere - nouslesdevs -

Sinon jete un coup d’oeil aux autres catégories

Ma boîte aux lettres

Tu veux me demander quelque chose ?