--- 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. - 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...). Il permet notamment : - 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 (jpg, word, excel...) -> 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", avec 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...) : 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 : 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 Mac Télécharger et installer le client [git pour Mac](http://git-scm.com/download/mac). ### Installation sous Windows Télécharger et installer le client [git pour Windows](http://git-scm.com/download/win). ### 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 "John Doe" $ git config --global user.email johndoe@example.com ``` 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 ``` Voir également la section [références](#références). ### Exercice Installez et configurez le client git sur votre machine. * * * * * ## Dépôt local (journaliser mon projet) TODO ### Initialiser un dépôt ``` $ git init Dépôt Git vide initialisé dans /home/dehos/tmp/mon_PhD/.git/ ``` ### Voir l'état courant du dépôt ``` $ git status Sur la branche master Validation initiale rien à valider (créez/copiez des fichiers et utilisez "git add" pour les suivre) ``` ### Ajouter/supprimer des fichiers dans le dépôt ``` $ git status Sur la branche master Validation initiale Fichiers non suivis: (utilisez "git add ..." pour inclure dans ce qui sera validé) paper.tex aucune modification ajoutée à la validation mais des fichiers non suivis sont présents (utilisez "git add" pour les suivre) ``` ### Valider les modifications (commit) ### Afficher l'historique des commits log ### Revenir à un commit précédent ### Annuler des commits ### Bonne pratique concernant la journalisation .gitignore conseil sur les fichiers générés et les fichiers de données ### Exercice * * * * * ## Dépôt distant (sauvegarder mon projet sur un serveur) TODO nouveau projet projet existant ### Exercice * * * * * ## Branches (travailler en équipe) TODO ### Exercice * * * * * ## Forks (collaborer avec d'autres projets) ### Exercice * * * * * ## 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