Vous n'êtes pas connecté. Connexion
|
|
L3 Miage 2018-2019 initiation à gitDe $1Table des matières
IntroductionCeci 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 actionsDéfinir son pseudo :
Définir son email :
Initialiser git pour qu'il trace les versions des fichiers de votre projetLorsque vous êtes placé dans le repertoire vide de votre projet dans votre terminal, exécutez la commande suivante :
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 fichierCréer un fichier (index.html par exemple) dans votre projet et exécutez la commande suivante :
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 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) :
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:
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 :
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 :
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 :
Consulter l'historique de vos commitsTous vos commits sont listés dans un log qui est consultable en tapant :
Résultat (exemple) :
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 :
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 ( 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 :
Modifiez votre fichier index.html et commitez vos modifications :
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 :
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.
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 :
On effectue le reset hard :
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 :
"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 :
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 :
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 distantDans 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 :
On revert desormais le commit qui a été publié en récupérant son identifiant :
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:
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. |
Powered by MindTouch Deki Open Source Edition v.8.08 |