Le principe

learngitbranching est un jeu dans le navigateur : chaque niveau vous donne un graphe de commits et un graphe cible, et vous devez passer de l'un à l'autre en tapant de vraies commandes git (commit, branch, merge, rebase,push…). C'est, à mon sens, la meilleure façon de "voir" ce que font les commandes que nous avons manipulées en séance ; en clair, une heure ou deux de jeu vous feront gagner beaucoup de temps le jour où vous devrez démêler un vrai dépôt.

Le jeu comporte deux onglets, et donc deux séquences de niveaux : la séquence principale (20 niveaux) et la séquence distante (16 niveaux, sur les dépôts distants, que nous verrons en GIT2). Les voici, telles que le jeu les nomme en interne, car c'est sous ces noms qu'elles apparaîtront dans votre fichier de progression.

Séquence principale — 20 niveaux, +1 point

  • Introduction : intro1, intro2, intro3, intro4
  • Montée en puissance : rampup1, rampup2, rampup3, rampup4
  • Déplacer le travail : move1, move2, move3, move4
  • Mélange : mixed1, mixed2, mixed3, mixed4, mixed5
  • Avancé : advanced1, advanced2, advanced3

Séquence distante — 16 niveaux, +1 point

  • Push & pull : remote1, remote2, remote3, remote4, remote5, remote6, remote7, remote8
  • Vers l'origine et au-delà : remoteAdvanced1, remoteAdvanced2, remoteAdvanced3, remoteAdvanced4, remoteAdvanced5, remoteAdvanced6, remoteAdvanced7, remoteAdvanced8

Le barème

  • +1 point si les 20 niveaux de la séquence principale sont tous résolus ;
  • +1 point de plus si les 16 niveaux de la séquence distante le sont aussi.

Ces points s'ajoutent tels quels à votre note de Git (celle du quiz de GIT2), le total étant plafonné à 20. Il n'y a pas de demi-point : une séquence compte quand elle est complète.

⚠️ Un niveau que vous auriez ouvert avec show solution n'est pas marqué comme résolu par le jeu : il faudra le refaire vous-même pour qu'il compte.

Pourquoi il faut exporter votre progression

Le jeu n'a pas de compte utilisateur : votre progression vit uniquement dans lelocalStorage de votre navigateur, sur votre ordinateur. Concrètement, rien ne me parvient tout seul, et si vous changez de navigateur ou d'ordinateur, vous repartez de zéro.

D'où deux conséquences pratiques. D'abord, c'est à vous de m'envoyer votre progression, sous la forme d'un petit fichier JSON déposé dans votre dépôtgit-homework (la procédure suit). Ensuite, je vous recommande d'exporter régulièrement, pas seulement à la fin : si vous perdez votre progression, la fonction importLevelProgress(json), dans la même console, vous permet de la restaurer à partir du dernier export.

La procédure, en trois gestes

  1. Ouvrez le jeu dans le navigateur où vous avez joué : https://learngitbranching.js.org/?NODEMO=&locale=fr_FR.

  2. Ouvrez la console du navigateur : F12 (ouCmd+Option+I sur Mac), puis l'onglet « Console ». Tapez-y, puis validez :

    copy(exportLevelProgress())

    Votre progression est alors dans le presse-papier. Au besoin, si cette fonction n'existe pas dans votre version du jeu, le repli suivant fait la même chose :

    copy(localStorage.getItem('solvedMap'))
  3. Collez le résultat dans un fichier nommé exactement solvedMap.json, à la racine de votre dépôt git-homework, puis commit et push :

    git add solvedMap.json
    git commit -m "Progression learngitbranching"
    git push

    Le tout avant le , c'est-à-dire la veille de GIT2. Je relève les dépôts à ce moment-là ; les exports envoyés plus tôt sont simplement écrasés par le suivant, vous pouvez donc pousser autant de fois que vous voulez.

À quoi ressemble le fichier

Un objet JSON, une entrée par niveau résolu. Vous devriez y reconnaître les noms listés plus haut :

{
  "intro1": { "solved": true, "best": true },
  "intro2": { "solved": true, "best": false },
  "rampup1": { "solved": true, "best": true },
  ...
}

Une version plus ancienne du jeu produit la forme courte { "intro1": true, ... } : elle est acceptée aussi. Si ce que vous collez ne ressemble à aucune des deux, quelque chose s'est mal passé à l'étape 2 : écrivez-moi.

Une note honnête

Vous l'aurez compris, ce fichier est déclaratif : rien ne m'empêche de le fabriquer à la main, et je n'ai aucun moyen de le vérifier. Je vous fais donc confiance. Le bonus est là pour récompenser le temps passé à jouer, et ce temps est le vrai gain : unsolvedMap.json rempli sans avoir joué ne vous apprendra rien sur git.

Le dépôt git-homework

C'est le dépôt que vous avez créé en fin de GIT1, à la fin du TP, et poussé sur GitHub sous le nom exact git-homework. Il peut être public ou privé, à votre choix ; s'il est privé, ajoutez-moi en collaborateur (raphaelpra), exactement comme vous l'avez fait pour pe-homework, sans quoi je ne pourrai pas le relever.

Vous ne l'avez pas encore créé ? Les consignes sont dans le TP de GIT1.

Pour toute question, vous pouvez me contacter par mail ou m'en parler en séance.