Utilisation de git
Avant de commencer Plusieurs documents sont à votre dispostion sur la page officielle de GIT :
Le but du tp est de se familiariser avec l'outil git. les objectifs sont les suivants :
Créez un répertoire tp_git
. Initilisez le dépôt avec
git init
Cette commande crée tout ce dont git a besoin pour gérer le dépôt.
Quels sont les fichiers et/ou répertoires créés par git init ? (ls -al permet de lister aussi les fichiers cachés).Adaptez les commandes suivantes pour configurer votre installation de git (en adaptant évidemment les parties en gras):
git config --global user.name "Votre nom" git config --global user.email login@machine.net git config --global core.editor vim
L’effet de ces commandes est permanent, vous n’aurez plus besoin de les taper (à moins de travailler sur un compte différent — par exemple chez vous). Enlevez
l'option --global
pour une configuration par dépôt.
Git gère trois états dans lesquels les fichiers peuvent résider : validé, modifié et indexé.
Le cycle de vie des fichiers est le suivant :
Créez un fichier README, avec le contenu
tp git 27/09/2017
Que donne la commande git status ?
indéxez le fichier README
git add README
Que donne git status ?
Remarque : git add est une commande multi-usage — elle peut être utilisée pour placer un fichier sous suivi de version, pour indexer un fichier ou pour d’autres actions telles que marquer comme résolus des conflits de fusion de fichiers.
Pour archiver (valider) les modifications dans votre entrepôt (c’est ce que l’on appelle un commit), utilisez les commandes suivantes :
git commit -m "Message expliquant la modification"
La commande git add indique les fichiers à prendre en compte pour la prochaine sauvegarde. La commande git commit réalise l’archivage des fichiers sauvegardés dans répertoire de travail vers le dépôt local. L’option -m permet de préciser le message explicatif dans la ligne de commande, au lieu d’ouvrir un éditeur de texte (comportement par défaut). Remarque : un commit sans message n’est jamais valide. A votre avis, pourquoi ? (pensez à ce qui peut arriver sur un gros projet, comme le noyau Linux…)
On peut combiner les deux (add et commit avec l'option -a au moment du commit).
Il est recommandé d’utiliser ces deux commandes (git add / commit) très souvent : seules les versions ayant fait l’objet d’un commit sont conservées. On doit toujours faire un commit dans les cas suivants :
Attention, on ne peut pas faire deux commits d’affilée sans avoir rien modifier entre deux (quelle commande permet de vérifier si c’est le cas ou non ?).
Si vous avez beaucoup de choses à mettre dans votre message de commit, il aurait probablement fallu en faire un plus tôt.
Ajoutez une ligne au README avec votre nom. Vérifiez avec
git diff
Indéxez le changement. Vérifiez avec
git diff --staged
Validez. Faites afficher les différences avec
git diff HEAD~1
Faites affichez l'historique des commits avec
git log
On peut personnaliser la sortie de cette commande. Par exemple, avec
git log --graph --pretty=format:'%C(red)%h%Creset -%C(yellow)%d%Creset %s %C(green)(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
Pour ne pas à avoir à retaper tout ça à chaque fois, ajoutez au fichier .git/config
, la ligne suivante :
[alias] hist = log --graph --pretty=format:'%C(red)%h%Creset -%C(yellow)%d%Creset %s %C(green)(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
Observez maintenant la commande git hist.
Certains fichiers n’ont pas leur place dans le dépôt, comme par exemple les fichiers de sauvegarde des éditeurs de texte. Pour éviter que ces fichiers soient considérés comme des fichiers à ajouter par git, on utilise un fichier d’exclusion : .gitignore
Consultez ce fichier et ajoutez si nécessaire des fichiers à ignorer.
Modifiez le fichier README sans l'indéxer. Que donne git status ? Annulez la modification avec
git chechkout READMEAttention, cela écrase les modifications dans le repertoire de travail.
Modifiez le fichier README en l'indéxant. Annulez en faisant
git reset HEAD README
Que donne git status ?
Vous avez fait 2 commits. Revenez à la version du premier commit par
git checkout hash_corresponsant_au_premier_commit ou HEAD^.
Vérifiez le contenu du fichier README.
Revenez à la branche master
git checkout master
Vérifiez le contenu du fichier README.
Vous disposez d'un compte sur la plateforme Gogs (Go Git Service). Ce site permet d'héberger des dépôts git, public et privés.
Générez une clé ssh par
ssh-keygen -t rsa -C "votre email@mondomaine"
Ajoutez cette clé à votre trousseau github.
Créez sur Gogs un dépôt vide, avec un readme.
Clonez ce dépôt localement :
git clone gogs@dwarves.iut-fbleau.fr:login/TP_GIT.git
Donnez la commande.
git remote -v
Ajoutez dans votre entrepôt local le fichier index.html avec votre nom et adresse mail.
<!DOCTYPE html> <html lang="fr"> <head> <meta charset="UTF-8"> <title></title> <link rel="stylesheet" href="./style.css"> </head> <body> <h1>Denis Monnerat</h1> <h2><a href="mailto:monnerat@u-pec.fr">monnerat@u-pec.fr</a></h2> </body> </html>Vérifiez que la syntaxe est correcte sur la validateur du W3C.
Poussez sur le dépôt Gogs avec
git pushVérifiez depuis l'interface web le changement sur Gogs.
Récupérez une deuxième copie du dépôt github. Dans la suite, cette copie est depot2, tandis que le précédent est depot1.
Faites comme git vous le conseille
git pulldans le depot2. Réglez le conflit à la main (git add, puis commit, et poussez vers le dépôt Gogs). Vous pouvez également résoudre le conflit en faisant git mergetool.
Créez une branche locale dans depot1 avec le nom branche1, et placez-vous dedans :
git checkout -b branche1
Cela équivaut à git branch branch1, et git checkout branche1
Que donne ?
git histhist est l'alias créé précédemment.
On va fusionner la branche principale avec la branche1
git merge branche1Il ne devrait pas y avoir de conflit. Poussez vos changements sur Gogs.
À la racine de votre compte, se trouve le répertoire public_html qui est servi
par http par le serveur
dwarves
à l'url suivante :
http://dwarves.arda/~login
Le but est ici de faire en sorte qu'un dépot git de production soit automatiquement mis à jour à partir du dépôt local dépot1, à chaque commit (dans la vraie vie, on utiliserait surement push).
Clonez votre dépôt vers le répertoire public_html/PRODUCTION
git clone /home/denis/GIT/TP_GIT /home/denis/public_html/PRODUCTION
Adaptez les chemins !
Ajoutez dans le répertoire hooks du dépôt un script post-commit le script suivant :
#!/bin/bash echo "********** mise en production *********" cd /var/www/Production unset GIT_DIR git pull origin master