Prérequis
Il n'y a aucun prérequis pour ce cours
Description
Apprendre à gérer un projet sur github avec la création de milestones, d'issues et de project pour suivre et faire avancer les tâches.
Salut, je viens encore te voir car j'ai des difficultés avec Git que je dois utiliser pour mon projet.
Bonjour Arthur, tu n'arrives pas à versionner tes sources?
J'y arrive à peu près, même si je ne comprends pas toujours ce que je fais. Mais mon chef m'a demandé de me servir de GitHub aussi pour gérer mon projet, et lui fournir des données sur son avancement. Et je ne vois pas du tout comment faire ça...
Je comprends, on va tout reprendre depuis le début, tu vas voir il y a beaucoup de fonctionnalités disponiblse sur GitHub pour mieux gérer son projet.
Pour commencer on va créer un nouveau compte en se rendant sur GitHub.
Puis créer un nouveau repository pour notre projet.
D'un projet tu veux dire?
Oui, sauf que c'est une fonctionnalité de GitHub qui s'appelle project, il suffit de cliquer sur l'onglet "Projects" pour y accéder et en créer un.
Il y a un formulaire à remplir assez simple, on y précise un nom et éventuellement une description. On peut aussi sélectionner un template, qui définira un format de project préétabli. Mais pour te montrer comment ça fonctionne, on ne va pas en sélectionner et on va créer notre propre organisation.
Le projet a bien été créé, et il est vide, le concept maintenant est de créer des colonnes pour les différentes étapes de notre développement. Que proposerais-tu?
Euh... En développement?
Effectivement ça pourrait être une des étapes, mais que fais-tu avant de développer et après ?
Et bien, rien...
Donc à aucun moment tu essaies de comprendre le besoin pour prévoir les fonctionnalités à développer ? Et jamais non plus tu ne termines un développement ?
Ah si effectivement
Donc je te propose que l'on crée trois colonnes qui seront "A réaliser", "En cours" et "Terminé".
Parfait, ça me va
Pour la première colonne "A réaliser" je te propose que nous sélectionnions le preset "todo", qui nous permettra de cocher les options "Newly Added" et "Reopened", je t'expliquerai après à quoi elles servent.
Pour la seconde, on va donc créer une colonne "En cours" et cocher la case newly added pour les pull requests.
Et enfin une colonne "Done" où l'on ajoute les issues "closed" et pull request "merged"
Notre projet est maintenant créé. Sais-tu ce qu'il nous reste à faire ?
Développer notre application ?
Pas encore, on va d'abord remplir ce tableau. Pour celà on va se rendre dans l'onglet Issues.
Et on va créer...
Une Issue !
Et bien non, pas tout de suite. Pour t'expliquer une Issue représente une tâche à réaliser, de préférence on essaye de les créer le plus unitairement possible, pour que chaque issue ne représente qu'une et une seule tâche à accomplir. Mais dans ce cas on risque d'en avoir rapidement beaucoup, et ça va être difficile de s'y retrouver.
Pour cela, on peut créer des Milestones, qui sont en quelque sorte, des thématiques de développement, pour regrouper un ensemble d'Issues. On clique donc sur "milestones" pour accéder à l'écran qui permet de les gérer.
Et ensuite on clique sur "New milestone" pour en créer une nouvelle. On va l'appeler initialisation du projet, car oui, le développement ce n'est pas que créer des fonctionnalités, il faut aussi installer les framework et outils que l'on va utiliser.
Et le "due date" ça sert à quoi ?
Très bonne question, en fait c'est une date prévisionnelle pour terminer l'ensemble des issues de cette milestone. Ça nous permet de prévoir une date à laquelle on devrait avoir terminé cette partie, et donc de voir si l'on est en retard, en avance ou dans les temps. C'est très pratique pour réussir à estimer combien de temps je dois passer sur chaque parties de mon projet pour terminer à une date donnée, et de m'adapter en fonction de mon avancement.
Maintenant parle-moi un peu plus de ton projet, que dois-tu faire ?
C'est un projet de messagerie interne pour l'entreprise, les collaborateurs doivent pouvoir communiquer entre eux avec, et il y aura des modérateurs et administrateurs pour gérer tout ça.
Ok, je te propose que l'on crée donc plusieurs milestones, pour les utilisateurs, les modérateurs et les administrateurs.
Et maintenant on va pouvoir créer des issues, on retourne donc sur l'onglet, et on clique sur "New issue". Tu remarques qu'on peut renseigner pas mal d'informations, pour commencer un titre, qui décrit l'issue, on va faire par exemple "Connexion d'un utilisateur". On peut y ajouter un commentaire, il y a quelques outils de mise en forme pour le texte du commentaire qui sont assez classiques, mais il y en a un en particulier que je trouve très utile. Ce sont les task-list.
Ces task-list vont ajouter des cases à cocher dans notre commentaire, et on pourra ainsi cocher ces cases au fur et à mesure que l'on réalise les différents besoins de cette fonctionnalité. Je t'en remplis quelques unes.
On a aussi à droite d'autres informations que l'on peut préciser, pour commencer "Assignees" permet de définir à qui cette tâche est attribuée. Si l'on travaille seul c'est assez peu utile, mais en équipe c'est extrêmement pratique, on pourra facilement identifier les tâches que l'on doit réaliser. On peut aussi s'en servir pour transférer des issues à d'autres personnes, si toutes les tâches ne sont pas de notre responsabilité.
Ensuite il y a la milestone à sélectionner, on en a déjà parlé, je pense que tu as compris à quoi ça sert, et laquelle je vais choisir.
Pour la connexion? Je dirais la milestone Utilisateurs
Tout à fait !
Et enfin il faut que l'on sélectionne le projet, ici c'est simple nous n'en avons qu'un, on ne peut pas se tromper. Mais sache que sur de plus gros projets, on pourrait avoir plusieurs Projects, qui concernent différentes tâches.
Il ne nous reste plus qu'à enregistrer l'issue.
Tu noteras qu'à côté du titre de l'issue il y a un "#1".
J'avais noté oui, mais je ne comprend pas trop ce que c'est.
C'est un identifiant pour l'issue, tu verras qu'à chaque fois que tu en crées une il y aura un chiffre différent pour pouvoir les identifier facilement. Retiens le simplement pour le moment, on y reviendra plus tard. Maintenant si on se rend sur notre projet, tu vas remarquer que cette issue est déjà présente dans la colonne "A réaliser". C'est grâce à la case que nous avions cochée tout à l'heure pour que les nouvelles issues soient automatiquement ajoutées à cette colonne !
Ok, j'ai tout compris
Je te laisse en créer quelques unes supplémentaires si tu as tout compris alors !
Ah , j'aurais mieux fait de tourner ma langue avant de parler... D'accord je fais ça ; dis-moi ce que tu en penses.
C'est pas mal, maintenant si tu commences à travailler sur l'issue "Connexion d'un utilisateur", comment vas-tu procéder ?
Il faut que j'aille dans l'issue pour modifier son status?
C'est beaucoup plus simple que ça, tu peux "glisser-déposer" les issues d'une colonne à une autre !
Ah ! C'est pratique
Tu peux aussi cliquer sur une issue pour voir son détail dans un espace à droite de l'écran, et cocher les cases prévues au fur et à mesure que tu avances sur ton travail. Et tu remarqueras que dans la colonne, on voit la progression des tâches à réaliser sur l'issue juste en dessous du titre de celle-ci !
Enfin, quand toutes les cases sont cochées et que tu a fini ton travail sur cette issue, tu peux la clôturer en cliquant sur le bouton "Close issue", elle passe alors automatiquement dans la colonne "Terminé".
Et enfin, si l'on retourne sur notre milestone, on peut voir l'avancement de celle-ci grâce aux issues qui ont été clôturées, et donc mieux gérer notre avancement et notre reste à faire sur le projet.
C'est génial ! Je ne pensais pas que l'on pouvait faire autant de choses avec GitHub !
Il reste encore un dernier point, quand tu réalises un commit avec git, dois-tu préciser un commentaire à chaque fois ?
Oui tout à fait
Hé bien à l'avenir, pense à préciser l'identifiant d'issue que nous avons vu tout à l'heure, ça va permettre à github de lier un commit à une issue, et donc plus tard de retrouver le code associé à une tâche réaliser très facilement ! Je te montre un exemple pour faire ça :
Bien entendu il faudra modifier le #1 avec l'identifiant de l'issue associée, tu as vu tout à l'heure comment le connaitre quand tu crées l'issue.
Oui, c'est parfait. Cette fois je pense que j'ai tout compris, je vais pouvoir gérer mon projet sur GitHub grâce à toi.
Une dernière remarque, je te conseille de créer tout ton projet, avec l'ensemble des issues et des milestones dès le début, avant même de commencer le développement de l'application, sinon tu n'auras jamais cette vision globale du travail à réaliser, et tu perdras l'avantage que te donnent ces outils. Il pourra toujours y avoir un imprévu et donc l'ajout d'une nouvelle issue en cours de projet, c'est aussi le concept des méthodes agiles, mais il faut que le plus possible soit précisé dès le début !
Les méthodes à Gilles? C'est qui lui ?
Non les méthodes agiles, ou l'agilité si tu préfères. On en parlera une autre fois.
Je suis impatient ! Merci à toi pour tous ces conseils !
Bonjour Arthur, tu n'arrives pas à versionner tes sources?
J'y arrive à peu près, même si je ne comprends pas toujours ce que je fais. Mais mon chef m'a demandé de me servir de GitHub aussi pour gérer mon projet, et lui fournir des données sur son avancement. Et je ne vois pas du tout comment faire ça...
Création d'un compte et repository
Je comprends, on va tout reprendre depuis le début, tu vas voir il y a beaucoup de fonctionnalités disponiblse sur GitHub pour mieux gérer son projet.
Pour commencer on va créer un nouveau compte en se rendant sur GitHub.
Puis créer un nouveau repository pour notre projet.
Création d'un project
D'un projet tu veux dire?
Oui, sauf que c'est une fonctionnalité de GitHub qui s'appelle project, il suffit de cliquer sur l'onglet "Projects" pour y accéder et en créer un.
Il y a un formulaire à remplir assez simple, on y précise un nom et éventuellement une description. On peut aussi sélectionner un template, qui définira un format de project préétabli. Mais pour te montrer comment ça fonctionne, on ne va pas en sélectionner et on va créer notre propre organisation.
Le projet a bien été créé, et il est vide, le concept maintenant est de créer des colonnes pour les différentes étapes de notre développement. Que proposerais-tu?
Euh... En développement?
Effectivement ça pourrait être une des étapes, mais que fais-tu avant de développer et après ?
Et bien, rien...
Donc à aucun moment tu essaies de comprendre le besoin pour prévoir les fonctionnalités à développer ? Et jamais non plus tu ne termines un développement ?
Ah si effectivement
Donc je te propose que l'on crée trois colonnes qui seront "A réaliser", "En cours" et "Terminé".
Parfait, ça me va
Pour la première colonne "A réaliser" je te propose que nous sélectionnions le preset "todo", qui nous permettra de cocher les options "Newly Added" et "Reopened", je t'expliquerai après à quoi elles servent.
Pour la seconde, on va donc créer une colonne "En cours" et cocher la case newly added pour les pull requests.
Et enfin une colonne "Done" où l'on ajoute les issues "closed" et pull request "merged"
Notre projet est maintenant créé. Sais-tu ce qu'il nous reste à faire ?
Développer notre application ?
Pas encore, on va d'abord remplir ce tableau. Pour celà on va se rendre dans l'onglet Issues.
Et on va créer...
Une Issue !
Et bien non, pas tout de suite. Pour t'expliquer une Issue représente une tâche à réaliser, de préférence on essaye de les créer le plus unitairement possible, pour que chaque issue ne représente qu'une et une seule tâche à accomplir. Mais dans ce cas on risque d'en avoir rapidement beaucoup, et ça va être difficile de s'y retrouver.
Pour cela, on peut créer des Milestones, qui sont en quelque sorte, des thématiques de développement, pour regrouper un ensemble d'Issues. On clique donc sur "milestones" pour accéder à l'écran qui permet de les gérer.
Et ensuite on clique sur "New milestone" pour en créer une nouvelle. On va l'appeler initialisation du projet, car oui, le développement ce n'est pas que créer des fonctionnalités, il faut aussi installer les framework et outils que l'on va utiliser.
Et le "due date" ça sert à quoi ?
Très bonne question, en fait c'est une date prévisionnelle pour terminer l'ensemble des issues de cette milestone. Ça nous permet de prévoir une date à laquelle on devrait avoir terminé cette partie, et donc de voir si l'on est en retard, en avance ou dans les temps. C'est très pratique pour réussir à estimer combien de temps je dois passer sur chaque parties de mon projet pour terminer à une date donnée, et de m'adapter en fonction de mon avancement.
Maintenant parle-moi un peu plus de ton projet, que dois-tu faire ?
C'est un projet de messagerie interne pour l'entreprise, les collaborateurs doivent pouvoir communiquer entre eux avec, et il y aura des modérateurs et administrateurs pour gérer tout ça.
Ok, je te propose que l'on crée donc plusieurs milestones, pour les utilisateurs, les modérateurs et les administrateurs.
Et maintenant on va pouvoir créer des issues, on retourne donc sur l'onglet, et on clique sur "New issue". Tu remarques qu'on peut renseigner pas mal d'informations, pour commencer un titre, qui décrit l'issue, on va faire par exemple "Connexion d'un utilisateur". On peut y ajouter un commentaire, il y a quelques outils de mise en forme pour le texte du commentaire qui sont assez classiques, mais il y en a un en particulier que je trouve très utile. Ce sont les task-list.
Ces task-list vont ajouter des cases à cocher dans notre commentaire, et on pourra ainsi cocher ces cases au fur et à mesure que l'on réalise les différents besoins de cette fonctionnalité. Je t'en remplis quelques unes.
On a aussi à droite d'autres informations que l'on peut préciser, pour commencer "Assignees" permet de définir à qui cette tâche est attribuée. Si l'on travaille seul c'est assez peu utile, mais en équipe c'est extrêmement pratique, on pourra facilement identifier les tâches que l'on doit réaliser. On peut aussi s'en servir pour transférer des issues à d'autres personnes, si toutes les tâches ne sont pas de notre responsabilité.
Ensuite il y a la milestone à sélectionner, on en a déjà parlé, je pense que tu as compris à quoi ça sert, et laquelle je vais choisir.
Pour la connexion? Je dirais la milestone Utilisateurs
Tout à fait !
Et enfin il faut que l'on sélectionne le projet, ici c'est simple nous n'en avons qu'un, on ne peut pas se tromper. Mais sache que sur de plus gros projets, on pourrait avoir plusieurs Projects, qui concernent différentes tâches.
Il ne nous reste plus qu'à enregistrer l'issue.
Tu noteras qu'à côté du titre de l'issue il y a un "#1".
J'avais noté oui, mais je ne comprend pas trop ce que c'est.
C'est un identifiant pour l'issue, tu verras qu'à chaque fois que tu en crées une il y aura un chiffre différent pour pouvoir les identifier facilement. Retiens le simplement pour le moment, on y reviendra plus tard. Maintenant si on se rend sur notre projet, tu vas remarquer que cette issue est déjà présente dans la colonne "A réaliser". C'est grâce à la case que nous avions cochée tout à l'heure pour que les nouvelles issues soient automatiquement ajoutées à cette colonne !
Ok, j'ai tout compris
Je te laisse en créer quelques unes supplémentaires si tu as tout compris alors !
Ah , j'aurais mieux fait de tourner ma langue avant de parler... D'accord je fais ça ; dis-moi ce que tu en penses.
C'est pas mal, maintenant si tu commences à travailler sur l'issue "Connexion d'un utilisateur", comment vas-tu procéder ?
Il faut que j'aille dans l'issue pour modifier son status?
C'est beaucoup plus simple que ça, tu peux "glisser-déposer" les issues d'une colonne à une autre !
Ah ! C'est pratique
Tu peux aussi cliquer sur une issue pour voir son détail dans un espace à droite de l'écran, et cocher les cases prévues au fur et à mesure que tu avances sur ton travail. Et tu remarqueras que dans la colonne, on voit la progression des tâches à réaliser sur l'issue juste en dessous du titre de celle-ci !
Enfin, quand toutes les cases sont cochées et que tu a fini ton travail sur cette issue, tu peux la clôturer en cliquant sur le bouton "Close issue", elle passe alors automatiquement dans la colonne "Terminé".
Et enfin, si l'on retourne sur notre milestone, on peut voir l'avancement de celle-ci grâce aux issues qui ont été clôturées, et donc mieux gérer notre avancement et notre reste à faire sur le projet.
C'est génial ! Je ne pensais pas que l'on pouvait faire autant de choses avec GitHub !
Il reste encore un dernier point, quand tu réalises un commit avec git, dois-tu préciser un commentaire à chaque fois ?
Oui tout à fait
Hé bien à l'avenir, pense à préciser l'identifiant d'issue que nous avons vu tout à l'heure, ça va permettre à github de lier un commit à une issue, et donc plus tard de retrouver le code associé à une tâche réaliser très facilement ! Je te montre un exemple pour faire ça :
{"language":"shell","content":"git commit -m \"Commentaire du commit #1\"","filename":"exemple"}
Bien entendu il faudra modifier le #1 avec l'identifiant de l'issue associée, tu as vu tout à l'heure comment le connaitre quand tu crées l'issue.
Oui, c'est parfait. Cette fois je pense que j'ai tout compris, je vais pouvoir gérer mon projet sur GitHub grâce à toi.
Une dernière remarque, je te conseille de créer tout ton projet, avec l'ensemble des issues et des milestones dès le début, avant même de commencer le développement de l'application, sinon tu n'auras jamais cette vision globale du travail à réaliser, et tu perdras l'avantage que te donnent ces outils. Il pourra toujours y avoir un imprévu et donc l'ajout d'une nouvelle issue en cours de projet, c'est aussi le concept des méthodes agiles, mais il faut que le plus possible soit précisé dès le début !
Les méthodes à Gilles? C'est qui lui ?
Non les méthodes agiles, ou l'agilité si tu préfères. On en parlera une autre fois.
Je suis impatient ! Merci à toi pour tous ces conseils !
Commentaires