Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Introduction à git

Introduction à git

Cours d'initiation à git (suivi d'un tp sur git et github, trouvable ici : https://github.com/volpeo/tp_git) pour ingésup.

Sylvain Peigney

September 22, 2014
Tweet

More Decks by Sylvain Peigney

Other Decks in Programming

Transcript

  1. • J'ai cassé quelque chose, comment remonter dans le temps

    ? • 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
  2. Logiciel de gestion de versions décentralisé Créé par Linus Torvalds

    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
  3. LE CONCEPT DE BASE commit 802138d12e6f433129e06837e913aa6d1d5971d2 Author: Sylvain Peigney <[email protected]>

    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
  4. LES 3 ÉTATS WORKING DIRECTORY (répertoire de travail) L'ensemble de

    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
  5. EXEMPLE 721c0d0 – init <Sylvain Peigney> (il y a 3

    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
  6. LES COMMANDES DE BASE 1/2 git init Transforme le dossier

    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.
  7. LES COMMANDES DE BASE 2/2 git log Affiche l'historique des

    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.
  8. IGNORER DES FICHIERS Git permet d'ignorer des fichiers en lisant

    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
  9. LES BRANCHES Qu'est ce qu'une branche ? Une branche représente

    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
  10. FUSIONNER DES BRANCHES Branche master Branche new-feature Fusion des deux

    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.
  11. LES COMMANDES DE BRANCHING git branch Affiche les branches disponibles

    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.
  12. DÉPÔT DISTANT Comment ça marche ? Il est évidemment possible

    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
  13. LE COMMANDES REMOTE git remote add <nom du dépot> <adresse

    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.
  14. QUI SAUVENT LA VIE QUELQUES COMMANDES git reset Enlève tout

    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.
  15. POUR ALLER PLUS LOIN Le manuel de git Via la

    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