L3 Miage 2018-2019 initiation à git

De $1

Introduction

Ceci n'est en aucun cas un "cours de git", mais juste quelques rappels sur les fonctionnalités les plus courantes, EN LIGNE DE COMMANDE.

Concepts importants à comprendre au préalable :

Les différentes étapes du workflow de git, dans une image clickable : http://ndpsoftware.com/git-cheatsheet.html#loc=index; Ce site est utile car d'un coup d'oeil (et d'un click) il rappelle les commandes les plus utiles.

Qu'est-ce qu'un "gestionnaire de versions de projets"  ? 

 Wikipédia: "Un logiciel de gestion de versions (ou VCS en anglais, pour version control system) est un logiciel qui permet de stocker un ensemble de fichiers en conservant la chronologie de toutes les modifications qui ont été effectuées dessus. Il permet notamment de retrouver les différentes versions d'un lot de fichiers connexes."

C'est aussi un outil de travail collaboratif quand il est décentralisé comme Git.

Configurer git pour qu'il vous reconnaisse lors de vos actions

Définir son pseudo :

  • git config --global user.name "votre_pseudo"

Définir son email :

Initialiser git pour qu'il trace les versions des fichiers de votre projet 

Lorsque vous êtes placé dans le repertoire vide de votre projet dans votre terminal, exécutez la commande suivante :

  • git init

 Vérifiez l'existence d'un dossier .git dans votre projet. C'est là où tout la magie de git s'opère.

Après l'initialisation de git, une branche principale nommée "master" est créée et vous êtes placé dessus. Retenez juste cette indication jusqu'à ce qu'on aborde les branches.

Tracer votre premier fichier

Créer un fichier (index.html par exemple) dans votre projet et exécutez la commande suivante :

  • git status

Cette commande vous donne l'état actuel de tous vos fichiers modifiés, supprimés ou encore renommés sur la branche en cours (ici master) qui n'ont pas été indexés.

Connaitre en détails les modifications apportées à vos fichiers qui n'ont pas encore été indexés

  • git diff

Git vous fait remarquer que certains fichiers de votre projet sont "Untracked" ce qui veut dire qu'ils sont présents dans votre espace de travail mais pas indexé par git.

Demander à git d'ajouter à son index les fichiers que l'on veut tracer (ici index.html) :

  • git add index.html

 Vous pouvez également spécifier un dossier à la commande git add, git ajoutera alors à l'index recursivement tous les fichiers et dossiers contenus dans ce dossier. 

Par exemple j'aurais pu ici utiliser à la place de git add index.html:

  • git add .

 Ici l'index de git ne gardera qu'une référence du fichier et ne connait pas son contenu.

Commiter votre premier fichier (de l'index au dépôt local)

Maintenant que notre fichier est indexé on veut que git sauvegarde son contenu dans le dépôt local :

  • git commit -m "Ajout de la page index"

Ici le paramètre "-m" définis que le texte entre guillemets qui va suivre est le message attaché à votre commit et qui le décris.

Une note à propos de la facon d'écrire vos messages de commit : http://tbaggery.com/2008/04/19/a-not...-messages.html

 Votre espace de travail est désormais "à jour" avec le dépôt local, ils ne possèdent plus de différences. Pour vérifiez :

  • git status

 Résultat : "nothing to commit, working directory clean"

Tips : Pour ne pas avoir à ajouter à l'index tout le temps vos fichiers avant de commiter, vous pouvez spécifier le paramètre "a" à votre commande commit ce qui va ajouter pour vous à l'index toutes les modifications des fichiers de votre espace de travail avant de commiter. 

Example :

  • git commit -am "Ajout de la page index"

Consulter l'historique de vos commits

Tous vos commits sont listés dans un log qui est consultable en tapant :

  • git log

Résultat (exemple) : 

commit 0806d9d4cdf3a3d48c1695470bbcb1d95a750004

Author: tigitz <philippe.segatori@gmail.com>

Date:   Sun Nov 16 15:01:13 2014 +0100

Ajout de la page index

Vous remarquerez que vos commits possèdent un numéro d'identification, ici : 0806d9d4cdf3a3d48c1695470bbcb1d95a750004. Cela nous servira plus tard.

Modifier votre dernier commit local (possible seulement si votre commit est local et n'a pas été poussé sur le dépôt distant) :

Imaginons que nous avons oublié d'ajouter un fichier index2.html à notre index et qu'il n'a pas était pris en compte dans notre dernier commit, pour éviter de refaire un commit et polluer notre historique on va modifier notre dernier commit en ajoutant au préalable le nouveau fichier dans l'index.

Créez votre fichier index2.html (à la racine de votre projet toujours) et tapez :

  • git add index2.html
  • git commit --amend

Un éditeur de texte s'ouvre dans le terminal pour vous permettre d'éditer votre message, entrez le texte suivant :

Ajoute la page index.html et index2.html

Vous remarquez en consultant l'historique de vos commit (git log) que votre précédent commit à était écrasé par votre "commit --amend", en effet il possège un nouvel identifiant : 531be448a1665cfd811b72cd368f2a648eb83ea1

Annuler votre dernier commit local ou revenir à un commit local précédent (possible seulement si votre commit est local et n'a pas été poussé sur le dépôt distant) :

Il y a plusieurs facon d'annuler vos commit :

  1. soft : Seul le commit est retiré de l'index de Git ; vos fichiers, eux, restent modifiés.
  2. hard : Si vous voulez annuler votre dernier commit et les changements effectués dans les fichiers.

 Modifiez votre fichier index.html et commitez vos modifications :

  • git commit -m "Commit qui va être supprimé"

 On veut désormais supprimer notre dernier commit et revenir à l'avant dernier en GARDANT les modification du fichier qui ont été faites, ce qui reviens à faire un reset SOFT :

  • git reset HEAD^

Ici HEAD^ spécifie que le commit jusqu'auquel on souhaite remonter en supprimant ceux plus récent est l'avant-dernier. Il y a plusieurs notations pour spécifié le commit jusqu'auquel on souhaite remonter.

  • HEAD : dernier commit ;
  • HEAD^ : avant-dernier commit ;
  • HEAD^^ : avant-avant-dernier commit ;
  • HEAD~2 : avant-avant-dernier commit (notation équivalente) ;
  • d6d98923868578a7f38dea79833b56d0326fcba1 : indique un numéro de commit précis ;
  • d6d9892 : indique un numéro de commit précis (notation équivalente à la précédente, bien souvent écrire les premiers chiffres est suffisant tant qu’aucun autre commit ne commence par les mêmes chiffres).

 En consultant votre log de commit vous verrez que votre dernier commit a disparu et que le HEAD (la tête de l'index = votre dernier commit indexé) est revenu à votre avant-dernier commit, soit ici votre premier commit.

 Si vous ouvrez votre fichier index.html, vous verrez que vos modifications SONT TOUJOURS présentes.

On veut désormais supprimer notre dernier commit et revenir à l'avant dernier en SUPPRIMANT les modifications du fichier qui ont été faites, ce qui reviens à faire un reset HARD :

On recréé un nouveau commit :

  • git commit -am "Commit qui va être supprimé"

On effectue le reset hard :

  • git reset --hard HEAD^

En consultant votre log de commit vous verrez que votre dernier commit a disparu et que le HEAD (la tête de l'index = votre dernier commit indexé) est revenu à votre avant-dernier commit, soit ici votre premier commit.

Si vous ouvrez votre fichier index.html, vous verrez que vos modifications NE SONT PLUS présentes.

Partager votre travail, publier le sur un dépôt distant :

Jusqu'à présent vous avez pu voir la puissance de git pour naviguer dans les différentes versions de votre projet sur votre machine. Ne serais-ce pas intéréssant si je pouvais partager mon projet à mes collègues comme je le fait d'habitude par ftp ou autres mais en leur donnant cette fois-ci la possibilité de naviguer à travers l'historique du projet comme moi je peux le faire sur ma machine ?

Oui c'est possible ! Avec le dépôt distant !

Inscrivez-vous sur Bitbucket.org et créez un repository (dépot distant).

Revenez dans votre terminal sur votre machine et tapez la commande suivante pour connecter votre dépot local au dépot distant de bitbucket que vous venez de créer :

Dans mon cas j'aurais cette commande :

Avant d’envoyer vos commits, je vous recommande fortement de consulter votre log local afin de savoir ce que vous vous apprêtez à envoyer :

  • git log -p

"Pourquoi ?" me direz-vous ... et bien parce qu'un push est irréversible. Une fois que vos commits sont publiés, il deviendra impossible de les supprimer ou de modifier le message de commit ! Réfléchissez donc à deux fois avant de faire un push. C’est pour cela que je recommande de ne faire un push qu’une fois par jour, afin de ne pas prendre l’habitude d’envoyer définitivement chacun de vos commits trop vite.

Maintenant que le git sur ma machine connait l'adresse du dépot distant et que mes commits sont vérifiés, je peux lui dire de "pousser" tout mon travail local, y compris l'historique, vers le dépôt distant :

  • git push -u origin --all

Le paramètre "-u" va permettre de synchroniser vos branches du dépôt local avec les branches du dépot distant, on verra l'utilité par la suite.

"--all" va spécifier à git de pousser toutes les branches et les tag de votre projet, on verra l'utilité par la suite.

Résultat de la commande :

Compressing objects: 100% (3/3), done.

Writing objects: 100% (3/3), 336 bytes | 0 bytes/s, done.

Total 3 (delta 0), reused 0 (delta 0)

To https://philippe_segatori@bitbucket....mation-git.git

 * [new branch]      master -> master

Branch master set up to track remote branch master from origin.

On peux remarquer que lors du transfert les données ont été compressées (gros avantage sur le transfert FTP etc.). Et que notre branche principal "master" a bien été synchronisé sur la branche master du dépôt distant.

Bitbucket propose une interface pour consulter de facon graphique votre tracking git du projet.

Annuler un commit publié sur le dépôt distant

Dans le cas malheureux où vous auriez quand même envoyé un commit erroné sur le serveur, il reste possible de l’annuler… en créant un nouveau commit qui effectue l’inverse des modifications (souvenez-vous qu’il n’est pas possible de supprimer un vieux commit envoyé, on ne peut qu’en créer de nouveaux.). Les lignes que vous aviez ajoutées seront supprimées dans ce commit, et inversement.

On modifie le fichier index.html, on fait un commit de cette modification qu'on va "revert" plus tard et on "pousse" le tout sur le dépôt distant :

  • git commit -am "commit qui va être revert"
  • git push

 On revert desormais le commit qui a été publié en récupérant son identifiant :

  • git log (on récupère l'identifiant du commit)
  • git revert 2ca12 (seulement le début des chiffres, git se charge de trouver le commit correspondant)

 On vous invite à entrer un message de commit. Un message par défaut est indiqué dans l’éditeur.

 Une fois que c’est enregistré, le commit d’annulation est créé. Il ne vous reste plus qu’à vérifier que tout est bon et à le publier:

  • git push

Récupérer un projet depuis un dépôt distant :

Maintenant que votre projet est entreposé dans un dépot distant, vous pourrez y accéder depuis n'importe quelle machine même si celle-ci n'a pas le projet en local. Ce qui correspond aux besoins de vos collègues qui veulent contribuer à votre projet alors que vous l'avez déjà commencé seul.

Pour ce faire, il faut qu'ils aient un compte bitbucket. Sur l'interface bitbucket de votre projet, cliquez sur la molette "Settings" à gauche et cliquer sur "Acess Management", insérer dans le champs user le pseudo de votre collègue et déroulez la liste des droits pour choisir "Write" qui lui permettra en plus de pouvoir "lire" votre projet(consulter les fichiers, les télécharger), de le modifier en ajoutant des commits, des branches etc..

 Maintenant qu'ils ont accès à votre dépôt distant, ils peuvent le cloner. Ce qui aura pour effet de transferer tous le dépôt distant sur un dépot local de votre collègue où il pourra travailler sur ses modifications sans interferer avec votre travail en cours.

Demandez donc à votre collègue de taper la commande suivante :

 Dans mon cas :

Il pourra alors consulter comme vous, tout l'historique du projet en tapant les diverses commandes vu plus haut.

Mettre à jour votre dépot local avec le dépôt distant :

  • git pull origin master

 

Lister les branches

  • git branch

Naviguer à travers les branches

  • git checkout nom_branche

 

 

 

 

 

 

 

 

Mots clés:
 
Images (1)
Voir 1 - 1 sur 1 images | Voir tout
Aucune description
gitCheats...  Actions
Commentaires (0)
Vous devez être connecté pour poster un commentaire.