This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
2018_2019:s2:td:git [2019/03/16 18:23] blay [Introduction à GIT] |
2018_2019:s2:td:git [2019/03/16 22:51] blay [Synchronisation de votre répertoire en groupe] |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Introduction à GIT ====== | ====== Introduction à GIT ====== | ||
+ | |||
+ | ===== Définition de l'environnement ===== | ||
- Adresse de gitlab : https://git-iutinfo.unice.fr/ | - Adresse de gitlab : https://git-iutinfo.unice.fr/ | ||
- Vous désactivez la vérification SSL <code> git config --global http.sslVerify false </code> | - Vous désactivez la vérification SSL <code> git config --global http.sslVerify false </code> | ||
- | - Pour savoir qui commite : <code> | + | - Suivez les instructions du dépôt (si vous ne les voyez plus : [[2018_2019:s2:td:git:depot|2018_2019:s2:td:git:depot]] |
- | git config --global user.name "myusername" | + | |
- | git config --global user.email "monadresse@unice.fr" | + | |
- | </code> | + | |
Pour les étudiants qui utilisent leur ordi perso, il est possible que vous ayez besoin de, ouvrir un Git CMD en administrateur, puis taper la commande suivante: | Pour les étudiants qui utilisent leur ordi perso, il est possible que vous ayez besoin de, ouvrir un Git CMD en administrateur, puis taper la commande suivante: | ||
<code> git config --system --unset credential.helper</code> | <code> git config --system --unset credential.helper</code> | ||
+ | ===== Git comme un historique des modifications ===== | ||
+ | Chaque étudiant du groupe a une tâche particulière, chacun choisit sa couleur : Blanc, Bleu, Vert, Jaune, Rouge | ||
+ | - Créer un fichier contenant une classe vice en fonction de votre couleur (public class X {}) | ||
+ | * Blanc : Game (Partie) | ||
+ | * Bleu : Player (Joueur) | ||
+ | * Vert : Move (Coup) | ||
+ | * Jaune : IA | ||
+ | * Rouge : GameManager | ||
+ | * Evidemment dans ce qui suit X est le nom de class créée par chacun. | ||
+ | - Comment interprétez-vous le résultat de la commande suivante <code> git status </code> | ||
+ | - Ajoutez votre fichier ''X.java'' comme git vous l'a dit : <code> git add X.java</code> | ||
+ | - Réinterprétez le résultat de la commande ''git status''. | ||
+ | - Le fichier ''X.txt'' est maintenant prêt à être versionné. <code> git commit -m "construction de la class X" </code> **ou** <code> git commit </code> ((Un éditeur s'ouvre qui dépend de votre configuration. Si c'est VIM pour sortir ":q". Si l'éditeur ne vous convient pas, vous pouvez le configurer par exemple <code> git config --global core.editor emacs </code>)) Quel message avez-vous en retour? | ||
+ | - Que donne la commande ''git status'' ? | ||
+ | - Apportez quelques modifications au fichier ''X.java''. | ||
+ | * Blanc : ajouter l'attribut ''Date date'' avec aussi ''import java.util.Date;'' (Game) | ||
+ | * Bleu : ajouter l'attribut String pseudo (Player) | ||
+ | * Vert : ajouter l'attribut LocalTime time; (Move) ((<code>import java.time.LocalTime; | ||
+ | public class Move { | ||
+ | private LocalTime time; | ||
+ | }</code>)) | ||
+ | * Jaune : ajouter l'attribut int level (IA) | ||
+ | * Rouge : ajouter la methode export (GameManager) ((<code>import java.util.Date; | ||
+ | public class Game { | ||
+ | private Date date; | ||
+ | }</code>)) | ||
+ | - Essayez de commiter ces modifications. Que se passe-t-il ? En vous aidant de la documentation accessible en tapant ''git help commit'', versionnez ces modifications (avec un message décrivant le changement) (( Au lieu d'un git add suivi d'un git commit vous pouvez préférer <code> git commit -a -m "ajout de l'attribut Y ..."</code> )) | ||
+ | - Affichez l’historique des modifications du dépôt. <code> git log </code> | ||
+ | - Et pour voir les modifications apportées par le dernier commit <code> git log -p -1 </code> et savoir qui fait quoi <code> git log --stat </code> ou <code> git log --pretty=format:"%h - %an, %ar : %s"</code> **etc.** | ||
+ | - En utilisant ''git diff'' , visualisez les modifications effectuées entre le premier commit et le second commit. Par exemple <code> git diff 71cfcd6 0c24491 </code> Attention l'ordre des commits modifie le résultat (un- devient un +). | ||
+ | - Modifiez plusieurs fois votre fichier par exemple en ajoutant des commentaires afin d’en avoir plusieurs versions. | ||
+ | - Le dernier commentaire ajouté ne vous plait finalement pas. Il existe deux manières de revenir à une version antérieure : de manière temporaire ou définitive. | ||
+ | - Exécuter ''git log'' et récupérez le hash (HASH) du commit où vous souhaitez revenir en arrière. | ||
+ | - Pour revenir en arrière de manière temporaire, exécutez <code> git checkout HASH</code> | ||
+ | - Vérifiez que votre fichier est dans son état antérieur. | ||
+ | - Revenez au dernier commit (HEAD) en exécutant <code> git checkout master</code> | ||
+ | - Pour revenir en arrière de manière définitive, et donc supprimer tout ce que vous avez fait depuis ce moment : <code> git reset --hard HASH </code> | ||
+ | - Dans ''git log'', vérifiez que tout ce que vous aviez effectué depuis ce commit a été effacé. | ||
- | git config --global http.sslVerify false | + | |
- | Et bien sûr pour savoir qui commite : | + | ==== Synchronisation de votre répertoire en groupe ==== |
- | + | ||
- | git config --global user.name "myusername" | + | |
- | etc. | + | |
- | Pour les étudiants qui utilisent leur ordi perso, il est possible que vous ayez besoin de, ouvrir un Git CMD en administrateur, puis taper la commande suivante: | + | |
- | + | ||
- | git config --system --unset credential.helper` | + | |
- | + | ||
- | Git global setup | + | |
- | git config --global user.name "BLAY Mireille" | + | |
- | git config --global user.email "mireille.blay@unice.fr" | + | |
- | + | ||
- | Create a new repository | + | |
- | git clone https://git-iutinfo.unice.fr/blay/ajeter.git | + | |
- | cd ajeter | + | |
- | touch README.md | + | |
- | git add README.md | + | |
- | git commit -m "add README" | + | |
- | git push -u origin master | + | |
- | + | ||
- | Existing folder | + | |
- | cd existing_folder | + | |
- | git init | + | |
- | git remote add origin https://git-iutinfo.unice.fr/blay/ajeter.git | + | |
- | git add . | + | |
- | git commit -m "Initial commit" | + | |
- | git push -u origin master | + | |
- | + | ||
- | Existing Git repository | + | |
- | cd existing_repo | + | |
- | git remote rename origin old-origin | + | |
- | git remote add origin https://git-iutinfo.unice.fr/blay/ajeter.git | + | |
- | git push -u origin --all | + | |
- | git push -u origin --tags | + | |
+ | Hormis la première étape, vous avez expérimenté Git pour gérer localement vos versions. | ||
+ | Nous allons maintenant nous intéresser au développement collaboratif de fichier sources. | ||
+ | - Visualisez les références distantes <code> git remote </code> | ||
+ | - Visualisez les URL associées aux références distantes <code>git remote -v </code> | ||
+ | - ENSEMBLES : | ||
+ | - BLANC envoie son code vers le dépôt distant : <code> git push origin master</code> | ||
+ | * Cette commande signifie : git push [nom-distant] [nom-de-branche]. Ici, nous souhaitons pousser votre branche master vers le serveur origin (pour rappel, cloner un dépôt définit automatiquement ces noms pour vous) | ||
+ | - ** TOUS ** | ||
+ | - Visualiser l'état du dépôt distant <code> git remote show origin </code> | ||
+ | - ** TOUS ** | ||
+ | - Synchroniser votre dépôt git avec la commande <code> git pull </code> | ||
+ | - ** TOUS ** | ||
+ | - Chacun pousse son code sur le dépôt distant <code> git push origin master</code> et si vous avez un souci... pensez à vous mettre à jour. | ||
+ | - Chacun : | ||
+ | * Bleu ajoute à ''Game'' l'attribut "Player black" | ||
+ | * Vert ajoute à ''Game'' l'attribut "Move[] moves" | ||
+ | * Blanc ajoute à ''GameManager'' l'attribut "Game[] games" | ||
+ | * Jaune ajoute à ''GameManager'' l'attribut "IA[] ias" | ||
+ | * Rouge ajoute à ''GameManager'' la méthode ''Game createGame()'' | ||
+ | * Tous commitent en local | ||
+ | - Là vous faîtes ensemble et dans l'ordre en vous aidant : | ||
+ | - Bleu pousse sur le serveur distant. (Pour lui c'est facile ! ) | ||
+ | - Vert tente de pousser... Remédiez au conflit. | ||
+ | - Blanc pousse sur le serveur distant. Cool ! | ||
+ | - Jaune pousse sur le serveur distant .... | ||
+ | - Rouge pousse sur le serveur distant... | ||
+ | ==== Branches de développement ==== | ||
+ | Nous allons travailler avec une branche chacun. | ||
+ | |||
+ | Les caractéristiques n'ayant pas encore été validées par votre client, vous souhaitez travailler sur celles-ci sans casser la version existante. La notion de branche permet de passer instantanément d’une version « stable » (branche « master » créée par défaut) du projet à une « version en cours de développement » (n’importe quelle autre branche que « master » | ||
+ | - Jusqu'ici vous avez travaillé sur une seule branche « master » : c’est la branche principale, celle qui en général contient le « vrai » code source de votre projet. Pour voir toutes vos branches <code>git branch </code> | ||
+ | - Chacun : | ||
+ | - Créez une branche de votre couleur C dans votre dépôt Git. <code> git branch Partie </code> | ||
+ | - Vérifiez que vous êtes bien dans la branche Master par la commande <code>git branch </code> | ||
+ | - Basculez dans la branche de C<code> git checkout Partie</code> | ||
+ | - Vérifiez dans quelle branche vous êtes | ||
+ | - Ajoutez à la classe que vous avez créé initialement (Blanc-> Game, ect) ce que vous voulez puis commutez | ||
+ | - Ajoutez à la classe que vous avez créé initialement (Blanc-> Game, ect) ce que vous voulez puis commutez | ||
+ | - Fermez votre fichier. | ||
+ | - Observez l’historique des modifications du dépôt, que remarquez-vous ? | ||
+ | - Revenez à la branche « master » et observez l’historique des modifications, que remarquez-vous ? | ||
+ | - Ajoutez un plat non-végétarien au menu de la branche master. Commitez la modification. | ||
+ | - Le cuisinier et le directeur du restaurant sont satisfaits de vos propositions de plat et souhaitent maintenant les ajouter au menu principal. Fusionnez (« merge ») la branche « vegetarien » à la branche « master ». <code>git merge vegetarien </code> Que se passe-t-il ? Ouvrez le fichier Menu.txt et vérifiez que la fusion s'est bien passée. | ||
+ | - Créez une branche « japonais » <code> git checkout -b japonais </code> | ||
+ | - Ajoutez des plats japonais en commitant au fur et à mesure les modifications et retirer des plats de viande. | ||
+ | - Revenez sur la branche « master » et fusionnez la branche « japonais ». Regardez le contenu du fichier Menu.txt et l’historique de modifications du dépôt. Y a-t-il eu un conflit ? Pourquoi ? | ||
+ | - Si vous avez un conflit, résolvez le conflit de manière à ajouter tous les plats situés entre les balises de conflit (<<<<< et >>>>>). Commitez le changement (et donc la fusion) en tapant « git commit –a » | ||
+ | - Modifiez le contenu de la branche japonais. | ||
+ | - Supprimer la branche japonais. Que se passe-t-il? <code> git branch -d japonais </code> | ||
+ | - Supprimez les branches « vegetarien » et « japonais ». | ||
====== Références ====== | ====== Références ====== | ||
https://rogerdudler.github.io/git-guide/index.fr.html | https://rogerdudler.github.io/git-guide/index.fr.html | ||