diff --git a/git_tutorial.md b/git_tutorial.md index 411eb1cf9dbd07717e472d89e1ade409b2817963..48e43aa9430a5f28519216d5d48177d16ab193b4 100644 --- a/git_tutorial.md +++ b/git_tutorial.md @@ -1,24 +1,6 @@ % Introduction à Git % Orestis Malaspinas -% commit f82cf5992b660e59868b2dc83fb6c6b85e8204af - -# Des références - -Il existe énormément de très bons documents et tutoriels en ligne: - -- [https://git-scm.com/](https://git-scm.com/) -- [https://try.github.io/](https://try.github.io/) - -Des tas de repo en ligne: - -- [Githepia](https://githepia.hesge.ch) -- [Github](https://www.github.com) -- [Gitlab](https://www.gitlab.com) - -Et des GUI assez utiles: - -- [GitExtensions](https://gitextensions.github.io/) -- [GitKraken](https://www.gitkraken.com/) +% commit 305e1499b75472fb4572c8e405812a663d810704 # Qu'est-ce que Git? @@ -38,12 +20,14 @@ Et des GUI assez utiles: # Principe de fonctionnement de Git (1/3) -Git est un outil décentralisé. +Git est un outil décentralisé... -Typiquement un projet git possède un serveur "officiel" géré par l'administrateur. Mais: +. . . -- Un développeur peut faire une copie (clone) de tout le projet (sur son ordinateur à lui). -- Modifier localement le projet et publier (push) ses propres modifications (sur son ordinateur à lui). +Mais, typiquement un projet git possède un serveur "officiel" (centralisé): + +- Un·e développeur·euse peut faire une copie (clone) de tout le projet (sur son ordinateur). +- Modifier localement le projet et publier (push) ses propres modifications (sur son ordinateur). - Demander au gestionnaire du projet de fusionner (merge) ses modifications avec le serveur "officiel" (pull/merge request): - L'administrateur récupère le projet depuis le serveur du développeur. - Fusionne le projet officiel avec celui modifié (merge). @@ -61,16 +45,16 @@ Typiquement un projet git possède un serveur "officiel" géré par l'administra ## Création du dépôt et clone -1. Création d'un dépôt *tutorial* git sur [https://githepia.hesge.ch](https://githepia.hesge.ch). +1. Création d'un dépôt *tutorial* git sur [https://gitedu.hesge.ch](https://gitedu.hesge.ch). 2. Clone du dépôt. -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.bash} +```bash $ git clone ssh://git@ssh.hesge.ch:10572/orestis.malaspin/tutorial.git Cloning into 'tutorial'... warning: You appear to have cloned an empty repository. $ cd tutorial [tutorial]$ -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +``` 3. Et voilà vous êtes dans votre dépôt git. @@ -82,7 +66,7 @@ $ cd tutorial 2. Ajout du `premierfichier.c` aux fichiers suivis par git. 3. *Commit* du fichier ajouté à l'historique des modifications. 4. *Push* de l'état de l'historique sur le serveur. -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.bash} +```bash [tutorial]$ echo Hello World > premierfichier.c [tutorial]$ git status On branch master @@ -96,13 +80,13 @@ Untracked files: nothing added to commit but untracked files present (use "git add" to track) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +``` # Ajout de fichiers à l'historique (2/4) ## Commandes: `git add`, `git status`, `git commit`, `git push` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.bash} +```bash [tutorial]$ git add premierfichier.c [tutorial]$ git status On branch master @@ -118,13 +102,13 @@ Changes to be committed: [master (root-commit) a4f2052] mon premier commit 1 file changed, 1 insertion(+) create mode 100644 premierfichier.c -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +``` # Ajout de fichiers à l'historique (3/4) ## Commandes: `git add`, `git status`, `git commit`, `git push` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.bash} +```bash [tutorial]$ git status On branch master Your branch is based on 'origin/master', but the upstream is gone. @@ -137,7 +121,7 @@ Writing objects: 100% (3/3), 238 bytes | 238.00 KiB/s, done. Total 3 (delta 0), reused 0 (delta 0) To ssh://ssh.hesge.ch:10572/orestis.malaspin/tutorial.git * [new branch] master -> master -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +``` # Ajout de fichiers à l'historique (4/4) @@ -149,9 +133,7 @@ To ssh://ssh.hesge.ch:10572/orestis.malaspin/tutorial.git * Éviter d'ajouter de fichiers binaires (prennent de la place). * Les fichiers binaires sont générables par l'utilisateur du projet. * Éviter de faire `git add .` -* Utiliser les fichiers `.gitignore` pour se protéger[^1]. - -[^1]: J'en parlerai lors d'une prochaine séance. +* Utiliser les fichiers `.gitignore` pour se protéger. # Modification de fichiers dans l'historique (1/3) @@ -161,7 +143,7 @@ To ssh://ssh.hesge.ch:10572/orestis.malaspin/tutorial.git 1. Modification du fichier `premierfichier.c`. 2. Ajout/commit/push des modifictations. -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.bash} +```bash [tutorial]$ echo Wild World > premierfichier.c [tutorial]$ git status On branch master @@ -174,13 +156,13 @@ Changes not staged for commit: modified: premierfichier.c no changes added to commit (use "git add" and/or "git commit -a") -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +``` # Modification de fichiers dans l'historique (2/3) ## Commandes: `git diff`, `git log` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.bash} +```bash [tutorial]$ git diff diff --git a/premierfichier.c b/premierfichier.c index 557db03..9622e40 100644 @@ -198,13 +180,13 @@ Writing objects: 100% (3/3), 274 bytes | 274.00 KiB/s, done. Total 3 (delta 0), reused 0 (delta 0) To ssh://ssh.hesge.ch:10572/orestis.malaspin/tutorial.git a4f2052..f9ab3ec master -> master -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +``` # Modification de fichiers dans l'historique (3/3) ## Commandes: `git diff`, `git log` -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.bash} +```bash [tutorial]$ git log commit f9ab3ec4a00c46a12d7a45f133295acc5fb5cd20 (HEAD -> master, origin/master) Author: Orestis Malaspinas <orestis.malaspinas@hesge.ch> @@ -217,7 +199,7 @@ Author: Orestis Malaspinas <orestis.malaspinas@hesge.ch> Date: Sun Mar 4 22:25:24 2018 +0100 mon premier commit -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +``` # Revenir en arrière dans l'historique (1/6) @@ -227,7 +209,7 @@ Date: Sun Mar 4 22:25:24 2018 +0100 2. Faire un `git add` par erreur. 3. Faire un `git commit` par erreur. -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.bash} +```bash [tutorial]$ echo Oh no! An awful modification! > premierfichier.c [tutorial]$ git status On branch master @@ -240,7 +222,7 @@ Changes not staged for commit: modified: premierfichier.c no changes added to commit (use "git add" and/or "git commit -a") -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +``` # Revenir en arrière dans l'historique (2/6) @@ -248,7 +230,7 @@ no changes added to commit (use "git add" and/or "git commit -a") ### Une modification dans un fichier par erreur -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.bash} +```bash [tutorial]$ git checkout premierfichier.c [tutorial]$ git status On branch master @@ -256,7 +238,7 @@ Your branch is up to date with 'origin/master'. nothing to commit, working tree clean -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +``` # Revenir en arrière dans l'historique (3/6) @@ -264,7 +246,7 @@ nothing to commit, working tree clean ### Faire un `git add` par erreur (1/2) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.bash} +```bash [tutorial]$ echo Oh no! An awful modification! > premierfichier.c [tutorial]$ git add premierfichier.c [tutorial]$ git status @@ -278,7 +260,7 @@ Changes to be committed: [tutorial]$ git reset HEAD Unstaged changes after reset: M premierfichier.c -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +``` # Revenir en arrière dans l'historique (4/6) @@ -286,7 +268,7 @@ M premierfichier.c ### Faire un `git add` par erreur (2/2) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.bash} +```bash [tutorial]$ git status On branch master Your branch is up to date with 'origin/master'. @@ -306,7 +288,7 @@ index 9622e40..cfd5469 100644 @@ -1 +1 @@ -Wild World +Oh no! An awful modification! -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +``` # Revenir en arrière dans l'historique (5/6) @@ -314,7 +296,7 @@ index 9622e40..cfd5469 100644 ### Faire un `git commit` par erreur (1/2) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.bash} +```bash [tutorial]$ git commit -am "troisieme commit" [master 0563c02] troisieme commit 1 file changed, 1 insertion(+), 1 deletion(-) @@ -330,7 +312,7 @@ Changes not staged for commit: no changes added to commit [tutorial]$ git checkout premierfichier.c -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +``` # Revenir en arrière dans l'historique (6/6) @@ -338,7 +320,7 @@ no changes added to commit ### Faire un `git commit` par erreur (2/2) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.bash} +```bash [tutorial]$ echo Wonderful World > premierfichier.c [tutorial]$ git commit -am "la bonne troisieme modification" [master 1b42970] la bonne troisieme modification @@ -354,7 +336,7 @@ nothing to commit, working tree clean Auto-merging premierfichier.c CONFLICT (content): Merge conflict in premierfichier.c Automatic merge failed; fix conflicts and then commit the result. -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +``` ### Il ne reste qu'à corriger le conflit et refaire un `git commit`, `git push` @@ -374,7 +356,7 @@ Automatic merge failed; fix conflicts and then commit the result. - Il n'est plus nécessaire de suivre un fichier. - **Attention : le fichier ne disparaît pas de l'historique.** -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.bash} +```bash [orestis@perka tutorial]$ git rm premierfichier.c rm 'premierfichier.c' [orestis@perka tutorial]$ git status @@ -389,13 +371,13 @@ Changes to be committed: [master 8f76d90] efface donc ce fichier 1 file changed, 1 deletion(-) delete mode 100644 premierfichier.c -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +``` # Retirer un fichier du contrôle de version (2/3) ## Commande: `git rm` (1/2) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.bash} +```bash [orestis@perka tutorial]$ ls -ltr total 0 [orestis@perka tutorial]$ git reset bbb151324289dc2f85468f5721ec1021692dd216 @@ -412,7 +394,7 @@ Changes not staged for commit: deleted: premierfichier.c no changes added to commit (use "git add" and/or "git commit -a") -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +``` # Retirer un fichier du contrôle de version (3/3) @@ -420,14 +402,14 @@ no changes added to commit (use "git add" and/or "git commit -a") On peut retrouver le fichier dans l'historique. -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.bash} +```bash [orestis@perka tutorial]$ ls -ltr total 0 [orestis@perka tutorial]$ git checkout premierfichier.c [orestis@perka tutorial]$ ls -ltr total 4 -rw-r--r-- 1 orestis orestis 17 5 mar 11:13 premierfichier.c -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +``` # Commandes et concept un peu plus avancés @@ -484,6 +466,24 @@ sanders # ignore le répertoire sanders [^2]: Pour une liste plus exhaustive voir le site <https://bit.ly/2HTZJyQ> par exemple. +# Des références + +Il existe énormément de très bons documents et tutoriels en ligne: + +- [https://git-scm.com/](https://git-scm.com/) +- [https://try.github.io/](https://try.github.io/) + +Des tas de repo en ligne: + +- [Githepia](https://githepia.hesge.ch) +- [Github](https://www.github.com) +- [Gitlab](https://www.gitlab.com) + +Et des GUI assez utiles: + +- [GitExtensions](https://gitextensions.github.io/) +- [GitKraken](https://www.gitkraken.com/) + # Bibliographie Ces quelques slides sont inspirés du site <https://bit.ly/2HTZJyQ>.