Skip to content

Instantly share code, notes, and snippets.

@GuillaumeDesforges
Created September 14, 2021 08:32
Show Gist options
  • Save GuillaumeDesforges/0769bba3f0b1f50d4c0ae8ad66e06608 to your computer and use it in GitHub Desktop.
Save GuillaumeDesforges/0769bba3f0b1f50d4c0ae8ad66e06608 to your computer and use it in GitHub Desktop.

Cours git - ENPC IMI 2021 - TP

Introduction

La pratique se fait en binôme, avec 2 ordinateurs par binôme (1 ordinateur par personne).

L'objectif est de montrer comment git permet de travailler collaborativement, et comment gérer les conflits lors de l'intégration des changements distants.

Dans ce TP nous abordons les notions suivantes:

  • les commits
  • le remote et ses interactions
  • les branches (locales, remote)
  • le merge

Collaborer avec git

Avant de commencer

Commencez par configurer git sur vos ordinateurs [1 et 2]

git config --global user.name "Prénom Nom"
git config --global user.email prenom.nom@example.com

Créez un compte GitHub: https://github.com/ et retenez le "handle" (votre pseudo).

Mise en place

Mettre en place le projet avec GitHub

Une seule des deux personnes doit effectuer ces étapes.

  1. Créez le repository
    • en haut à droite, cliquez sur "+"
    • cliquez sur "New repository"
    • mettez le nom que vous voulez, la description que vous voulez
    • sélectionnez "Private"
    • validez et créez le repository
  2. Autorisez votre binôme à y accéder
    • allez dans l'onglet "Settings"
    • dans la page "Manage access"
    • cliquez sur le bouton "Invite a collaborator"
    • entrez son "handle", cliquez dessus, puis "Add XXX to this repository"

Téléchargez le projet sur vos ordinateurs

Dans l'onglet "Code", cliquez sur le bouton "HTTPS" et copiez le lien (par exemple https://github.com/GuillaumeDesforges/cours-git-2021.git)

Clonez le projet sur vos ordinateurs (sur les deux ordinateurs)

git clone <url>

Un dossier a été créé qui correspond au nom du repository sur GitHub, déplacez-vous-y:

cd <nom du dossier>

Collaborer sans conflit

Assignez vous chacun la mention "ordinateur 1" et "ordinateur 2" pour la suite du TP.

Nous allons d'abord aborder le workflow le plus simple.

Vous pouvez vérifier que le contenu est à jour en rafraîchissant la page web GitHub de votre repository.

  • Sur l'ordinateur 2
    • Récupérez ces changements et intégrez-les
    • Editez le fichier, par exemple en enlevant la ligne 8 ("Hello world")
    • Créez un commit
    • Envoyez ce commit sur le repository
  • Sur l'ordinateur 1
    • Récupérez ces changements et intégrez-les

Collaborer avec conflit

  • Sur l'ordinateur 1
    • Editez le fichier, par exemple en changeant le nom de la fonction main
    • Créez un commit
    • Envoyez ce commit sur le repository
  • Sur l'ordinateur 2
    • Editez le fichier, par exemple en changeant le nom de la fonction main (avec un autre nom que celui choisi par votre binôme)
    • Créez un commit
    • Essayez d'envoyez ce commit sur le repository
    • Récupérez ces changements et intégrez-les
    • Envoyez vos changements sur le repository
  • Sur l'ordinateur 1
    • Récupérez ces changements et intégrez-les

Collaborer avec les Pull Requests

  • Sur l'ordinateur 1
    • Créez une nouvelle branche
    • Editez le fichier
    • Créez un commit sur cette nouvelle branche
    • Envoyez cette nouvelle branche sur le repository
    • Dans GitHub, créez une "Pull Request" et assignez votre binôme en "reviewer"
  • Sur l'ordinateur 2
    • Recevez la notification, allez sur la Pull Request
    • Réalisez une revue de la branche (insérez au moins 1 commentaire demandant un changement)
  • Sur l'ordinateur 1
    • Recevez la notification, allez sur la Pull Request
    • Relisez la revue, répondez aux commentaires ou effectuez les changements demandés
  • Vous pouvez répéter ce processus plusieurs fois
  • Une fois le résultat satisfaisant, c'est l'ordinateur 1 qui doit "merge"
    • Cliquez sur le bouton "Merge Pull Request"
    • Vous pouvez généralement supprimer la branche en cliquant sur "Delete branch"

Handout: quelques commandes git

Commandes:

  • git config: configure git sur votre ordinateur
  • git init: initialise le dossier actuel comme un repository local git
  • git status: indique l'état de git dans le dossier actuel
  • git add <path>: ajoute un fichier à l'index
  • git rm --cached <path>: enlève un fichier de l'index (sans le supprimer réellement)
  • git commit -m "<description>": crée un commit à partir de l'index actuel
  • git log: affiche l'historique
  • git log --all: affiche l'historique complet
  • git log --all --graph --oneline: affiche l'historique complet joliment
  • git reset <ref>: fait que l'index ressemble à la version <ref>
  • git reset --hard <ref>: fait que les fichiers locaux ressemblent à <ref> et que la branche actuelle pointe vers <ref>
  • git checkout <ref>: fait pointer HEAD vers <ref> et mets à jour les fichiers locaux
  • git branch <branch>: crée une nouvelle branche nommée <branch>
  • git branch: liste les branches
  • git branch -vv: liste les branches avec plus d'info
  • git branch -d <branch>: supprime une branche
  • git merge <branch>: merge la branche distante nommée <branch> vers la branche actuelle
  • git clone <url>: crée un dossier avec pour remote origin l'url donnée
  • git push -u origin HEAD: envoie la branche actuelle vers le remote origin
  • git push: met à jour la branche actuelle vers le remote origin
  • git fetch: met à jour la copie des branches distantes
  • git merge FETCH_HEAD: merge la branche distante associée à la branche actuelle
  • git pull: raccourci pour git fetch puis git merge FETCH_HEAD
  • git pull --ff-only: raccourci pour git fetch puis git merge FETCH_HEAD, mais ne merge automatiquement que si c'est un fast-forward

A toute commande on peut ajouter l'option --help pour savoir ce qu'elle fait et comment l'utiliser. Par exemple: git merge --help

Description des paramètres:

  • <path>: chemin relatif vers un fichier
  • <ref>: id de commit ou nom de branche
  • <branch>: nom de branche
  • <remote>: nom de remote
  • <url>: url de remote
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment