====== Stash et GIT ======
L'ensemble de ce TD est inspiré des documents de Sébastien Mosser, Philippe Collet et Cyril Cecchinel.
===== Initialisation du mot de passe =====
Pour pouvoir utiliser votre repository Git, vous devez d'abord accéder à Stash et pour cela vous devez initialiser votre mot de passe.
La procédure d'initialisation du mot de passe suit les étapes suivantes :
* Allez sur : https://atlas.i3s.unice.fr/crowd/
* Cliquez sur le lien "Can't access my account?"
* Cochez ensuite "I have forgotten my password" : votre username est ''lp-votrenumetudiant'' tout en minuscule
* Un lien vous sera envoyé par mail **sur votre adresse étudiante**
Crowd vous permet ensuite de définir ou de changer votre mot de passe.
===== Stash et clone Git =====
====== Initialisation ======
Cette étape est à refaire pour chaque nouvelle machine !
Vous pouvez désormais accéder au portail Stash qui va contenir les informations sur vos repository Git : https://atlas.i3s.unice.fr/stash/.
Dans le cadre de ce TD vous ne vous intéressez qu'au repository **evalgit**
Lorsque vous naviguez dans un repository vide, Stash vous donne quelques informations pour la configuration.
Il est en effet nécessaire que votre installation de Git soit configurée de manière à ce que vos noms et adresse email soit renseigné.
Si un commit ne peut être identifié comme provenant de vous il est considéré comme anonyme lors des évaluations !
Vous pouvez accéder à Git en ligne de commande sur vos machines en téléchargeant l'outil disponible à l'emplacement suivant : [[https://www.dropbox.com/s/kpt8kfh5cm669xw/PortableGit.zip?dl=0|PortableGit]]
Vous configurer ensuite Git pour savoir qui commit :
* git config --global user.name "Votre Nom"
* git config --global user.email supermail@gmail.com
Afin d'outrepasser les problèmes de certificat il vous faut aussi ajouter cette configuration :
* git config --global http.sslVerify false
====== Manipulation Git ======
Une fois toutes ces opérations effectuées, placez vous dans votre répertoire et initialisez un nouveau dépôt git :
* git init monRepo
: cette commande va créer un nouveau dépôt local dans un dossier nouvellement créé nommé "monRepo"
* Récupérez ce fichier ''{{:2015_2016:lp:dam:gl:menu.java|Menu.java}}'' (vous ferez attention de renommer le fichier en ''Menu.java'') et modifiez le pour ajouter des plats de restaurants, ligne par ligne :
* Steak tartare
* Salade norvégienne
* Filet de dorade
* Bar à la citronnelle
* Vérifiez le résultat en tapant la commande ''git status''
* Utilisez les commandes ''git add'' et ''git commit'' pour faire votre premier commit contenant le fichier Menu.java, ** attention à ne pas oublier le message de commit !**
Il existe plusieurs manières de commiter en laissant un message de commit :
* ''git commit -m "le message de commit"'',
* ''git commit'' sans argument vous ouvre un éditeur (vi par défaut - echap et :wq pour sortir en écrivant le message)
* et d'autres que vous pourrez retrouver dans la documentation
* Modifiez le fichier ''Menu.java'' pour ajouter des fonctionnalités (choix d'afficher un dessert ou une entrée)
Vous vérifierez à chaque fois que votre fichier compile et se lance, pour rappel : ''javac Menu.java'' ''java Menu''
* Affichez l'historique des modifications et enregistrez les dans un fichier ''log.txt'' que vous ajoutez au dépôt.
* Visualisez les modifications effectuées dans ''Menu.java'' entre le premier et le deuxième commit grâce à ''git diff'' et enregistrer le résultat dans un fichier ''diff.txt'' que vous ajoutez au dépôt.
Sous un shell linux vous pouvez utiliser ''>'' pour que la sortie standard soit redirigée sur un fichier. Par exemple ''ls -l > toto.txt'' écrit la liste des fichiers du répertoire courant dans le fichier toto.txt.
* Liez votre dépôt local au dépôt distant. Vous retrouvez normalement ces informations sur la page du dépôt dans Stash. La commande devrait être de la forme : git remote add origin https://@atlas.i3s.unice.fr/stash/scm/pdam/evalgit.git
* Poussez ensuite les commits effectuez grâce à la commande ''git push -u origin master''
* Vous serez normalement amené à gérer des conflits : résolvez les conflits en conservant l'ensemble des logs et des diffs. Organisez les logs et diff du plus récents au plus vieux. La résolution des conflits passe par la modification textuelle des fichiers : les différentes versions sont séparées par des lignes décrites par les balises "<<<<<<<<" et ">>>>>>>>". Commitez les changements effectués.
Vous aurez normalement besoin d'utiliser la commande ''git pull -u origin master'' pour récupérer le contenu distant du dépôt.
====== Introduction aux branches (sans git flow) ======
* Créez une branche à votre nom dans le dépôt : ''git branch votrenom''
* Basculez sur cette branche : ''git checkout votrenom''
* Vérifiez que vous êtes sur la bonne branche : ''git branch''
* Ajoutez des plats dans ''Menu.java'' et commitez au fur et à mesure vos modifications
* Basculez sur la branche principale (master)
* Observez le fichier ''Menu.java'' et modifiez des plats, puis commitez
* Fusionnez la branche que vous aviez créée : ''git merge votrenom''
* Résolvez les conflits et commitez
* Pushez les changements
====== Introduction à Git flow ======
* Initialisez git flow dans votre dépôt : ''git flow init''. Conservez les choix par défaut de git flow.
* Créez une nouvelle feature dans le dépôt : ''git flow feature start platX'' (un type au choix)
* Ajoutez le plat dans ''Menu.java''
* Commitez et faites un push : que se passe-t-il ? Comment résoudre le problème ?
* Terminez la feature : ''git flow feature finish platX''
* Faites à nouveau un push