TD09 : Défis Git

Consignes

Dans ce TD, nous vous invitons à relever quelques défis Git, sous forme d'exercices VPL dans Moodle !

Pour chaque défi, vous trouverez dans /tmp/local un dépôt Git avec une configuration initiale préparée pour vous ! Vous pouvez interagir en ligne de commande en utilisant le bouton Run dans VPL pour découvrir quel est cet état initial. Pour remporter un défi, il vous faudra remplir le fichier cmd.sh avec les commandes Git appropriées et cliquer sur le bouton Eval.

Afin de réaliser plus facilement ces défis, nous avons enrichi Git avec la commande git play-commit <file>, dont le but est d'ajouter un nouveau commit dans la branche courante. Il se contente d'ajouter un nouveau fichier (passé en argument) ou de le modifier si ce fichier existe déjà.

Par exemple : git play-commit C2.

Cet alias est un raccourci pour effectuer les commandes suivantes :

date >> C2
git add C2
git commit -m "add C2"

Par ailleurs, vous pouvez afficher les logs de manière plus lisible avec l'alias git glog que nous avons rajouté. Voici comment rajouter cet alias à votre propre configuration, si vous le souhaitez.

git config --global alias.glog "log --all --graph --oneline --decorate=short"

Afin de vérifier que vous avez réussi un défi, nous procédons à plusieurs vérifications sur les modifications apporté par votre fichier cmd.sh à votre dépôt Git. Ces vérifications se basent essentiellemnt sur les opérateurs <revision>~<n> et <revision>^<n> qui permettent de naviguer dans l'historique de votre dépôt Git à partir d'une certaine revision, comme HEAD, master, origin/master, 61fcec2 (hash au format SHA-1), ...

Par exemple :

A    <-- HEAD
| \
B  | <-- HEAD~1 = HEAD^1 (this first ancestor of HEAD)
|  C <-- HEAD^2 (the second ancestor of HEAD)
D  | <-- HEAD~2 = HEAD^1^1
| /
E    <-- HEAD~3

Pour plus de détails sur la notion de revision, consultez la documentation ou le manuel en ligne : git help revisions.

Quelques remarques importantes pour réussir les défis

  • Attention, après 3 tentatives Eval, une pénalité de -10% est appliquée automatiquement à chaque nouvelle tentative !
  • Pas de limitation en revanche pour Run.
  • Pour chaque défi, la branche master a été renommée en masterXX avec XX une clé numérique individuelle pour chaque étudiant !
  • A chaque éxécution de Run ou Eval, un nouveau dépôt Git est entièrement reconstruit, ainsi les hash des commits sont différents à chaque exécution.
  • Commencez par faire git log ou git glog en mode Run pour découvrir l'état initial du dépôt Git, ainsi que le nouveau nom de votre branche master.
  • Le script cmd.sh est exécuté en mode non interactif lors de l'évaluation VPL, ce qui implique qu'il n'est pas possible de lancer dans ce script des programmes interactifs comme nano ou emacs !
  • Le script cmd.sh est automatiquement interrompu à la première commande qui échoue, c'est-à-dire qui retourne un exit status différent de success (0).

A vous de jouer !