Attention à votre environnement…
git config --global http.sslVerify false
Et bien sûr pour savoir qui commite :
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
1. Créer/Récupérer un nouveau dépôt (info)
A ne pas faire dans le cadre de ce TD car nous l'avons déjà fait, cependant, cela peut être utile par la suite.
Pour commencer à travailler avec Git, il y a deux solutions :
soit vous créez un nouveau dépôt vide, si vous souhaitez commencer un nouveau projet
git init
soit vous clonez un dépôt existant, c’est-à-dire que vous récupérez tout l’historique des changements d’un projet pour pouvoir travailler dessus.
C'est ce que nous avons déjà fait, par l'instruction git clone adresse_du_dépôt_distant
A noter, que si vous travaillez sous Github ou BitBucket, en général, on crée le dépôt sur le site puis on le clone, comme nous l'avons fait précédemment.
2. Git comme historique des modifications
Créer un fichier
Menu.txt
contenant les plats de votre restaurant favori, ligne par ligne.
Salade norvégienne
Œufs fauchés
Steak tartare
Filet de dorade
Profiteroles
Comment interprétez-vous le résultat de la commande suivante
git status
Ajoutez le fichier
Menu.txt
comme git vous l'a dit :
git add Menu.txt
Réinterprétez le résultat de la commande git status
.
Le fichier
Menu.txt
est maintenant prêt à être versionné.
git commit -m "construction de la carte"
ou
git commit
1) Quel message avez-vous en retour?
Que donne la commande git status
?
Apportez quelques modifications au fichier
Menu.txt
. 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)
2)
Affichez l’historique des modifications du dépôt.
git log
Et pour voir les modifications apportées par le dernier commit
git log -p -1
et savoir qui fait quoi
git log --stat
ou
git log --pretty=format:"%h - %an, %ar : %s"
etc.
En utilisant
git diff
, visualisez les modifications effectuées entre le premier commit et le second commit. Par exemple
git diff 71cfcd6 0c24491
Attention l'ordre des commits modifie le résultat (un- devient un +).
Modifiez plusieurs fois le Menu afin d’en avoir plusieurs versions.
Le dernier plat 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
git checkout HASH
Vérifiez que votre fichier Menu.txt est dans son état antérieur.
Revenez au dernier commit (HEAD) en exécutant
git checkout master
Pour revenir en arrière de manière définitive, et donc supprimer tout ce que vous avez fait depuis ce moment :
git reset --hard HASH
Dans git log
, vérifiez que tout ce que vous aviez effectué depuis ce commit a été effacé.
3. Branches de développement
Sauf indication contraire, vous ajouterez les plats séquentiellement dans le menu (les uns après les autres).
Vous êtes chargé(e) d’introduire des plats végétariens dans le menu du restaurant. Ces plats n’ayant pas encore été validés par la cuisine et la direction du restaurant, vous souhaitez travailler sur la carte sans casser la carte 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
git branch
Créez une branche « vegetarien » dans votre dépôt Git.
git branch vegetarien
Vérifiez que vous êtes bien dans la branche Master par la commande
git branch
Basculez dans la branche vegetarien
git checkout vegetarien
Vérifiez dans quelle branche vous êtes
Ajoutez deux/trois plats végétariens au menu et commitez au fur et à mesure les modifications.
Fermer votre fichier.
Observez l’historique des modifications du dépôt, que remarquez-vous ?
Revenez à la carte principale (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 ».
git merge vegetarien
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 »
git checkout -b japonais
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?
git branch -d japonais
Supprimez les branches « vegetarien » et « japonais ».
4. Synchronisation de votre répertoire
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
git remote
Visualisez les
URL associées aux références distantes
git remote -v
Chaque personne du groupe participe :
(Personne A)
-
Ajoutez le fichier au dépôt git et commitez le fichier. Envoyez ensuite le commit vers le dépôt distant :
git push origin master
(Tous sauf A)
Visualiser l'état du dépôt distant
git remote show origin
Synchroniser votre dépôt git avec la commande
git pull
(Un développeur autre que A)
Modifiez le fichier index.html afin d’ajouter du texte entre les balises body.
Commitez les modifications et envoyez-les vers le dépôt distant.
(TOUS) Synchroniser votre dépôt git avec la commande git pull
.
(Personne A)
Modifiez le titre de la page Web et
Commitez/envoyez les modifications.
(Personne B) (SANS SYNCHRONISER LE DEPOT)
Modifiez le titre de la page Web
Commitez/envoyez les modifications. Que se passe-t-il ? Remédiez au conflit.
Si sur votre machine personnelle vous n'avez pas git, passez directement au point III et installez sourceTree.
Git donne la possibilité d’étiqueter un certain état dans l’historique comme important grâce à un « tag ». Ces tags sont couramment utilisés pour marquer des états de publication (e.g. v1.0, v1.1, …).
Deux types de tags sont disponibles :
Les tags légers : un pointeur sur un commit spécifique
Les tags annotés : stockés sous forme d’objets, ils contiennent une somme de contrôle, le nom et l’email du créateur, la date de création, un message et éventuellement une signature GPG.
Dans le cadre de cette matière, nous utiliserons que des tags légers. Pour plus d’informations sur le mécanisme de tags annotés, voir les ressources.
Reprenez votre fichier « Menu.txt » et apportez-y des modifications. La nouvelle version obtenue correspondra à la carte qui sera publiée au guide Michelin 2017. Pour marquer cette importance, nous allons associer le tag « michelin » au prochain commit : Créez une étiquette ‘michelin17’
git tag michelin17
Listez les étiquettes disponibles
git tag
Attention ! Les tags ne sont pas poussés automatiquement sur un serveur distant. Il faut demander explicitement à pousser les étiquettes après les avoir créées localement (cf. cheat sheet) ou utiliser l’option –-tags par exemple
git push origin -- tags