Parcourir la source

restructuration du projet

Julien Dehos il y a 8 ans
Parent
commit
870f56abca
4 fichiers modifiés avec 712 ajouts et 526 suppressions
  1. 3 2
      Makefile
  2. 618 0
      depot_local.md
  3. 6 524
      index.md
  4. 85 0
      installation.md

+ 3 - 2
Makefile

@@ -1,4 +1,5 @@
-HTML_FILES = index.html
+MD_FILES = $(shell find -name "*.md")
+HTML_FILES = $(MD_FILES:.md=.html)
 
 all: $(HTML_FILES)
 
@@ -6,7 +7,7 @@ all: $(HTML_FILES)
 	pandoc -s --toc -H style.html -o $@ $<
 
 publish:
-	scp index.html *.svg *.png yangra.univ-littoral.fr:public-html/enseignements/tutoriel_git/
+	scp $(HTML_FILES) *.svg *.png yangra.univ-littoral.fr:public-html/enseignements/tutoriel_git/
 
 clean:
 	rm -f $(HTML_FILES)

+ 618 - 0
depot_local.md

@@ -0,0 +1,618 @@
+---
+title: "Tutoriel git"
+output:
+    toc: true
+---
+
+* * * * *
+
+## Introduction
+
+### À qui s'adresse ce tutoriel ?
+- Objectif du tutoriel : apprendre à utiliser le système git et le [serveur
+  gogs](https://gogs.univ-littoral.fr) mis en place par le
+[SCOSI](http://scosi.univ-littoral.fr/). 
+- Pré-requis : utilisation basique d'un ordinateur (et notamment du clavier).
+- Public visé : les développeurs au sens large (code latex, python, matlab, R,
+  java...)
+
+### Qu'est-ce-que git et gogs ?
+- git : système de journalisation de code source décentralisé (alternative à
+  mercurial, subversion, CVS...)
+- gogs : service d'hébergement de code source utilisable avec git (alternative
+  à github, bitbucket...)
+
+### Dans quels cas utiliser git/gogs ?
+git est conçu pour manipuler principalement des fichiers **au format texte**
+(code source, code latex, fichier CSV...). Attention, les fichiers word, excel
+et PDF ne sont pas des fichiers au format texte.
+
+Quelques fonctionnalités de git :
+
+- journalisation 
+- sauvegarde distante 
+- synchronisation 
+- travail en équipe 
+- projets publics ou privés :
+
+### Dans quels cas ne pas utiliser git/gogs ?
+- édition collaborative en temps-réel -> sharelatex
+- partage de fichiers -> serveur ftp, http...
+- fichiers dans un format non textuel (word, excel, PDF...) -> dropbox
+
+### Concepts de base
+
+#### Notion de "version" (commit)
+
+Un "projet git" contient l'historique de toutes les modifications de chaque
+fichier.  On appelle "commit" un état sauvegardé de ces modifications (une
+version du projet en quelque sorte).
+
+Généralement, on modifie le projet à partir de la version précédente et ansi de
+suite; ce qui correspond à une succession de commits :
+
+![](concepts_commits_1.svg)
+
+Mais on peut également effectuer des modifications en parallèles. On appelle ça
+des branches :
+
+![](concepts_commits_2.svg)
+
+On peut ensuite rassembler ces modifications en fusionnant les branches :
+
+![](concepts_commits_3.svg)
+
+#### Notion de dépôt (repository)
+
+On appelle dépôt l'ensemble des fichiers de notre "projet git", c'est-à-dire
+l'historique des commits.
+
+Un dépôt peut être dupliqué sur différentes machines, pour synchroniser les
+données ou pour travailler en équipe. 
+
+Dans l'ancien temps des années 2000, on avait un dépôt principal distant que
+l'on synchronisait ou modifiait via des copies locales partielles (subversion,
+CVS...) :
+
+<img src="concepts_depots_svn.svg" style="width:700px">
+
+Aujourd'hui, on utilise plutôt un système de dépôts décentralisés (git,
+mercurial...).  Avec ce système, tous les dépôts sont identiques et peuvent se
+synchroniser entre eux :
+
+<img src="concepts_depots_git.svg" style="width:700px">
+
+Généralement, on garde tout de même un dépôt sur un serveur distant accessible
+en permanence (serveur gogs, github...).
+
+
+* * * * *
+
+## Installation et configuration
+
+Pour utiliser git, il vous faut une connexion internet et un client git.
+
+### Installation sous Linux
+
+La plupart des systèmes Linux modernes propose le client git dans leur système
+de paquets. Par exemple, sur les Linux basés Debian, il suffit de lancer la
+commande console :
+
+```
+sudo apt-get install git
+```
+
+Il existe également des clients graphiques : gitg, giggle, qgit, gitk, git-gui...
+
+### Installation sous Windows ou Mac
+
+Télécharger et installer le client [git pour
+Windows](http://git-scm.com/download/win) ou le client [git pour
+Mac](http://git-scm.com/download/mac).
+
+### Configuration
+
+Après avoir installé le client git, il faut configurer le nom et l'adresse
+e-mail de l'utilisateur (à faire une seule). Par exemple, en tapant les
+commandes consoles : 
+
+```
+$ git config --global user.name "Julien Dehos"
+$ git config --global user.email dehos@nimpe.org
+```
+
+On peut également configurer l'éditeur de texte et le proxy que le client git
+doit utiliser. Par exemple, en tapant les commandes consoles :
+
+```
+$ git config --global core.editor emacs
+$ git config --global http.proxy http://user:pass@proxyhost:proxyport
+```
+ou alors en ajoutant des variables d'environnement (par exemple, dans le
+`.bashrc`): 
+```
+export EDITOR=emacs
+export http_proxy=http://user:pass@proxyhost:proxyport
+```
+
+### Obtenir de l'aide
+
+Aide générale sur git :
+```
+$ git help 
+```
+
+Aide sur une commande git :
+```
+$ git help <commande git>
+```
+
+Voir également la section [références](#références).
+
+### Exercice
+
+Installez et configurez le client git sur votre machine.  Vérifiez que votre
+client git peut accéder à l'extérieur, par exemple en récupérant le dépôt
+distant `https://github.com/juliendehos/invinoveritas` :
+
+![](installation_01.png)
+
+
+* * * * *
+
+## Dépôt local (journaliser un projet)
+
+L'élément de base d'un projet git est le dépôt. Il s'agit simplement d'un
+dossier classique que l'on demande à git de versionner.
+
+### Initialiser un dépôt
+
+Allez dans le dossier à versionner puis lancez la commande `git init`. 
+
+![](depot_local_01.png)
+
+Git créé alors un dossier `.git` pour y stocker ses metadonnées.  Si vous ne
+voulez plus versionner votre dossier, il suffit de supprimer ce dossier.  Le
+reste du temps, ne touchez pas à ce dossier si vous n'êtes pas absolument
+sûr(e) de ce que vous faites.
+
+### Afficher l'état d'un dépôt
+
+La commande `git status` affiche l'état courant du dépôt : nouveaux fichiers,
+fichiers modifiés, fichiers supprimés.  Cette commande est très sûre; elle ne
+peut rien casser.  N'hésitez donc pas à la lancer pour voir où vous en êtes.
+
+![](depot_local_02.png)
+
+### Ajouter des fichiers dans le dépôt
+
+Il faut indiquer explicitement les fichiers que git doit journaliser.  
+
+Par exemple, imaginons qu'on ouvre un nouveau fichier `rapport_01.tex` dans
+notre projet.
+
+![](depot_local_03.png)
+
+On y écrit du code latex.
+
+![](depot_local_04.png)
+
+Et on affiche l'état du dépôt.
+
+![](depot_local_05.png)
+
+Git nous indique que le fichier `rapport_01.tex` existe bien dans le dossier
+(ainsi qu'un fichier de sauvegarde), mais qu'il ne fait pas partie du dépôt. 
+
+Pour ajouter un fichier au dépôt, il faut utiliser la commande `git add`. 
+
+![](depot_local_06.png)
+
+Ceci indique que git doit prendre en compte le fichier lors des prochains
+commits (journalisation), ce qu'on peut vérifier avec un `git status`.
+
+![](depot_local_07.png)
+
+### Valider les modifications (commit)
+
+Après avoir ajouté, modifié ou supprimé des fichiers, on peut valider les
+modifications, c'est-à-dire sauvegarder un état du projet (commit). Encore une
+fois, seuls les fichiers qui ont été ajoutés au projet (avec `git add`) sont
+pris en compte. 
+
+La commande à lancer pour valider toutes les modifications est `git commit -a`.
+
+![](depot_local_08.png)
+
+Git lance alors l'éditeur de texte pour le message de commit.
+Le message est pré-rempli avec des informations concernant le commit. Ces
+informations vous permettent de vérifier que le commit correspond bien à ce que
+vous voulez mais ne feront pas partie du message final.
+
+Écrivez un message expliquant rapidement les modifications que vous êtes en
+train de valider puis enregistrez et quittez. 
+
+![](depot_local_09.png)
+
+Git créé alors le nouveau commit, qui valide ici le fichier `rapport_01.tex`.
+
+![](depot_local_10.png)
+
+Vous pouvez le vérifier avec un `git status`.
+
+![](depot_local_11.png)
+
+### Fichiers autogénérés et .gitignore
+
+Git est très pratique pour gérer des fichiers textes que l'on modifie
+régulièrement. En revanche, il n'est pas adapté pour gérer des fichiers dans un
+format non-textuel (images, données compressées, documents word...).  Si on
+ajoute un tel fichier dans le dépôt alors à chaque modification, git stockera
+une nouvelle copie complète (au lieu de stocker uniquement les lignes qui ont
+changé), ce qui est inefficace.
+
+D'autre part, il est inutile de versionner les fichiers autogénérés (créés
+automatiquement lors de la compilation du code). Par exemple, si on compile le
+code latex de notre projet : 
+
+![](depot_local_12.png)
+
+des fichiers intermédiaires sont créés et apparaissent lors des `git status` :
+
+![](depot_local_13.png)
+
+Pour les ignorer, il suffit d'ajouter un fichier `.gitignore` et d'y indiquer
+les fichiers à ignorer.
+
+![](depot_local_14.png)
+
+Ainsi, il n'apparaissent plus lors des `git status`.
+
+![](depot_local_15.png)
+
+Il est de pratique courante d'ajouter le `.gitignore` au dépôt, ainsi qu'un
+fichier `README.md` qui servira de page d'accueil (au format
+[markdown](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet)).
+
+![](depot_local_16.png)
+
+
+### Renommer et supprimer des fichiers
+
+La commande `git mv` permet de renommer un fichier versionné. Il ne faut pas
+utiliser la commande système (`mv`) car dans ce cas git ne saura pas qu'il faut
+renommer le fichier (il pensera que le fichier manque et essaiera de le
+recréer).
+
+![](depot_local_17.png)
+
+De même, la commande `git rm` permet de supprimer un fichier versionné.
+
+![](depot_local_18.png)
+
+
+### Afficher l'historique des commits
+
+Faisons d'abord une modification "commitée" puis une autre non commitée.
+
+![](depot_local_19.png)
+
+La commande `git log` permet d'afficher l'historique des commits.
+
+![](depot_local_20.png)
+
+On peut également le voir avec un client graphique graphique comme `gitg`.
+
+![](depot_local_21.png)
+
+Le "unstaged" correspond aux modifications courantes non commitées.
+
+Pour représenter l'historique d'un dépôt, on utilise souvent un graphe où les
+noeuds représentent les commits. On ajoute également l'étiquette "master", qui
+indique le dernier commit principal, et l'étiquette "HEAD", qui indique l'état
+courant du dépôt.
+
+![](depot_local_log.svg)
+
+Ainsi, un `git commit` créé un commit à partir de l'état pointé par HEAD
+et fait pointer master (et HEAD) sur ce nouveau commit.
+
+### Supprimer les modifications courantes
+
+La commande `git checkout -- . ` supprime les modifications courantes. Le dépôt revient
+alors dans l'état du dernier commit (master).
+
+![](depot_local_checkout_01.svg)
+
+### Revenir à un commit précédent (sans suppression)
+
+La commande `git checkout 7b3...` permet de revenir au commit "7b3...". On passe 
+ainsi dans un mode "détaché" (HEAD ne pointe plus sur un commit terminal).
+
+![](depot_local_checkout_02.svg)
+
+Au lieu d'utiliser le numéro de commit, on peut également utiliser les
+étiquettes. Par exemple, `git checkout master` pour aller au dernier commit
+principal ou `git checkout HEAD~1` pour aller au commit précédent le commit
+courant.
+
+### Marquer un commit
+
+La commande `git tag` permet de nommer des commits pour, par exemple, fixer une
+version ou pouvoir revenir plus facilement sur un commit particulier.
+
+![](depot_local_22.png)
+
+![](depot_local_checkout_03.svg)
+
+### Supprimer des commits précédents
+
+La commande `git reset 073...` revient au commit "073..." et annule tous les
+commits suivant (jusqu'à l'ancien master). Les modifications correspondants à
+ces commits sont conservées dans l'état courant (non commité).
+
+![](depot_local_checkout_04.svg)
+
+Autre possibilité : la commande `git reset --hard 073...` revient au commit
+"073..." et annule tous les commits suivant **en supprimant les modifications
+correspondantes**.
+
+![](depot_local_checkout_05.svg)
+
+### Résumé et méthode de travail
+
+Résumé des commandes git précédentes :
+
+---|---|
+`git init` | initialise le dossier courant (nouveau dépôt git) |
+`git status` | TODO |
+`git add` | |
+`git commit -a` | |
+`git mv` | |
+`git rm` | |
+`git log` | |
+`git checkout -- .` | |
+`git checkout <commit/etiquette>` | |
+`git tag` | |
+`git reset` | |
+`git reset --hard` | |
+
+Quelques conseils de méthode de travail :
+
+- privilégier les petits dépôts, correspondant à différents travaux, plutôt
+  qu'un gros dépôt regroupant tous les travaux de l'année
+- faire des commits réguliers et correspondant aux petites tâches successives 
+- éviter de commiter un projet cassé (par exemple, du code qui ne compile pas)
+- ne pas versionner les fichiers auto-générés
+
+### Exercice
+
+
+TODO
+
+
+
+* * * * *
+
+## Dépôt distant (sauvegarder un projet sur un serveur)
+
+Git permet de synchroniser un dépôt local avec un dépôt distant (sur un
+serveur).  Il existe des serveurs comme github qui permettent d'héberger
+gratuitement des dépôts publics (visibles par tout le monde).
+
+Le serveur gogs du SCOSI vous permet d'héberger des dépôts publics ou privés.
+Il dispose d'une page web vous permettant de gérer vos projets. Pour cela,
+allez à l'adresse
+[https://gogs.univ-littoral.fr](https://gogs.univ-littoral.fr) et entrez vos
+identifiants du portail ULCO :
+
+![](depot_distant_01.png)
+
+Une fois identifié, le site vous affiche une page d'accueil (derniers commits,
+dépôts actifs...) :
+
+![](depot_distant_02.png)
+
+### Créer un dépôt sur un serveur git
+
+Pour créer un nouveau dépôt distant, allez sur la page du serveur gogs et
+cliquez "New Repository".
+
+![](depot_distant_03.png)
+
+Entrez le nom du dépôt distant à créer (évitez les espaces), puis cliquez
+"Create Repository".
+
+![](depot_distant_04.png)
+
+Le dépôt distant est alors créé et une page vous indique comment le récupérer
+localement. Attention, il y a une méthode plus simple que celle indiquée (cf
+section suivante).
+
+![](depot_distant_05.png)
+
+### Créer un dépôt local à partir d'un dépôt distant
+
+La commande `git clone ...` permet de récupérer un dépôt distant sur votre
+machine (cf image ci-dessous). Pensez à mettre votre login après le "https://".
+
+![](depot_distant_06.png)
+
+### Ajouter un dépôt local à un dépôt distant
+
+Si vous avez déjà créé et modifié un dépôt local, vous pouvez le synchroniser
+avec un dépôt distant en utilisant les commandes `git remote add origin ...`
+puis `git push -u origin master`. Sinon, utilisez plutôt la méthode de la
+section précédente.
+
+![](depot_distant_07.png)
+
+### Récupérer les commits d'un dépôt distant
+
+La commande `git pull` permet de récupérer les éventuelles modifications sur le
+serveur et de les intégrer dans votre dépôt local.
+
+![](depot_distant_08.png)
+
+### Envoyer les commits locaux sur un dépôt distant
+
+La commande `git push` permet d'envoyer vos commits locaux sur le serveur.
+
+![](depot_distant_09.png)
+
+Les commits/fichiers envoyés sur le serveur sont alors visibles sur la page web.
+
+![](depot_distant_10.png)
+
+Vous pouvez également toujours voir le contenu de votre dépôt avec un client
+graphique.
+
+![](depot_distant_11.png)
+
+### Résoudre des conflits
+
+Imaginez que vous avez modifié et commité un fichier, et que vous voulez
+l'envoyer sur le serveur. Pour cela, il faut d'abord faire un `git pull` avant
+le `git push` au cas où l'un de vos collaborateurs aurait envoyer une
+modification sur le serveur entre temps. 
+
+Si des modifications ont été faites en parallèle, git est souvent capable de
+les fusionner mais parfois il n'arrive pas à résoudre le conflit et il vous
+demande de le faire manuellement.
+
+![](depot_distant_12.png)
+
+Pour résoudre un conflit, il suffit d'ouvrir le fichier en cause et de
+remplacez les zones marquées par le contenu que vous voulez obtenir. 
+Il existe des outils graphiques comme `meld` qui peuvent vous y aider.
+
+![](depot_distant_13.png)
+
+Une fois les conflits édités, vous pouvez commiter et pusher vers le serveur.
+
+![](depot_distant_14.png)
+
+### Résumé et méthode de travail
+
+Résumé des commandes git précédentes :
+
+---|---|
+`git clone` | récupère un dépôt distant |
+`git pull` | récupère les modifications du dépôt distant et les intègre dans le dépôt local |
+`git push` | envoie les commits du dépôt local sur le dépôt distant |
+
+Quelques conseils de méthode de travail :
+
+- utilisez la page
+  [https://gogs.univ-littoral.fr](https://gogs.univ-littoral.fr) pour créer et
+gérer vos dépôts distants.
+- récupérez vos nouveaux dépôts distant avec `git clone`
+- récupérez les modifications du serveur avec `git pull`
+- faites un `git pull` avant d'envoyer vos nouveaux commits sur le serveur (`git push`)
+
+### Exercice
+
+TODO
+
+* * * * *
+
+## Branches (travailler en équipe)
+
+TODO
+
+### Afficher les branches 
+git log --graph --all --oneline --decorate
+
+### Créer une nouvelle branche locale
+
+### Changer de branche
+
+### Fusionner des branches
+
+### Envoyer une branche sur un dépôt distant
+
+### Afficher les branches distantes
+
+### Terminer une branche locale
+
+### Terminer une branche distante
+
+### Supprimer un commit déjà pushé (DANGER !!!)
+git reset --hard e6c8e8e
+git push origin HEAD:master -f
+git reset --hard e6c8e8e
+
+![](branche_01.png)
+![](branche_02.png)
+![](branche_03.png)
+![](branche_04.png)
+![](branche_05.png)
+![](branche_06.png)
+![](branche_07.png)
+![](branche_08.png)
+![](branche_09.png)
+![](branche_10.png)
+![](branche_11.png)
+![](branche_12.png)
+![](branche_13.png)
+![](branche_14.png)
+![](branche_15.png)
+![](branche_16.png)
+![](branche_17.png)
+![](branche_18.png)
+![](branche_19.png)
+![](branche_20.png)
+![](branche_21.png)
+
+### Résumé et méthode de travail
+
+Résumé des commandes git précédentes :
+
+---|---|
+`git ` | |
+
+Quelques conseils de méthode de travail :
+
+- TODO
+
+
+### Exercice
+
+TODO
+
+* * * * *
+
+## Forks (collaborer avec d'autres projets)
+
+TODO
+
+### Forker un dépôt distant
+
+### Envoyer un pull request
+
+### Résumé et méthode de travail
+
+Résumé des commandes git précédentes :
+
+---|---|
+`git ` | |
+
+Quelques conseils de méthode de travail :
+
+- TODO
+
+### Exercice
+
+TODO
+
+* * * * *
+
+## Références
+
+- [https://www.atlassian.com/git/tutorials/](https://www.atlassian.com/git/tutorials/)
+- [http://git-scm.com/book/fr/v2](http://git-scm.com/book/fr/v2)
+
+* * * * *
+
+Dernière mise à jour : 2016-03-05
+

+ 6 - 524
index.md

@@ -1,5 +1,5 @@
 ---
-title: "Tutoriel git"
+title: "Tutoriel git <small><br> <hr> [introduction](index.html) | [installation](installation.html) | [dépôt local](depot_local.html) | [dépôt distant](depot_distant.html) | [branches](branches.html) | [forks](forks.html) <hr> </small>"
 output:
     toc: true
 ---
@@ -85,534 +85,16 @@ synchroniser entre eux :
 Généralement, on garde tout de même un dépôt sur un serveur distant accessible
 en permanence (serveur gogs, github...).
 
+### Références
 
-* * * * *
-
-## Installation et configuration
-
-Pour utiliser git, il vous faut une connexion internet et un client git.
-
-### Installation sous Linux
-
-La plupart des systèmes Linux modernes propose le client git dans leur système
-de paquets. Par exemple, sur les Linux basés Debian, il suffit de lancer la
-commande console :
-
-```
-sudo apt-get install git
-```
-
-Il existe également des clients graphiques : gitg, giggle, qgit, gitk, git-gui...
-
-### Installation sous Windows ou Mac
-
-Télécharger et installer le client [git pour
-Windows](http://git-scm.com/download/win) ou le client [git pour
-Mac](http://git-scm.com/download/mac).
-
-### Configuration
-
-Après avoir installé le client git, il faut configurer le nom et l'adresse
-e-mail de l'utilisateur (à faire une seule). Par exemple, en tapant les
-commandes consoles : 
-
-```
-$ git config --global user.name "Julien Dehos"
-$ git config --global user.email dehos@nimpe.org
-```
-
-On peut également configurer l'éditeur de texte et le proxy que le client git
-doit utiliser. Par exemple, en tapant les commandes consoles :
-
-```
-$ git config --global core.editor emacs
-$ git config --global http.proxy http://user:pass@proxyhost:proxyport
-```
-ou alors en ajoutant des variables d'environnement (par exemple, dans le
-`.bashrc`): 
-```
-export EDITOR=emacs
-export http_proxy=http://user:pass@proxyhost:proxyport
-```
-
-### Obtenir de l'aide
-
-Aide générale sur git :
-```
-$ git help 
-```
-
-Aide sur une commande git :
-```
-$ git help <commande git>
-```
-
-Voir également la section [références](#références).
-
-### Exercice
-
-Installez et configurez le client git sur votre machine.  Vérifiez que votre
-client git peut accéder à l'extérieur, par exemple en récupérant le dépôt
-distant `https://github.com/juliendehos/invinoveritas` :
-
-![](installation_01.png)
-
-
-* * * * *
-
-## Dépôt local (journaliser un projet)
-
-L'élément de base d'un projet git est le dépôt. Il s'agit simplement d'un
-dossier classique que l'on demande à git de versionner.
-
-### Initialiser un dépôt
-
-Allez dans le dossier à versionner puis lancez la commande `git init`. 
-
-![](depot_local_01.png)
-
-Git créé alors un dossier `.git` pour y stocker ses metadonnées.  Si vous ne
-voulez plus versionner votre dossier, il suffit de supprimer ce dossier.  Le
-reste du temps, ne touchez pas à ce dossier si vous n'êtes pas absolument
-sûr(e) de ce que vous faites.
-
-### Afficher l'état d'un dépôt
-
-La commande `git status` affiche l'état courant du dépôt : nouveaux fichiers,
-fichiers modifiés, fichiers supprimés.  Cette commande est très sûre; elle ne
-peut rien casser.  N'hésitez donc pas à la lancer pour voir où vous en êtes.
-
-![](depot_local_02.png)
-
-### Ajouter des fichiers dans le dépôt
-
-Il faut indiquer explicitement les fichiers que git doit journaliser.  
-
-Par exemple, imaginons qu'on ouvre un nouveau fichier `rapport_01.tex` dans
-notre projet.
-
-![](depot_local_03.png)
-
-On y écrit du code latex.
-
-![](depot_local_04.png)
-
-Et on affiche l'état du dépôt.
-
-![](depot_local_05.png)
-
-Git nous indique que le fichier `rapport_01.tex` existe bien dans le dossier
-(ainsi qu'un fichier de sauvegarde), mais qu'il ne fait pas partie du dépôt. 
-
-Pour ajouter un fichier au dépôt, il faut utiliser la commande `git add`. 
-
-![](depot_local_06.png)
-
-Ceci indique que git doit prendre en compte le fichier lors des prochains
-commits (journalisation), ce qu'on peut vérifier avec un `git status`.
-
-![](depot_local_07.png)
-
-### Valider les modifications (commit)
-
-Après avoir ajouté, modifié ou supprimé des fichiers, on peut valider les
-modifications, c'est-à-dire sauvegarder un état du projet (commit). Encore une
-fois, seuls les fichiers qui ont été ajoutés au projet (avec `git add`) sont
-pris en compte. 
-
-La commande à lancer pour valider toutes les modifications est `git commit -a`.
-
-![](depot_local_08.png)
-
-Git lance alors l'éditeur de texte pour le message de commit.
-Le message est pré-rempli avec des informations concernant le commit. Ces
-informations vous permettent de vérifier que le commit correspond bien à ce que
-vous voulez mais ne feront pas partie du message final.
-
-Écrivez un message expliquant rapidement les modifications que vous êtes en
-train de valider puis enregistrez et quittez. 
-
-![](depot_local_09.png)
-
-Git créé alors le nouveau commit, qui valide ici le fichier `rapport_01.tex`.
-
-![](depot_local_10.png)
-
-Vous pouvez le vérifier avec un `git status`.
-
-![](depot_local_11.png)
-
-### Fichiers autogénérés et .gitignore
-
-Git est très pratique pour gérer des fichiers textes que l'on modifie
-régulièrement. En revanche, il n'est pas adapté pour gérer des fichiers dans un
-format non-textuel (images, données compressées, documents word...).  Si on
-ajoute un tel fichier dans le dépôt alors à chaque modification, git stockera
-une nouvelle copie complète (au lieu de stocker uniquement les lignes qui ont
-changé), ce qui est inefficace.
-
-D'autre part, il est inutile de versionner les fichiers autogénérés (créés
-automatiquement lors de la compilation du code). Par exemple, si on compile le
-code latex de notre projet : 
-
-![](depot_local_12.png)
-
-des fichiers intermédiaires sont créés et apparaissent lors des `git status` :
-
-![](depot_local_13.png)
-
-Pour les ignorer, il suffit d'ajouter un fichier `.gitignore` et d'y indiquer
-les fichiers à ignorer.
-
-![](depot_local_14.png)
-
-Ainsi, il n'apparaissent plus lors des `git status`.
-
-![](depot_local_15.png)
-
-Il est de pratique courante d'ajouter le `.gitignore` au dépôt, ainsi qu'un
-fichier `README.md` qui servira de page d'accueil (au format
-[markdown](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet)).
-
-![](depot_local_16.png)
-
-
-### Renommer et supprimer des fichiers
-
-La commande `git mv` permet de renommer un fichier versionné. Il ne faut pas
-utiliser la commande système (`mv`) car dans ce cas git ne saura pas qu'il faut
-renommer le fichier (il pensera que le fichier manque et essaiera de le
-recréer).
-
-![](depot_local_17.png)
-
-De même, la commande `git rm` permet de supprimer un fichier versionné.
-
-![](depot_local_18.png)
-
-
-### Afficher l'historique des commits
-
-Faisons d'abord une modification "commitée" puis une autre non commitée.
-
-![](depot_local_19.png)
-
-La commande `git log` permet d'afficher l'historique des commits.
-
-![](depot_local_20.png)
-
-On peut également le voir avec un client graphique graphique comme `gitg`.
-
-![](depot_local_21.png)
-
-Le "unstaged" correspond aux modifications courantes non commitées.
-
-Pour représenter l'historique d'un dépôt, on utilise souvent un graphe où les
-noeuds représentent les commits. On ajoute également l'étiquette "master", qui
-indique le dernier commit principal, et l'étiquette "HEAD", qui indique l'état
-courant du dépôt.
-
-![](depot_local_log.svg)
-
-Ainsi, un `git commit` créé un commit à partir de l'état pointé par HEAD
-et fait pointer master (et HEAD) sur ce nouveau commit.
-
-### Supprimer les modifications courantes
-
-La commande `git checkout -- . ` supprime les modifications courantes. Le dépôt revient
-alors dans l'état du dernier commit (master).
-
-![](depot_local_checkout_01.svg)
-
-### Revenir à un commit précédent (sans suppression)
-
-La commande `git checkout 7b3...` permet de revenir au commit "7b3...". On passe 
-ainsi dans un mode "détaché" (HEAD ne pointe plus sur un commit terminal).
-
-![](depot_local_checkout_02.svg)
-
-Au lieu d'utiliser le numéro de commit, on peut également utiliser les
-étiquettes. Par exemple, `git checkout master` pour aller au dernier commit
-principal ou `git checkout HEAD~1` pour aller au commit précédent le commit
-courant.
-
-### Marquer un commit
-
-La commande `git tag` permet de nommer des commits pour, par exemple, fixer une
-version ou pouvoir revenir plus facilement sur un commit particulier.
-
-![](depot_local_22.png)
-
-![](depot_local_checkout_03.svg)
-
-### Supprimer des commits précédents
-
-La commande `git reset 073...` revient au commit "073..." et annule tous les
-commits suivant (jusqu'à l'ancien master). Les modifications correspondants à
-ces commits sont conservées dans l'état courant (non commité).
-
-![](depot_local_checkout_04.svg)
-
-Autre possibilité : la commande `git reset --hard 073...` revient au commit
-"073..." et annule tous les commits suivant **en supprimant les modifications
-correspondantes**.
-
-![](depot_local_checkout_05.svg)
-
-### Résumé et méthode de travail
-
-Résumé des commandes git précédentes :
-
----|---|
-`git init` | initialise le dossier courant (nouveau dépôt git) |
-`git status` | TODO |
-`git add` | |
-`git commit -a` | |
-`git mv` | |
-`git rm` | |
-`git log` | |
-`git checkout -- .` | |
-`git checkout <commit/etiquette>` | |
-`git tag` | |
-`git reset` | |
-`git reset --hard` | |
-
-Quelques conseils de méthode de travail :
-
-- privilégier les petits dépôts, correspondant à différents travaux, plutôt
-  qu'un gros dépôt regroupant tous les travaux de l'année
-- faire des commits réguliers et correspondant aux petites tâches successives 
-- éviter de commiter un projet cassé (par exemple, du code qui ne compile pas)
-- ne pas versionner les fichiers auto-générés
-
-### Exercice
-
-
-TODO
-
-
-
-* * * * *
-
-## Dépôt distant (sauvegarder un projet sur un serveur)
-
-Git permet de synchroniser un dépôt local avec un dépôt distant (sur un
-serveur).  Il existe des serveurs comme github qui permettent d'héberger
-gratuitement des dépôts publics (visibles par tout le monde).
-
-Le serveur gogs du SCOSI vous permet d'héberger des dépôts publics ou privés.
-Il dispose d'une page web vous permettant de gérer vos projets. Pour cela,
-allez à l'adresse
-[https://gogs.univ-littoral.fr](https://gogs.univ-littoral.fr) et entrez vos
-identifiants du portail ULCO :
-
-![](depot_distant_01.png)
-
-Une fois identifié, le site vous affiche une page d'accueil (derniers commits,
-dépôts actifs...) :
-
-![](depot_distant_02.png)
-
-### Créer un dépôt sur un serveur git
-
-Pour créer un nouveau dépôt distant, allez sur la page du serveur gogs et
-cliquez "New Repository".
-
-![](depot_distant_03.png)
-
-Entrez le nom du dépôt distant à créer (évitez les espaces), puis cliquez
-"Create Repository".
-
-![](depot_distant_04.png)
-
-Le dépôt distant est alors créé et une page vous indique comment le récupérer
-localement. Attention, il y a une méthode plus simple que celle indiquée (cf
-section suivante).
-
-![](depot_distant_05.png)
-
-### Créer un dépôt local à partir d'un dépôt distant
-
-La commande `git clone ...` permet de récupérer un dépôt distant sur votre
-machine (cf image ci-dessous). Pensez à mettre votre login après le "https://".
-
-![](depot_distant_06.png)
-
-### Ajouter un dépôt local à un dépôt distant
-
-Si vous avez déjà créé et modifié un dépôt local, vous pouvez le synchroniser
-avec un dépôt distant en utilisant les commandes `git remote add origin ...`
-puis `git push -u origin master`. Sinon, utilisez plutôt la méthode de la
-section précédente.
-
-![](depot_distant_07.png)
-
-### Récupérer les commits d'un dépôt distant
-
-La commande `git pull` permet de récupérer les éventuelles modifications sur le
-serveur et de les intégrer dans votre dépôt local.
-
-![](depot_distant_08.png)
-
-### Envoyer les commits locaux sur un dépôt distant
-
-La commande `git push` permet d'envoyer vos commits locaux sur le serveur.
-
-![](depot_distant_09.png)
-
-Les commits/fichiers envoyés sur le serveur sont alors visibles sur la page web.
-
-![](depot_distant_10.png)
-
-Vous pouvez également toujours voir le contenu de votre dépôt avec un client
-graphique.
-
-![](depot_distant_11.png)
-
-### Résoudre des conflits
-
-Imaginez que vous avez modifié et commité un fichier, et que vous voulez
-l'envoyer sur le serveur. Pour cela, il faut d'abord faire un `git pull` avant
-le `git push` au cas où l'un de vos collaborateurs aurait envoyer une
-modification sur le serveur entre temps. 
-
-Si des modifications ont été faites en parallèle, git est souvent capable de
-les fusionner mais parfois il n'arrive pas à résoudre le conflit et il vous
-demande de le faire manuellement.
-
-![](depot_distant_12.png)
-
-Pour résoudre un conflit, il suffit d'ouvrir le fichier en cause et de
-remplacez les zones marquées par le contenu que vous voulez obtenir. 
-Il existe des outils graphiques comme `meld` qui peuvent vous y aider.
-
-![](depot_distant_13.png)
-
-Une fois les conflits édités, vous pouvez commiter et pusher vers le serveur.
-
-![](depot_distant_14.png)
-
-### Résumé et méthode de travail
-
-Résumé des commandes git précédentes :
-
----|---|
-`git clone` | récupère un dépôt distant |
-`git pull` | récupère les modifications du dépôt distant et les intègre dans le dépôt local |
-`git push` | envoie les commits du dépôt local sur le dépôt distant |
-
-Quelques conseils de méthode de travail :
-
-- utilisez la page
-  [https://gogs.univ-littoral.fr](https://gogs.univ-littoral.fr) pour créer et
-gérer vos dépôts distants.
-- récupérez vos nouveaux dépôts distant avec `git clone`
-- récupérez les modifications du serveur avec `git pull`
-- faites un `git pull` avant d'envoyer vos nouveaux commits sur le serveur (`git push`)
-
-### Exercice
-
-TODO
-
-* * * * *
-
-## Branches (travailler en équipe)
-
-TODO
-
-### Afficher les branches 
-git log --graph --all --oneline --decorate
-
-### Créer une nouvelle branche locale
-
-### Changer de branche
-
-### Fusionner des branches
-
-### Envoyer une branche sur un dépôt distant
-
-### Afficher les branches distantes
-
-### Terminer une branche locale
-
-### Terminer une branche distante
-
-### Supprimer un commit déjà pushé (DANGER !!!)
-git reset --hard e6c8e8e
-git push origin HEAD:master -f
-git reset --hard e6c8e8e
-
-![](branche_01.png)
-![](branche_02.png)
-![](branche_03.png)
-![](branche_04.png)
-![](branche_05.png)
-![](branche_06.png)
-![](branche_07.png)
-![](branche_08.png)
-![](branche_09.png)
-![](branche_10.png)
-![](branche_11.png)
-![](branche_12.png)
-![](branche_13.png)
-![](branche_14.png)
-![](branche_15.png)
-![](branche_16.png)
-![](branche_17.png)
-![](branche_18.png)
-![](branche_19.png)
-![](branche_20.png)
-![](branche_21.png)
-
-### Résumé et méthode de travail
-
-Résumé des commandes git précédentes :
-
----|---|
-`git ` | |
-
-Quelques conseils de méthode de travail :
-
-- TODO
-
-
-### Exercice
-
-TODO
-
-* * * * *
-
-## Forks (collaborer avec d'autres projets)
-
-TODO
-
-### Forker un dépôt distant
-
-### Envoyer un pull request
-
-### Résumé et méthode de travail
-
-Résumé des commandes git précédentes :
-
----|---|
-`git ` | |
-
-Quelques conseils de méthode de travail :
-
-- TODO
-
-### Exercice
-
-TODO
+- [http://git-scm.com/book/fr/v2](http://git-scm.com/book/fr/v2)
+- [https://www.atlassian.com/git/tutorials/](https://www.atlassian.com/git/tutorials/)
 
 * * * * *
 
-## Références
-
-- [https://www.atlassian.com/git/tutorials/](https://www.atlassian.com/git/tutorials/)
-- [http://git-scm.com/book/fr/v2](http://git-scm.com/book/fr/v2)
+[Retour au début de la page](#header)
 
-* * * * *
+[Retour à la page d'accueil](../../index.html)
 
 Dernière mise à jour : 2016-03-05
 

+ 85 - 0
installation.md

@@ -0,0 +1,85 @@
+---
+title: "Tutoriel git <small><br> <hr> [introduction](index.html) | [installation](installation.html) | [dépôt local](depot_local.html) | [dépôt distant](depot_distant.html) | [branches](branches.html) | [forks](forks.html) <hr> </small>"
+output:
+    toc: true
+---
+
+* * * * *
+
+## Installation et configuration
+
+Pour utiliser git, il vous faut une connexion internet et un client git.
+
+### Installation sous Linux
+
+La plupart des systèmes Linux modernes propose le client git dans leur système
+de paquets. Par exemple, sur les Linux basés Debian, il suffit de lancer la
+commande console :
+
+```
+sudo apt-get install git
+```
+
+Il existe également des clients graphiques : gitg, giggle, qgit, gitk, git-gui...
+
+### Installation sous Windows ou Mac
+
+Télécharger et installer le client [git pour
+Windows](http://git-scm.com/download/win) ou le client [git pour
+Mac](http://git-scm.com/download/mac).
+
+### Configuration
+
+Après avoir installé le client git, il faut configurer le nom et l'adresse
+e-mail de l'utilisateur (à faire une seule). Par exemple, en tapant les
+commandes consoles : 
+
+```
+$ git config --global user.name "Julien Dehos"
+$ git config --global user.email dehos@nimpe.org
+```
+
+On peut également configurer l'éditeur de texte et le proxy que le client git
+doit utiliser. Par exemple, en tapant les commandes consoles :
+
+```
+$ git config --global core.editor emacs
+$ git config --global http.proxy http://user:pass@proxyhost:proxyport
+```
+ou alors en ajoutant des variables d'environnement (par exemple, dans le
+`.bashrc`): 
+```
+export EDITOR=emacs
+export http_proxy=http://user:pass@proxyhost:proxyport
+```
+
+### Obtenir de l'aide
+
+Aide générale sur git :
+```
+$ git help 
+```
+
+Aide sur une commande git :
+```
+$ git help <commande git>
+```
+
+Voir également la section [références](#références).
+
+### Exercice
+
+Installez et configurez le client git sur votre machine.  Vérifiez que votre
+client git peut accéder à l'extérieur, par exemple en récupérant le dépôt
+distant `https://github.com/juliendehos/invinoveritas` :
+
+![](installation_01.png)
+
+* * * * *
+
+[Retour au début de la page](#header)
+
+[Retour à la page d'accueil](../../index.html)
+
+Dernière mise à jour : 2016-03-05
+