Github

Présentation

GitHub est une plateforme en ligne qui permet d'héberger des dépôts Git et de collaborer sur des projets de développement. Il est largement utilisé par les développeurs et les entreprises pour partager du code, suivre les modifications, et travailler ensemble sur des projets de toutes tailles.

GitHub offre de nombreuses fonctionnalités qui facilitent la gestion et la collaboration sur les projets :

  • Hébergement de dépôts : Stockez et partagez votre code en ligne.
  • Collaboration : Gérez des contributions d'équipe avec des pull requests et des revues de code.
  • Historique : Suivez les changements et accédez à toutes les versions de votre projet.
  • Gestion des tâches : Utilisez des issues pour signaler des bugs ou planifier des améliorations.
  • Automatisation : Intégrez des workflows grâce à GitHub Actions.

Créer un compte GitHub

Pour commencer à utiliser GitHub, vous avez besoin d'un compte :

  1. Accédez à la page d'inscription du site officiel de Github.
  2. Remplissez les champs nécessaires à l'inscription.
  3. Une fois inscrit, vous aurez accès à votre tableau de bord où vous pourrez créer et gérer vos dépôts.

Gestion des dépots sur Github

Un dépôt (repository) est un espace où votre projet est stocké.

Créer un dépôt

Pour créer un dépot :

  1. Connectez-vous à votre compte GitHub.
  2. Cliquez sur la photo de profil > Your repositories > New.
  3. Remplissez les informations requises, comme le nom du dépôt, et choisissez s'il sera public ou privé.
  4. Cliquez sur Create repository pour valider.

Cloner un dépôt GitHub

Pour travailler en local sur un projet hébergé sur GitHub, vous pouvez cloner le dépôt :


                    git clone <cheminDuDepotDistant>
                

Exemple :


                    git clone https://github.com/<nomUtilisateur>/<nomDuDepot>.git
                

Publier un dépot Git local sur Github

Si vous travaillez sur un dépôt Git local qui n'est pas encore hébergé en ligne, vous pouvez facilement le publier sur GitHub. Toutefois, pour que la synchronisation fonctionne, votre dépôt local doit contenir au moins un commit. Voici la procédure la plus simple pour mettre en ligne votre dépôt local :

  1. Créer un dépot sur Github comme décrit précédemment, dans la partie "Créer un dépôt". Lors de la configuration du dépot, assurez-vous que l'option "Initialize this repository with: Add a README file" n'est pas cochée.
  2. À l'aide de Git Bash, dans le répertoire de votre dépôt local, liez ce dernier au dépôt distant que vous venez de créer :
    
                                git remote add origin https://github.com/<nomUtilisateur>/<nomDuDepot>.git
                            

    La commande git remote add associe votre dépôt local à un dépôt distant, que Git identifie ici sous l'alias origin. Cet alias permet d'interagir facilement avec le dépôt distant.

    Pour vérifier que l'association a bien été effectuée, utilisez la commande git remote -v, qui affichera l'URL du dépôt distant configuré pour les opérations de lecture et d'écriture.

  3. Renommer la branche principale en "main" pour s'aligner avec les conventions par défaut de GitHub:
    
                                git branch -M main
                            
  4. Envoyer la branche "main" sur le dépôt distant, la configurer comme branche par défaut et établit une relation de suivi :
    
                                git push -u origin main
                            
  5. Une fenêtre "Connect to GitHub" devrait s'ouvrir, vous proposant plusieurs options pour authentifier votre machine locale avec votre compte GitHub, notamment la connexion via un navigateur ou l'utilisation d'un jeton d'accès personnel. La méthode la plus simple consiste à choisir la connexion via le navigateur et à cliquer sur Authorize git-ecosystem pour valider l'accès.

Créer un fork

Un fork est une copie indépendante d'un dépôt existant, généralement créée pour travailler sur un projet sans affecter le dépôt original. Cette copie est hébergée sur une plateforme comme GitHub, sous votre propre compte.

Le fork est couramment utilisé dans les projets open source ou collaboratifs, car il permet de tester des modifications, d'ajouter des fonctionnalités ou de corriger des bugs, tout en conservant le projet original intact. Une fois vos changements prêts, vous pouvez proposer de les intégrer au projet principal via une pull request.

Pour créer un fork :

  1. Rendez-vous sur la page Github du projet que vous désirez "forker".
  2. Cliquez sur le bouton Fork > Create a new fork.
  3. Remplissez les champs de configuration.
  4. Validez en cliquant sur le bouton Create fork.

Synchroniser son dépot local avec Github

Synchroniser un dépôt local avec GitHub permet de maintenir une connexion entre votre travail en local et le dépôt distant hébergé sur la plateforme. Cette synchronisation garantit que les modifications apportées en local peuvent être envoyées sur GitHub, et que les mises à jour effectuées par d'autres collaborateurs sur le dépôt distant peuvent être récupérées pour maintenir votre travail à jour.

Mise à jour depuis le dépôt distant

Si des modifications ont été effectuées sur la branche distante sur laquelle vous travaillez, vous pouvez les récupérer localement avec la commande suivante :


                    git pull
                

Publier les changements locaux

Si vous souhaitez partager les modifications effectuées localement avec le dépôt distant, vous pouvez les envoyer avec la commande suivante. N'oubliez pas de valider vos changements avec un commit avant de les envoyer.


                    git push
                

Pour envoyer un nouveau tag sur le dépot distant :


                    git push origin <nomDuTag>
                

Pour envoyer tous les nouveaux tags sur le dépot distant :


                    git push origin --tags
                

Pour supprimer un tag sur le dépot distant :


                    git push origin --delete <nomDuTag>
                

Pour envoyer une nouvelle branche sur le dépot distant :


                    git push --set-upstream origin <nomDeLaBranche>
                

Pour supprimer une branche sur le dépot distant :


                    git push origin --delete <nomDeLaBranche>
                

Vérifier les mises à jour et l'état du dépôt

Avant de réaliser des modifications locales sur votre projet ou de publier vos changements sur le dépôt distant, il est conseillé de vérifier si des mises à jour ont été effectuées sur ce dernier. Cela permet d'éviter les conflits potentiels et de garantir une synchronisation correcte entre le dépôt local et distant.

Mettre à jour les informations locales sur l'état du dépôt distant :


                    git fetch
                

Indiquer si des modifications locales sont en attente de commit, ou si la branche locale est en avance ou en retard par rapport au dépôt distant. En un coup d'œil, on sait ainsi s'il faut d'abord envoyer les commits locaux ou récupérer les changements distants.


                    git status
                

Voici un exemple de sortie de la commande git status lorsque des mises à jour sont disponibles sur le dépôt distant :


                    On branch main
                    Your branch is behind 'origin/main' by 1 commit, and can be fast-forwarded.
                        (use "git pull" to update your local branch)

                    nothing to commit, working tree clean
                

Le message "Your branch is behind 'origin/main' by 1 commit…" indique qu'il existe un commit supplémentaire sur le dépôt distant, non présent localement. Pour synchroniser votre branche avec le dépôt distant et intégrer ces modifications, vous pouvez exécuter la commande git pull.

Quant au message "nothing to commit, working tree clean", il signifie qu'aucun fichier local n'a été modifié depuis le dernier commit : votre copie locale est donc "propre" et prête à accueillir de nouvelles modifications sans risque de conflit.

Gestion des conflits

Dans certaines situations, des conflits peuvent survenir sur Git lorsque les modifications locales et distantes touchent les mêmes lignes de code ou lorsqu'elles ne peuvent pas être fusionnées automatiquement. Cela se produit généralement lorsque les commits locaux et distants ne sont pas alignés.

Dans l'exemple suivant, un collègue a réalisé un commit et l'a poussé sur le dépôt distant après avoir modifié le fichier README.md. De votre côté, sans avoir effectué un git pull pour récupérer ces changements, vous avez également modifié le même fichier avec des modifications différentes, puis validé vos modifications localement avec un commit. Suite à l'utilisation des commandes git fetch et git status, le message suivant s'affiche :


                    On branch main
                    Your branch and 'origin/main' have diverged,
                    and have 1 and 1 different commits each, respectively.
                        (use "git pull" if you want to integrate the remote branch with yours)

                    nothing to commit, working tree clean
                

Le message "Your branch and 'origin/main' have diverged" signifie que des commits ont été effectués en local et sur le dépôt distant, sans être synchronisés : vous avez des modifications non envoyées, tandis que le dépôt distant contient aussi des changements non présents localement.

Pour intégrer les modifications du dépôt distant, vous pouvez utiliser la commande git pull mais vous obtiendrez le message suivant :


                    Auto-merging README.md
                    CONFLICT (content): Merge conflict in README.md
                    Automatic merge failed; fix conflicts and then commit the result.
                

Le message indique qu'un conflit s'est produit lors de la tentative de fusion entre la version locale et la version distante du fichier README.md. L'utilisateur est maintenant invité à résoudre ce conflit manuellement :


                    Partie du fichier n'étant pas en conflit...
                    <<<<<<< HEAD
                    La partie locale provoquant le conflit...
                    =======
                    La partie distante provoquant le conflit...
                    >>>>>>> hash du commit distant, par exemple : f8c6c719c859b12465184cd019e11558d65494e3
                    Partie du fichier n'étant pas en conflit...
                

Pour résoudre un conflit, il faut décider des éléments à conserver pour corriger le fichier. Une fois la correction effectuée, supprimez les marqueurs de conflit, tels que <<<<<<< HEAD, =======, et >>>>>>> hash du commit distant. Ensuite, validez les modifications avec les commandes git add et git commit, puis envoyez-les au dépôt distant avec git push.

Lier son compte local à GitHub

La première fois que vous essayez d'interagir avec un dépôt GitHub depuis votre machine locale, une authentification sera nécessaire. Une fenêtre "Connect to GitHub" devrait s'ouvrir, vous proposant plusieurs options pour lier votre machine locale à votre compte GitHub. La méthode la plus simple consiste à choisir la connexion via le navigateur : une nouvelle page s'ouvrira, où vous devrez vous connecter à votre compte GitHub et autoriser l'accès en cliquant sur Authorize git-ecosystem.

Créer un jeton d'accès personnel

Cependant, dans certaines situations, il peut être préférable ou nécessaire d'utiliser un jeton d'accès personnel (PAT). Par exemple, si votre environnement de développement n'autorise pas l'ouverture de fenêtres de navigateur pour l'authentification, si vous utilisez Git en ligne de commande sur un serveur distant sans interface graphique, ou si vous souhaitez automatiser certaines tâches avec des scripts. Le PAT est également utile pour gérer des permissions spécifiques, comme l'accès à des dépôts privés. C'est une clé unique générée depuis votre compte GitHub, qui remplace le mot de passe et offre une méthode sécurisée et flexible pour accéder à votre compte tout en contrôlant les autorisations.

Pour créer un jeton d'accès personnel (PAT), suivez la procédure suivante :

  1. Connectez-vous à votre compte GitHub.
  2. Accédez aux jetons d'accès personnels : photo de profil > Settings > Developer settings > Personal access tokens
  3. Configurez un nouveau jeton en cliquant sur le bouton Generate new token :
    • Note descriptive permettant d'identifier ce jeton par la suite.
    • Durée de validité du jeton.
    • Les permissions (vous pouvez commencer en sélectionnant uniquement le groupe "repos" et "delete_repo").
  4. Validez le jeton en cliquant sur Generate token.
  5. Copiez et sauvegardez votre jeton immédiatement. Veillez à le stocker dans un gestionnaire de mots de passe ou un emplacement sécurisé, car il ne sera plus accessible une fois cette page fermée.

Remplacer les données d'identification

Si vous souhaitez remplacer vos données d'identification, par exemple pour changer le type d'authentification ou pour utiliser un jeton avec des permissions adaptées à vos besoins, vous pouvez procéder comme suit :

  • sur Windows : Utiliser le Gestionnaire d'identification
    1. Ouvrez le Gestionnaire d'identification via le menu Démarrer ou le Panneau de configuration.
    2. Dans l'onglet "Informations d'identification Windows", recherchez l'entrée liée à github.com.
    3. Supprimez l'entrée correspondante.
    4. La prochaine interaction avec Git demandera vos identifiants ou un jeton d'accès personnel (PAT).
  • sur macOS : Utiliser le Trousseaux d'accès
    1. Ouvrez l'application "Trousseaux d'accès" en la recherchant avec Cmd + Space.
    2. Recherchez github.com ou l'URL du dépôt distant.
    3. Cliquez avec le bouton droit sur l'entrée correspondante et choisissez "Supprimer".
    4. Lors de la prochaine utilisation de Git, vous serez invité à vous reconnecter.
  • sur Linux : Utiliser le gestionnaire de clés (Keyring)
    1. Ouvrez le gestionnaire de mots de passe :
      • Sous GNOME : Lancez "Seahorse".
      • Sous KDE : Utilisez "KWalletManager".
    2. Recherchez github.com ou l'URL associée au dépôt.
    3. Supprimez l'entrée correspondante.
    4. La prochaine interaction avec Git demandera vos identifiants ou un jeton d'accès personnel.

Exercices

Exo-github-1

  1. Si vous n'avez pas encore de compte GitHub, rendez-vous sur la page d'inscription officielle pour en créer un.
  2. Créez un dossier nommé git-exo-github-1.
  3. Initialisez un dépôt Git
  4. Créez un fichier README.md à la racine du projet.
  5. Ajoutez le contenu suivant # exo-gestion-des-branches. dans le fichier README.md.
  6. Ajoutez le fichier à la zone de préparation.
  7. Réalisez un commit avec le message suivant "Initial commit".
  8. Visualisez le commit.
  9. Créer un dépot distant sur Github.
  10. Synchronisez votre dépot local avec le dépot distant.
  11. Rendez-vous sur Github pour vérfier que votre dépot distant a bien été synchronisé à votre dépot local.
  12. Créez une branche nommée menu-hamburger sur votre dépot local.
  13. Affichez la liste des branches et vérifiez sur laquelle vous vous trouvez.
  14. Basculez sur la branche menu-hamburger.
  15. Affichez la liste des branches et vérifiez sur laquelle vous vous trouvez.
  16. Créez un fichier menu-hamburger.js à la racine du projet.
  17. Ajoutez le fichier à la zone de préparation.
  18. Réalisez un commit avec le message suivant "init menu hamburger".
  19. Visualisez le commit.
  20. Envoyez votre nouvelle branche vers votre dépot distant.
  21. Rendez-vous sur Github pour vérfier que votre dépot distant a bien reçu la branche menu-hamburger.
  22. Ajoutez la ligne ## Ligne créée sur le dépôt distant directement dans le fichier README.md de la branche principale du dépôt distant en utilisant l'interface web de GitHub.
  23. Retournez sur votre dépôt local et basculez sur la branche principale.
  24. Vérifiez s'il existe des différences de version entre celui-ci et le dépôt distant.
  25. Mettez à jour votre dépôt local en récupérant les dernières modifications depuis le dépôt distant.
  26. Vérifiez localement si la ligne ## Ligne créée sur le dépôt distant est bien présente dans le fichier README.md.
  27. Effacez votre dépot distant.

Exo-github-2

  1. Formez des groupes de 2 ou 3 personnes.
  2. Un membre de chaque groupe doit faire un fork du projet situé à l'URL suivante : https://github.com/vanmaerckechri/exo-github.
  3. Ce même membre doit inviter les autres membres du groupe en tant que collaborateurs sur le dépôt forké.
  4. Chaque membre du groupe doit cloner ce dépôt forké pour travailler en local.
  5. Chaque membre doit créer un fichier nommé leNomDeSaRecette.txt dans le dossier recettes/ déjà présent.
  6. Il ne faut évidemment pas rédiger une recette dans le fichier, un petit "Loren ipsum" suffira.
  7. Dans le fichier README.md, dans la rubrique ## Liste des recettes, chaque membre doit ajouter le nom de sa recette et le fichier correspondant. Exemple : - spaghetti bolognaise : spaghetBolo.txt.
  8. Une fois vos modifications terminées en local, synchronisez votre dépôt local avec le dépôt en ligne.
  9. Organisez-vous pour que tout se déroule sans accroc. Utilisez les méthodes et outils de votre choix pour gérer la coordination et éviter les conflits.