Skip to content
Snippets Groups Projects
Commit c80f5509 authored by Derrode Stéphane's avatar Derrode Stéphane :dromedary_camel:
Browse files

ajout des tutos git

parent d02b24ab
No related branches found
No related tags found
No related merge requests found
......@@ -3,8 +3,8 @@ __pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# fichier mac
.DS_Store
# Distribution / packaging
.Python
......
tuto-git-gitlab/figures/GithubDesktop_vierge.png

145 KiB

tuto-git-gitlab/figures/Gitlab_newproject.png

291 KiB

<mxfile host="Electron" modified="2020-09-20T06:46:37.677Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/13.7.3 Chrome/85.0.4183.98 Electron/10.1.2 Safari/537.36" etag="bEDzdRwK5yAsqx6JgaMz" version="13.7.3" type="device"><diagram id="p7oPabUjFc-xsDlfVBy0" name="Page-1">7Vlbb+I6EP41SLsPIBKTBB4ptN2VzkpHas9lH01iErdOnHVMgfPrzzi2cwXablsqVUVVZY9nxvZcP8wALdLdtcB58oNHhA3ccbQboOXAdYPpDP4rwl4TpoGvCbGgkSY5NeGG/kcMcWyoGxqRosUoOWeS5m1iyLOMhLJFw0LwbZttzVl71xzHpEe4CTHrU/+hkUzMLdygpn8jNE7szo5vLpxiy2xuUiQ44tsGCV0O0EJwLvUo3S0IU7azdtFyV0dWq4MJksmnCPwd+ndoPi7uphNHhBNyvc7+GjpGTSH39sYkAgOYKRcy4THPMLusqReCb7KIKLVjmNU8f3CeA9EB4h2Rcm+8iTeSAymRKTOrhcRCzpV3gJDxjFjaFWXMqCVZZDlWjIf3twnNNNkwaUWC31eOQWp9R+W/SsXI9cz0p2FW4+XOqleTfbWXFPumlJr/bC7WcuXMCvZ9YO3JNyIkpwxvYhmLmMhTfCZ6lFcaOxgXXxOeEjgQMAjCsKQP7bDFJvrjiq8S/ZNTOLM7NonqBmYjk6fObNxWoW9kpOowAx/hfYMtVwzFiX3Gh/e5+j1+GOgT2FnDJjWpzITnZIXe8gGzjfUhl4IoNxQ5Br+6PgOnXawEjGJZBoKhWEJMJcMrS4ZTrGrWTsLV6aSidJtQSW7KXdByCzW1nTprCP4FZ1yUsijyyDSaVJnQWJm6K+T7p2L0gQhJdieDyq52g8M6ZVuXRMfWuaRRDv1OEDXjsOHC53to1vOQNTU4KGvZ1/+1USX2ItS2matciVdf4GTwB7uPG6OvaqhMBo0ik8M1TinbaxlQhNO8XERIWTwh7IFIGuLeSluJOYnSkXGRYtZe3hpzqfWJPku5yKCCEjFU8Uaz+KA8eE8OKcROZuTH+a69KAXOijVIWfmMVAxbLqK2+qb4Cof3cRmZw47h3Mm0Mpg7mdVjr2G+iBY5w8Z0NGO0sfGacSybB7Ie6iaTss9BV2q7lt1FaXHKg3e1JFIqjDBXgeZe6XwckXDI9jwbrSFzr3Z79YEBuJJxsAdggzph9e7tEwFZx9eRVFZGfzyHMaMx9LJlCI4j4pVSFLVTNOhnaFVKmxmK3ipDK9hzVmRh278dl018ZJHAo92/1fydR5r/G6EY92W4YvxuwOJF4WKPc6DnQi35tSkHG/EBmmfVFN+teTroaPc0JTesTFFXVbReI/j0C+33NIdMhRjhWR8YfbEkain5Rp2wqqcV/etxVNWrxofL7qkSq/wFvZrNzUJKo0iXHAKNBK9KVSpjDYAFvd7FwFsqXVBldLMpVQtu7oqWw9nJLwHPiJHJpINyvV6MTM9ZvR3vE2B9AqzTACtUi97iloBvvMVoNIL/HwFJTYKR18pG5B2o2L53znQM3gNMneWZJmg+01TY7DGgFjwLqZ0DTr02mjryHOK1wYTTBQlHnml6ipDTQSXd2NU3fvl7j9858PSR957T/G/03nP8OeF3ANEPWpTFeIEGc9Vv7rgCrk9BRkXyQZDRawEjd+J0gNGsV4qDs36t7b8NviRUbgV+wJQ9JTpCnqZUfsZHOz5mQbuMHYgP/3XiA6b1jzW68tS/eKHL/wE=</diagram></mxfile>
\ No newline at end of file
tuto-git-gitlab/figures/PrincipeGit.png

20 KiB

tuto-git-gitlab/figures/gitignore.png

173 KiB

Voici une démo des principales commandes de git, à utiliser depuis un terminal. Pour **Windows**, utilisez le terminal appelé ``Git Bash``, qui a été installé en même temps que **git**).
**Configuration de git** (à faire une fois pour toute)
```bash
>> git config --global color.ui true
>> git config --global user.name "votre_pseudo"
>> git config --global user.email moi@email.com
>> git config --global core.editor geany #(for Linux if installed)
>> git config --global core.editor "/App.../Sublime\ Text.app/.../bin/subl -w" #(for Mac if installed)
>> git config --global core.autocrlf true #(for Windows)
>> git config --list
>> cat ~/.gitconfig
```
**git clone / status / log**
```bash
>> git clone https://gitlab.ec-lyon.fr/sderrode/helloworld.git
>> cd helloworld
>> git status
>> git log
```
Il s'agit ici du clonage d'un projet existant sur votre espace **gitlab**.
**Modification d'un fichier existant**
```bash
>> subl readme.md #(modification du fichier)
>> git status
>> git commit -a -m "modification de readme.md"
>> git status
>> git log
```
**Création d'un fichier et ajout à git**
```bash
>> touch prog.py #(création d''un nouveau fichier vide)
>> subl prog.py #(écriture d''un programme dans le fichier)
>> python prog.py
>> git status
>> git add prog.py #(suivi du fichier par git)
>> git add -A #(suivi de tous les nouveaux fichiers )
>> git commit -a -m "ajout d'un fichier"
>> git status
>> git log
```
On peut utiliser ce procédé pour ajouter un fichier ``.gitignore`` sur la racine du projet.
**Différence entre 2 commit**
```bash
>> git diff HEAD^ HEAD README.md #(entre l''avant dernier et le dernier commit)
```
On peut remplacer ``HEAD^`` et ``HEAD`` par deux numéros de commit.
**Revenir en arrière**
```bash
>> git reset --hard 82f5 #(attention suppression des commit les plus récents!)
>> git checkout 1ce87820b4b1 #(bref saut dans un commit précédent)
>> git log
>> ls
>> git checkout master (on revient dans l''état initial)
>> git log
>> ls
```
**Publication vers gitlab et mise à jour depuis gitlab**
```bash
>> git status
>> git push #(publication vers gitlab de tous les nouveaux commit)
>> git pull #(récupération des changements publiés par d'autres)
```
Si un collègue du projet à mis à jour le dépôt **gitlab**, alors il faut fusionner ces modifications avec vos propres travaux, localement sur votre machine. Avant de lancer la commande, pensez à commiter vos propres changements. Si la fusion pose problèmes (vous avez travaillé sur le même bout de code et vos corrections ne sont pas fusionable de manière automatique), alors git vos informe de la procédure manuelle à suivre.
**Création d'une branche**
Les branches sont essentiellement utilisées pour tester une idée sans perturber le projet. Si vous validez cette idée, alors il devient possible de fusionner la branche avec la branche principale:
```bash
>> git branch essai #(on créé une nouvelle branche essai
>> git branch
>> git checkout essai #(on bascule vers cette branche)
>> touch ALIRE.tx
>> subl ALIRE.tx
>> git add ALIRE.tx
>> git commit -a -m "add file ALIRE.tx"
>> ls
>> git log
>> git checkout master
>> ls
>> git merge essai -m "merge de la branche essai" #(vous pouvez préciser un message qui explique le merge)
>> ls
>> git branch -d essai #(destruction de la branche après merge)
```
On peut très bien merger une branche et continuer son développement pour faire un second merge plus tard. On peut aussi publier la branche sur **gitlab** (pour l'instant elle ne reste que locale).
**Tagger une version**
```bash
>> git tag -a v0.1 HEAD -m "my version 0.1"
>> git tag #(liste les tags)
>> git push --tags #(envoi des tag sur le dépôt gitlab)
```
**Archiver une version**
```bash
>> git archive --format=tgz --prefix=git-0.1/ HEAD >git-0.1.tgz
>> ls
```
[[TOC]]
Comme tout tutoriel, ce document a besoin de vos retours pour s'améliorer! N’hésitez pas à m'envoyez un mail décrivant vos difficultés et, éventuellement, les solutions que vous auriez trouvées pour les contourner.
# Tuto sur git/gitlab
Ce document présente un tuto à l'usage de **git**/**gitlab**. Il est (sera?) consultable sous forme de vidéo dans le Moodle du cours INF-TC2.
## Installer **git** et *Github Desktop*
**git** est disponible par défaut sur les machines *Mac OS X* et *Linux*. S'il est absent de *Windows* (pour le savoir, lancez la commande *git* dans un Terminal/Invite de commandes), alors installez-le à partir de ce lien : [git-scm](https://git-scm.com/download/win). Lors de l'installation, validez les choix par défaut qui vous sont proposés.
L'interface *Github Desktop* que nous allons installer n'est absolument pas nécessaire pour travailler avec git. Mais elle évite, dans un premier temps, d'utiliser des commandes manuelles à partir d'un Terminal.
1. Téléchargez, installez et lancez l'application [Github Desktop](https://desktop.github.com/).
<center><img src="figures/GithubDesktop_vierge.png" style="width:50%"/></center>
1. Configurer *Github Desktop* (cette étape n'est nécessaire que si vous ne l'avez pas déjà fait lors de l'installation du logiciel) : aller dans le menu ``Préférences / git``
- entrez votre nom et votre adresse émail.
## Gérer son premier projet git avec gitlab
1. Montrer l'interface de **gitlab**
- Adresse: https://gitlab.ec-lyon.fr;
- Identifiant: ceux de Centrale;
- Naviguer dans le projet INF-TC2 (que les étudiants ont déjà étudié). Donner quelques explications sur l'interface.
1. Créer un nouveau projet
- Nom : HelloWorld;
- Description: Mon premier projet gitlab;
- Discuter *Public/Internal/Private*;
- Sélectionner *Initialize repository with a README*;
<center><img src="figures/Gitlab_newproject.png" style="width:50%"/></center>
- Cliquer sur l'icône ``Clone`` et copiez le lien ``Clone with HTTPS``, qui ressemble à https://gitlab.ec-lyon.fr/xyyyyy/helloworld.git.
1. Basculer sur *Github Desktop*,
- Sélectionner l'option ``Clone a Repository from the Internet``, puis l'onglet ``URL`` (ou menu ``File``, ``Clone repository``).
- Copier l'adresse précédemment mise en mémoire dans l'espace dédié, et choisir dans ``local path`` le répertoire dans lequel votre projet sera copié. Appuyez sur le bouton ``Clone`` de l'interface pour lancer l'importation de votre projet **gitlab** sur votre machine.
- Vérifier dans un gestionnaire de fichiers que le *repo* est bien copié localement sur sa machine et qu'il contient un répertoire caché (``.git``) et le fichier *readme.md*.
- Basculer sur l'onglet ``history``
1. Pour éviter que certains fichiers temporaires ne soient suivis par **git**, on va spécifier les fichiers a exclure dans un fichier appelé *.gitignore* (il s'agit d'un fichier caché). Pour cela
- Aller dans le menu ``Repository``, sous-menu ``Repository settings``, puis ``Ignored Files``.
- Copier le contenu du fichier qui se trouve à l'adresse https://github.com/github/gitignore/blob/master/Python.gitignore dans l'espace réservé, puis ``Save``.
<center><img src="figures/gitignore.png" style="width:50%"/></center>
- On doit alors *Commiter* les changements (le texte par défaut qui décrit le ``commit`` est OK). Plus de détails sur ces ``commit`` plus loin.
1. Éditer le fichier *readme.md* avec *Sublime Text* et enregistrer les changements localement:
- Basculer vers *Github Desktop* et discuter les changements qui interviennent sur l'interface.
- *Commiter* les changements, et monter l'onglet *History*.
- *Pusher* le travail vers gitlab en utilisant l'option *Publish Branch*.
- Basculer vers **gitlab** et vérifier que les changements ont bien étaient publiés
1. Basculer vers *Spyder* pour éditer du code python:
- Taper un programme *incremente_de_un(x)* et sauvegarder dans votre répertoire local sous le nom de fichier *incremente.py*.
- *commiter* les changements dans *Github Desktop*
- Refaire la même chose avec un autre fichier (*incremente_de_deux(x)*), à sauvegarder dans un sous répertoire *test*.
- *Pusher* son travail vers **gitlab**, et vérifier que tout se met bien à jour.
De manière synthétique, une fois le projet créé,
1. vous modifiez vos code sources, et enregistrez régulièrement vos changements avec un ``commit`` (donc en local). Vous pouvez ``commiter`` des sources même s'ils ne sont pas terminés ou comportent des bugs. À ce stade cela n'a pas d'importance.
2. quand vous êtes content de votre travail, et que vos jugez vos algorithmes fonctionnels, vous publiez vos précédents ``commit`` sur **gitlab** avec un ``push``.
Ce comportement est illustré par le schéma de la figure suivante:
<center><img src="figures/PrincipeGit.png" style="width:50%"/></center>
-----
Pour détruire ce projet (sans grand interêt), il faut :
1. Quitter Spyder pour farmer les fichiers en cours.
1. Détruire la version locale en utilisant *Github Desktop*: sélectionner l'onglet ``Current Repository``, et le menu contextuel sur le nom de votre projet permet d'accéder à ``Remove``. Penser à cocher la suppression physique des fichiers si vous le souhaiter (sinon seul la gestion du projet par *Github Desktop* sera supprimée, les fichiers seront toujorus présents sur votre disque dur).
1. Détruire la version distante sur **gitlab**: Dans la barre de menu latérale à gauche de l'interface Web, sélectionnez l'icône représentant une roue crantée correspondant à ``Settings``. Dans le sous-menu ``Général``, appuyez sur le bouton ``Expand`` correspondant à la ligne : *Advanced*. Tout en bas, sélectionner ``Delete Project``, copier la phrase demandée et appuyer sur le bouton pour confirmer.
-----
A quoi ça sert d'utiliser **git** et **gitlab** ? Les avantages sont nombreux:
- Avoir un copie de son travail sur un serveur distant.
- Sauvegarde incrémentale et dun historique des modification (undo infini!)
- Partager son travail avec tout le monde (si votre projet est publique), ou avec des personnes choisies (invitations personnelles).
- Travailler à plusieurs sur le même projet et en même temps (mais ça, c'est un autre tuto...)
- fusion automatique (ou presque) des sources
- traçage des modification (qui, qoui)
**Stéphane Derrode**
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment