? • Travailler sur différentes fonctionnalités, et sur des bug fix en même temps sans rien casser (développement non linéaire) ? • Faire tout ça à plusieurs, très facilement ? LA PROBLÉMATIQUE
en 2005 Licence publique générale GNU (libre et gratuit) Aucune base de donnée, git ne gère que des fichiers et utilise lui même des fichiers pour sa gestion. C'est l'outil de gestion de versions le plus utilisé aujourd'hui (notamment dans l'open source). LA SOLUTION
Date: Mon Sep 8 20:10:34 2014 +0200 Refacto event model Penser « point de restauration » ou « instantané », appelé commit. « Commiter » = Enregistrer un instantané Un commit est constitué de : • Une somme de contrôle (hash), c'est son empreinte, si elle change, les fichiers ont été modifié • Une date • Un auteur • Un message entré par son auteur
vos fichiers sur lesquels vous travaillez STAGING (zone d'index) Les fichiers qui ont subi des modifications (affichés par git status) REPOSITORY (dépôt) L'ensemble des fichiers commités, ainsi que l'historique de ces commits. WORKING DIRECTORY STAGING REPOSITORY stage files commit Tout ceci est local, nous n'avons pas encore communiqué avec l'extérieur, fonctionne sans internet Dépôt local Définir si suivi, non suivi ou ignoré. Les fichiers dans l'index seront ajoutés au prochain commit git add git commit
jours) df855e3 – event model <Sylvain Peigney> (il y a 1 jour) f9b668c – fix event model <Sylvain Peigney> (il y a 2 heures) Ceci est un historique, similaire au résultat de la commande git log
courant en dépôt git local. Ajoute un répertoire .git qui contient tout l'historique et les fichiers dont git a besoin pour fonctionner. git status Permet d'avoir des informations sur la situation, les fichiers modifiés (suivis/non-suivis), les fichiers dans l'index, la branche courante, etc. Astuce : utiliser l'option « -u » pour voir le détail des répertoires. git add <nom du fichier> Ajouter un fichier à l'index, git n'ajoute rien par défaut, c'est à vous de lui dire quoi faire. Utiliser l'option « --all » à la place du nom du fichier pour ajouter tous les fichiers. git commit -m "<votre message de commit>" Fait un instantané des fichiers indexés (staging) et les place dans l'historique. Une empreinte, un auteur, une date et un message lui sont attribué. L'option « -a » permet d'ajouter les fichiers suivis à l'index.
commits. Astuce : utiliser l'option « -p » puis le nom d'un fichier ou répertoire pour voir l'historique et les différences. git diff Affiche les différences entre deux commits ou un commit et la version actuelle des fichiers. Très utile pour voir ce qu'on va commiter. Astuce : utiliser l'option « -w » pour ne pas voir les différences sur les espaces. utiliser l'option « --word-diff » pour voir les différences plus finement. utiliser l'option « --cached » pour comparer l'index au dernier commit. git show <commit> Affiche l'état d'un commit. On sélectionne un commit par son empreinte (quelques caractères du début suffisent). git checkout <commit> Bascule sur un commit. Permet donc de revenir en arrière dans le temps.
le fichier .gitignore (doit se trouver à la racine du projet git. Quels fichiers ignorer ? • Les fichiers de configuration contenant des mots de passes et clefs secrètes d'API. • Les fichiers temporaires. • Les fichiers inutiles créé par les éditeurs de code ou le système d'exploitation (ex : .DS_STORE). • Les dépendances, elles prennent de la place et peuvent très bien être téléchargées après avoir récupéré le code. /config/database.yml /db/*.sqlite3 /node_modules/* Exemple de fichier .gitignore
une ligne de développement, la branche par défaut dans git s'appelle « master ». Créer une nouvelle branche permet de ne pas polluer les fichier sur le master. À quoi ça sert ? On peut être amené à développer une nouvelle fonctionnalité et que celle-ci doive prendre du temps, on ne veut donc pas polluer le travail de ses collègues pendant une semaine avec des choses pas finies. On créé alors une nouvelle branche où nous commiterons notre travail. Astuce : HEAD est un repère du commit où on se trouve. Une fonctionnalité importante de git est la faculté de pouvoir créer des branches. HEAD Branche master Branche new-feature
branches Branche new-feature Pourquoi faire ? Quand votre travail est fini sur votre branche, que vous êtes sûr que rien n'est cassé, vous pouvez alors ajouter vos modifications sur la branche principale (par exemple en vue d'une mise en production). Un conflit ? Deux branches peuvent comporter des commits où les modifications ont été apportées sur la même ligne. Git le signifiera et vous demandera de régler le conflit, il présentera les lignes qui divergent dans un éditeur de texte. À vous de réparer. Cela revient souvent à choisir la bonne version. Ramener notre travail au sein de la branche principale.
et la branche courante. git branch <nom-de-ma-branche> Créé une nouvelle branche à partir du curseur de tête (HEAD). git checkout <branche> Se place sur la branche spécifiée. git branch -d <nom-de-ma-branche> Supprime la branche. git merge <nom-de-la-branche> Fusionne la branche citée vers la branche courante.
de communiquer avec l'extérieur, afin d'avoir une sauvegarde distante, et/ou de travailler à plusieurs (partage), ou même de déployer son projet (nécessite des logiciels supplémentaires). Pour cela, il faut configurer les dépôts distants, soit par ligne de commande, soit via le fichier de configuration qui se situe dans .git/config (la première méthode est recommandée). Nous pouvons ensuite envoyer et recevoir des commits depuis ce serveur distant. Distribué ? Git permet (à contrario des autres outils de gestion de versions) de ne pas avoir de dépôt central et unique. Chacun a sa propre copie du dépôt avec son propre historique et sa propre structure de branches, en local. Astuce : origin est le nom de dépôt distant (remote repository ) par défaut. Git a un fonctionnement décentralisé, aussi appelé distribué. REMOTE REPOSITORY
du dépôt> Ajouter un dépôt distant. Vous pouvez utiliser « origin » comme nom pour votre dépôt par défaut. git clone <adresse du dépôt> Télécharge le dépôt git choisi, vous avez accès à son historique et vous pouvez travailler comme si c'était votre dépôt. git pull <dépôt> <branche> Télécharge et fusionne les commits que vous n'avez pas en local depuis le serveur. git push <dépôt> <branche> Envoie les modifications de la branche sur le dépôt.
ce qui se trouve dans l'index. L'option « --hard » effacera aussi les modifications dans l'index. git commit --amend Ajouter le contenu de l'index au précédent commit. git stash Appelé « remisage », reviens au commit « HEAD », mais garde vos modifications de côté. Utile quand on ne veut pas faire de commit et travailler sur autre chose. git stash list Liste les remisages. git stash apply <nom du remisage> Remet en place les modifications remisées, si on ne met pas de nom, le dernier remisage est choisi.
commande man git ou git –-help, on peut même préciser la commande pour plus de détails. Livre GIT PRO Accessible gratuitement en ligne : http:/ /git-scm.com/book/fr/ Try Github (par CodeSchool) Un cours interactif en anglais. https:/ /try.github.io/ Workflows Git Détail sur les différents type de worklow qu'on trouve généralement appliqué à git. https:/ /www.atlassian.com/fr/git/workflows Exercice intéractif sur le branching Passage obligatoire à qui veut maitriser git. http:/ /pcottle.github.io/learnGitBranching/ Interfaces graphiques pour Git Il existe des interfaces graphiques pour Git, mais mieux vaut maîtriser l'outil par la ligne de commande. http:/ /git-scm.com/downloads/guis