Table of Contents
Git
Qu'est ce que c'est ?
Git est un programme qui permet de gérer plusieurs versions d'un fichier.
A chaque fois qu'on enregistre un fichier avec git, celui ci se voit attribuer un numero de version.
Ce numero de version s'appelle un “hash” et est défini par une formule mathématique dependant du contenu du fichier.
Si je crée un fichier et que je modifie son contenu alors le hash sera différent du fichier de départ mais si je ne le modifie pas, le hash sera le meme.
Git stocke les différences faites entre deux versions de fichiers.
Si j'ajoute le mot “toto” dans un fichier, il ne sauvegardera pas la nouvelle version du fichier mais il notera qu'on a ajouté le mot “toto”.
Ce systeme permet de pouvoir faire plusieurs enregistrements du meme fichier et de pouvoir revenir en arrière si besoin (un peu comme le “undo” dans un programme sauf qu'on peut choisir à quelle version on veut revenir).
Il y a plusieurs systemes de “versionning” existants et git est un des plus récents et plus puissants.
Git a été développé par le créateur du noyau linux afin de pouvoir avoir un systeme adapté et indépendant.
Les anciens systemes de versionning utilisaient une technologie client / serveur mais git ne necessite pas forcement de serveur et n'a pas besoin de reseau pour fonctionner.
Git est tres utilisé par les programmeurs mais il peut etre utilisé pour d'autres choses (par exemple, un ami s'en sert pour sauvegarder ses morceaux de musique).
Comment utiliser git ?
Sous linux ou osx il y a la commande “git” qui permet de tout faire en ligne de commande.
Sous windows, il y a aussi une version en ligne de commande je crois.
Pour les gens alergiques à la ligne de commande il existe des interfaces graphiques dont smartgit qui est en java et fonctionne sous tous les os.
Les éditeurs de code possedent pour la plupart des modules intégrés pour gérer git.
Le dépot
La base d'une sauvegarde par git est de créer un dépot (repository en anglais).
Le dépot est le fait de définir un dossier comme étant le gestionnaire de la sauvegarde.
Ce dossier contient un sous dossier qui se nomme .git et contient la configuration de ce dépot ainsi que toutes les modifications effectuées sur les fichiers gérés par ce dépot.
Pour créer un dépot en ligne de commande, il suffit de se rendre dans un dossier et de lancer la commande :
git initIl peut y avoir plusieurs dépots qui se mettent à jour entre eux.
Pour récupérer des infos depuis un autre dépot, on utilise la commande “pull”.
Pour envoyer des modifications à un autre dépot, on utilise la commande “push”.
Par exemple, notre ami le bassiste fait plusieurs versions de basse et les sauvegarde au fur et à mesure.
Le batteur écrit aussi des versions dans son coin sauf qu'à un moment, ce serait bien que les deux se mettent d'accord sur le morceau commun.
Le bassiste peut se connecter à l'ordi du batteur et récupérer ses modifs avec pull et lui envoyer les siennes avec push. Suite à cette manip, les deux musiciens auront tous les deux les memes dossiers.
Je vous laisse deviner que les systemes de synchronisation comme dropbox utilisent ce principe.
Ils peuvent utiliser un systeme de dépot commun en ligne et il en existe plein comme github ou bitbucket qui permettent de faire des depots publics ou privés.
Le stage
Il y a 3 etats dans la sauvegarde sous git.
- le repertoire de travail qui est le dossier tel qu'il existe actuellement
- quand on utilise la commande “git add”, les fichiers sont ajoutés dans le stage qui est une sorte de dossier virtuel en attente de validation
- quand on utilise ensuite la commande “git commit”, les fichiers se trouvant dans le stage sont soumis au dépot et validés.
On peut faire un add et un commit en une seule commande avec :
commit -am "commentaire sur ce que j'ai fait comme changement"
Les branches
Git fonctionne avec des branches et propose une branche par défaut qui s'appelle “master”.
Le systeme de branche permet de pouvoir faire plusieurs versions d'un fichier et passer d'une version à l'autre.
Par exemple, pour en revenir à mon pote musicien, il enregistre une ligne de basse, il en est content mais apres il se dit qu'il prefererait la faire plus jazzy donc il crée une banche “jazzy”, bascule sur cette branche et enregistre une nouvelle version puis sauvegarde mais ensuite il se dit qu'il prefererait la faire plus rock donc il fait une autre branche “rock”, bascule dessus et enregistre la nouvelle basse mais au bout de deux jours, il se dit qu'en fait il preferait la version jazzy donc il peut revenir à la branche jazzy et il recupere la basse jazzy qu'il avait faite et continue de bosser dessus etc… tout en gardant la branche master et la branche rock de coté.
Pour créer une banche en ligne de commande :
branch jazzyPour basculer dans la branche “jazzy” :
checkout jazzypour faire les deux manips en une seule commande :
checkout -b jazzy
Le merge
Le merge permet de lier deux versions entre elles pour en faire une seule.
Par exemple, au bout d'un moment, notre ami le musicien decide que le morceau final (master) contiendra la version jazzy donc il merge la branche jazzy vers la branche master.
Pour merger en ligne de commande :
on se positionne dans la branche dans laquelle on va fusionner une autre branche (par exemple la branche master).
git checkout masteron lance la commande
git merge jazzyles fichiers de jazzy seront melangés avec les fichiers de master (bon, parfois il peut y avoir des problemes et git nous dit ce qui ne va pas)
En résumé
On utilise souvent les memes commandes (add, commit et push).
- on crée un dépot distant sur github ou bitbucket ou autre
- on crée un dépot local sur son ordi
- on met ses fichiers dans notre dépot local
- on fait sa vie et à chaque modif qu'on estime importante, on fait un “add” puis un “commit”
- quand on veut mettre à jour le dépot distant qui sert de sauvegarde principale, on fait un “push”
- quand on veut faire un gros changement, on cree une branche avec “branch” puis on soumet la branche au depot distant avec “push origin/nom_de_la_branche”
Exemple concret
Je cree un dossier titi
mkdir titije vais dedans
cd titiJe crée le dépot git
git initje cree un fichier toto
nano totoje cree un fichier tutu
nano tutuj'ajoute les deux fichiers dans le depot
git add *je fais une modif dans toto qui parle de banane
je fais une modif dans tutu qui parle de patate
git add toto git commit -m "banane" git add tutu git commit -m "patate"etc…
j'aurais pu ajouter les deux fichiers en meme temps avec
git add *puis faire un seul commit
git commit -m "banane et patate"ou
git commit -am "banane et patate"
