=== ARCHIVE ATELIER GIT === {{{#!highlight irc (16:30:07) davin.baragiotta: ======================= DEBUT : Atelier Git =========================== (16:30:23) arnaud.amelina left the room. (16:30:27) davin.baragiotta: Bonjour à tous! Cet atelier est co-animé par moi et progfou (16:30:52) davin.baragiotta: Je vais vous guider pendant 1h sur les commandes de base Git (16:31:26) davin.baragiotta: ensuite on aura un bon 30 min avec progfou pour la partie "suivre ses serveurs avec Git", une nouveauté cette année ;) (16:31:37) davin.baragiotta: finalement on aura 20min de questions (16:31:47) davin.baragiotta: support de présentation pour ma partie : (16:31:54) davin.baragiotta: https://wiki.auf.org/wikiteki/Projet/SemaineTech/2013/Ateliers/Git/Support (16:32:08) davin.baragiotta: grosso modo, c'est le même atelier que l'an dernier (16:32:11) davin.baragiotta: mais un peu plus court (16:32:22) davin.baragiotta: on pourra collaborer ensuite (16:32:36) davin.baragiotta: dans un "labo" (autre nouveauté de cette année) (16:32:49) davin.baragiotta: j'ai créé un labo-git... on en parle après... (16:33:05) davin.baragiotta: maintenant, vous devriez avoir 3 fenêtres ouvertes (16:33:11) davin.baragiotta: * celle-ci ;) (16:33:21) davin.baragiotta: * le support de présentation (web) (16:33:26) davin.baragiotta: * un terminal (16:33:32) davin.baragiotta: c'est parti! (16:33:35) davin.baragiotta: INTRODUCTION (16:33:50) davin.baragiotta: notre objectif aujourd'hui est de connaître les commandes de base (16:34:11) davin.baragiotta: pour pouvoir suivre localement les versions (16:34:33) davin.baragiotta: utiliser les branches (sera certainement plus dans le "labo") (16:34:44) davin.baragiotta: et surtout, faire le suivi des serveurs (16:34:51) davin.baragiotta: vous devez avoir Git d'installé (16:34:59) davin.baragiotta: sudo apt-get install git (16:35:05) davin.baragiotta: (avant c'était git-core) (16:35:23) davin.baragiotta: aussi, installer l'outil de visualisation graphique de git : gitk (16:35:29) davin.baragiotta: sudo apt-get install gitk (16:35:38) davin.baragiotta: mais pourquoi "versionner"? (16:36:09) davin.baragiotta: en fait, on veut pouvoir "suivre" les modifications qu'on fait dans une arboresence de fichiers dans plusieurs cas (16:36:13) davin.baragiotta: exemples (16:36:29) davin.baragiotta: vous développez un logiciel... vous faites donc des modifications au code source (16:36:44) davin.baragiotta: on veut suivre les modifications! (16:37:06) davin.baragiotta: vous gérez un serveur à l'AUF et vous modifiez sa config, par exemple.... (16:37:11) davin.baragiotta: on veut suivre les modifications! (16:37:40) davin.baragiotta: quand on dit suivre : c'est que on veut voir les modifications "voulues"... et pouvoir revenir en arrière si on s'est trompé, par exemple (16:38:03) davin.baragiotta: Git est un "gestionnaire de version"... un VCS en anglais (16:38:22) davin.baragiotta: Git est de la 3e génération des VCS, la génération plus récente (16:38:39) davin.baragiotta: d'ailleurs on pourrait dire qu'il a su s'imposer par rapport aux autres VCS de 3e génération (16:38:49) davin.baragiotta: en quoi Git est particulier? (16:38:58) davin.baragiotta: d'abord, il est distribué (16:39:06) davin.baragiotta: attention, c'est important! ;) (16:39:30) davin.baragiotta: non.... il n'y a pas LE dépôt central avec Git... (16:39:39) davin.baragiotta: il y a PLEIN de dépôts autonomes... (16:40:06) davin.baragiotta: concrètement, quand on collabore : chaque collaborateur a une version locale complète des sources versionnées (16:40:18) davin.baragiotta: indépendante... (16:40:48) davin.baragiotta: bien sûr, après on peut tout fusionner les apports de chacun dans les dépôts (16:40:59) davin.baragiotta: mais parlons concret : mettons les mains dans git (16:41:21) davin.baragiotta: sur votre poste, créez-vous un répertoire nommé... disons "semainetech" (16:41:32) davin.baragiotta: déplacez-y vous (16:41:36) davin.baragiotta: mkdir semainetech (16:41:40) davin.baragiotta: cd semainetech (16:42:17) davin.baragiotta: pour amorcer le suivi de ce répertoire (et de TOUT son contenu) par git : (16:42:26) davin.baragiotta: tapez la commande : git init (16:42:43) davin.baragiotta: giotta@machina:~/projets/ateliers/git$ mkdir semainetech giotta@machina:~/projets/ateliers/git$ cd semainetech giotta@machina:~/projets/ateliers/git/semainetech$ git init Initialized empty Git repository in /home/giotta/projets/ateliers/git/semainetech/.git/ (16:43:01) davin.baragiotta: si vous regardez vos fichiers cachés (16:43:10) davin.baragiotta: vous allez voir un répertoire ".git" (16:43:20) davin.baragiotta: TOUT le suivi est là (16:43:38) davin.baragiotta: vous supprimez ce fichier? vous venez de supprimer TOUT le suivi Git.... !!! (16:43:45) davin.baragiotta: *ce répertoire, dis-je (16:44:08) davin.baragiotta: (contrairement à SVN qui crée des répertoire .SVN partout) (16:44:18) davin.baragiotta: ok donc on vit d'amorcer le suivi de Git (16:44:33) davin.baragiotta: on va maintenant se créer un nouveau fichier dans le répertoire semainetech (16:44:37) davin.baragiotta: et un nouveau répertoire (16:44:52) davin.baragiotta: je crée fichier "davin.txt" et répertoire "test" (16:45:31) davin.baragiotta: maintenant, une nouvelle commande... presque la plus importante : git status (16:45:47) davin.baragiotta: status vous permet de voir à tout instant "où vous en êtes" (16:46:02) davin.baragiotta: giotta@machina:~/projets/ateliers/git/semainetech$ git status # On branch master # # Initial commit # # Untracked files: # (use "git add ..." to include in what will be committed) # # davin.txt nothing added to commit but untracked files present (use "git add" to track) (16:46:11) davin.baragiotta: on remarque 2 choses (16:46:19) davin.baragiotta: en fait 3 ;) (16:46:28) davin.baragiotta: 1. git est explicite : lisez ce qu'il vous dit (16:46:51) davin.baragiotta: 2. en lisant, on lit que le fichiier "davin.txt" n'est pas suivi (untracked) (16:47:22) davin.baragiotta: 3. on se rend compte qu'il ne parle pas de mon répertoire encore... c'est qu'il n'a rien dedans.... ajoutez un fichier dans le répertoire aussi (16:48:07) davin.baragiotta: giotta@machina:~/projets/ateliers/git/semainetech$ git status # On branch master # # Initial commit # # Untracked files: # (use "git add ..." to include in what will be committed) # # davin.txt # test/ nothing added to commit but untracked files present (use "git add" to track) (16:48:23) davin.baragiotta: voilà, maintenant on voit que test/ n'est pas suivi aussi (16:48:27) davin.baragiotta: git est poli (16:48:40) davin.baragiotta: il ne suit QUE ce que vous voulez qu'il suive... (16:49:17) davin.baragiotta: actuellement, vu qu'il ne "suit pas" nos fichiers ajoutés : on peut les modifier tant qu'on veut... Git ne fera rien de particulier (16:49:31) davin.baragiotta: donc on va mainteant dire à Git de suivre ces fichiers... (16:49:54) davin.baragiotta: plus simplement, on va dire "suit TOUS les fichiers/répertoires dans semainetech" (16:50:00) davin.baragiotta: commande : git add . (16:50:22) davin.baragiotta: giotta@machina:~/projets/ateliers/git/semainetech$ git add . giotta@machina:~/projets/ateliers/git/semainetech$ git status # On branch master # # Initial commit # # Changes to be committed: # (use "git rm --cached ..." to unstage) # # new file: davin.txt # new file: test/conf.py # new file: test/script.py # (16:50:45) davin.baragiotta: Aaaah! git status nous dit maintenant autre chose : (16:50:58) davin.baragiotta: il y a 3 changements "à commiter" (16:51:50) davin.baragiotta: c'est à dire que Git sait qu'on a ajouté 3 fichiers (16:51:55) davin.baragiotta: mais (16:52:18) davin.baragiotta: c'est à NOUS de dire à Git qu'on "commit" ces changements (16:52:33) davin.baragiotta: commit en anglais veut dire "engager" en français (16:53:37) davin.baragiotta: donc on peut modifier tout ce qu'on veut, tant qu'on veut... Git nous rappelle les changements : mais on doit lui dire un moment donné "c'est changements sont bons... je les ai faits consciemment, et je les veux" (16:54:03) davin.baragiotta: les époux s'engagent entre eux en disant "oui je le veux".... ben on fait un peut pareil avec nos changements dans nos fichiers ;) (16:54:06) davin.baragiotta: "je le veux" (16:54:20) davin.baragiotta: alors, quelle est la commande pour "commiter" nos changements? (16:54:37) davin.baragiotta: git commit -a -m "Mon premier commit" (16:55:07) davin.baragiotta: giotta@machina:~/projets/ateliers/git/semainetech$ git commit -a -m "Mon premier commit" [master (root-commit) 078d16b] Mon premier commit 0 files changed create mode 100644 davin.txt create mode 100644 test/conf.py create mode 100644 test/script.py (16:55:33) davin.baragiotta: Alors lisons un peu ce que Git nous dit après avoir fait notre commit (16:55:43) davin.baragiotta: [master (root-commit) 078d16b] Mon premier commit (16:55:52) davin.baragiotta: entre crochets [] : master (16:56:16) davin.baragiotta: ça c'est la branche sur laquelle on est... on va y revenir plus tard aux "branches" (on sinon dans le labo-git) (16:56:32) davin.baragiotta: mais quand on fait status, git nous dit sur quelle branche on est (16:56:42) davin.baragiotta: (on était sur master : tout va bien) (16:57:24) davin.baragiotta: (root-commit) : en fait, l'ensemble de nos commits... faut les voir comme des petits billes qui vont former un arbre (16:57:41) davin.baragiotta: en fait, ce sera un Graphe acyclique... mais je ne veut pas dire de gros mots ;) (16:57:46) davin.baragiotta: donc (16:57:56) davin.baragiotta: c'est la racine de l'arbre de tous nos commits (16:57:59) davin.baragiotta: racine = root (16:58:12) davin.baragiotta: cet arbre aura aussi des branches... la métaphore se tient (16:58:35) davin.baragiotta: root-commit = le premier de tous, la racine... avant c'est le néant.... là on vient de créer le Big Bang ;) (16:58:46) davin.baragiotta: ok, ensuite... on a un morceau de hash (16:58:55) davin.baragiotta: 078d16b (16:59:26) davin.baragiotta: en interne, pour opérer sa "magie"... git hash tout (le contenu des fichiers) pour pouvoir savoir ce qui change ou pas (16:59:47) davin.baragiotta: et finalement, le commit même a un hash... voyons le comme un identifiant unique (17:00:29) davin.baragiotta: le hash est plus long que ça... mais utiliser les 6-8 premiers caractères du hash est sûr (git vous dira de toute façons si vous êtes ambigus et vous demander un identifiant plus long) (17:00:44) davin.baragiotta: [master (root-commit) 078d16b] Mon premier commit (17:01:03) davin.baragiotta: finalement... le "Mon premier commit" est le message que j'ai passé en paramètre (17:01:28) davin.baragiotta: c'est très important d'avoir des noms de commits pertinents (17:01:37) davin.baragiotta: le but est de pouvoir suivre l'historique des modifications (17:01:52) davin.baragiotta: si vous écrivez toujours "changement", "modif", "correctifs"... euh (17:02:04) davin.baragiotta: ben faut aller voir concrètement le travail qui a été fait (17:02:08) davin.baragiotta: exemple : (17:02:24) davin.baragiotta: vous modifier la config d'Apache et votre serveur est suivi par Git? (17:02:33) davin.baragiotta: "Ajout du site cartographie" (17:03:04) davin.baragiotta: là c'est clair que toutes les modifications faites dans ce commit concerne l,ajout du site cartographie sur le serveur (17:03:07) davin.baragiotta: ok on continue (17:03:21) davin.baragiotta: on était là : (17:03:22) davin.baragiotta: giotta@machina:~/projets/ateliers/git/semainetech$ git commit -a -m "Mon premier commit" [master (root-commit) 078d16b] Mon premier commit 0 files changed create mode 100644 davin.txt create mode 100644 test/conf.py create mode 100644 test/script.py (17:03:37) davin.baragiotta: le reste, c'est le détail des opérations sur les fichiers (17:03:52) davin.baragiotta: (pas de changé, car on a juste ajouté)... 3 fichiers créés (17:04:04) davin.baragiotta: reafites maintenant git status pour voir où vous en êtes (17:04:17) davin.baragiotta: giotta@machina:~/projets/ateliers/git/semainetech$ git status # On branch master nothing to commit (working directory clean) (17:04:24) davin.baragiotta: voilà, Git est explicite : (17:04:51) davin.baragiotta: vous êtes sur la branche master (celle par défaut... disons, le tronc de l'arbre des modifications) (17:05:22) davin.baragiotta: rien à engager comme modifications car l'arborescence du répertoire "semainetech" que Git suit est "propre" (17:05:38) davin.baragiotta: c'est à dire : on n'a fait aucune modification depuiss notre dernier commit (17:05:48) davin.baragiotta: on récapitule les commandes vues : (17:05:59) davin.baragiotta: git init, git status, git add, git commit (17:06:01) davin.baragiotta: simple (17:06:04) davin.baragiotta: des questions? (17:07:14) davin.baragiotta: bon alors on continue... le modérateur me fera signe pour des questions tardive (17:07:24) davin.baragiotta: on en est où dans le programme? (17:07:33) davin.baragiotta: https://wiki.auf.org/wikiteki/Projet/SemaineTech/2013/Ateliers/Git/Support (17:07:42) davin.baragiotta: on est sous VERSIONNER EN LOCAL (17:08:07) davin.baragiotta: nous reste à voir la liste visuellement la liste de nos commits... (17:08:24) davin.baragiotta: pour ce faire on va créer un ou 2 commits... (17:08:29) davin.baragiotta: de plus (17:08:47) davin.baragiotta: modifiez vos fichiers actuels (ou ajoutez-en) (17:09:13) davin.baragiotta: assurez d,avoir "commité" vos changements... engagez-les car vous voulez ces changements (17:10:39) davin.baragiotta: giotta@machina:~/projets/ateliers/git/semainetech$ git status # On branch master nothing to commit (working directory clean) giotta@machina:~/projets/ateliers/git/semainetech$ git status # On branch master # Changes not staged for commit: # (use "git add ..." to update what will be committed) # (use "git checkout -- ..." to discard changes in working directory) # # modified: test/script.py # no changes added to commit (use "git add" and/or "git commit -a") giotta@machina:~/projets/ateliers/git/semainetech$ git commit -a -m "Amorce du code de ce fameux script : il print un truc" [master e01b295] Amorce du code de ce fameux script : il print un truc 1 file changed, 1 insertion(+) giotta@machina:~/projets/ateliers/git/semainetech$ git status # On branch master nothing to commit (working directory clean) (17:11:04) davin.baragiotta: j'ai ajouté une ligne dans mon fichier script.py, et j'ai commité mon changement en donnant un message explicite à mon commit (17:11:21) davin.baragiotta: excellent, j'ai maintenant 2 commits dans mon historique... (17:11:26) davin.baragiotta: mais prouvons-le! (17:11:32) davin.baragiotta: nouvelle commande : git log (17:11:47) davin.baragiotta: giotta@machina:~/projets/ateliers/git/semainetech$ git log commit e01b2957231d8750bd1a5cea000f0963ad1b6860 Author: Davin Baragiotta Date: Mon Sep 2 10:09:55 2013 -0400 Amorce du code de ce fameux script : il print un truc commit 078d16b50983723a2dc9e2620c4fde5fe22ff7d3 Author: Davin Baragiotta Date: Mon Sep 2 09:54:57 2013 -0400 Mon premier commit (17:12:01) davin.baragiotta: a-ha! (17:12:11) davin.baragiotta: on voit une liste de commits, avec leur hash complet (17:12:32) davin.baragiotta: l'auteur... (modifier votre .gitconfig dans votre home si votre nom n'apparait pas correctement) (17:12:53) davin.baragiotta: la date : wouhou! c'est mon anniversaire! (c'est vrai mais pas pertinent) (17:13:00) davin.baragiotta: et dessous : les messages de commit (17:13:18) davin.baragiotta: on voit que le tronc (master) pousse en ajoutant des commits (17:13:27) davin.baragiotta: mais pour le voir plus clairement, on a installé gitk (17:13:39) davin.baragiotta: lancez gitk en ligne de commande : gitk (17:14:08) davin.baragiotta: c'est la même information mais présentée graphiquement (17:14:26) davin.baragiotta: on voit les petits ronds : ce sont les commits (17:14:32) davin.baragiotta: ils s'empilent (17:14:52) davin.baragiotta: on vient de voir toutes les commandes sous VERSIONNER EN LOCAL (17:15:11) davin.baragiotta: on va sauter les parties collaboratives (17:15:21) davin.baragiotta: mais je veux vous mentionner que tous nos projets, à l'AUF (17:15:33) davin.baragiotta: se trouvent sur http://git.auf.org (17:16:13) davin.baragiotta: ce dépôt est central parce qu'on le veut (qui n'impose pas de dépôt central) : les développeurs y "poussent" leur contributions (17:16:32) davin.baragiotta: pour expérimenter ce travail collaboratif, on peut essayer en fin d'atelier ou sinon ce sera dans le labo-git (17:17:08) davin.baragiotta: en fait, y,a seulement 2 choses à savoir de plus pour le travail collaboratif : push, pull (17:17:30) davin.baragiotta: soit "pousser ces modifications" sur le dépôt central (17:17:31) davin.baragiotta: ou (17:17:55) davin.baragiotta: "tirer (pull) les modifications récentes provenant du dépôt central" (17:17:58) davin.baragiotta: git push (17:18:00) davin.baragiotta: git pull (17:18:26) davin.baragiotta: autre commande à savoir, pas si vous ne la retenez pas, git vous la signale dansle contexte : git rm (17:18:31) davin.baragiotta: oui rm = remove (17:18:33) davin.baragiotta: donc (17:18:50) davin.baragiotta: si vous supprimez un fichier dans l'arborescence (17:19:07) davin.baragiotta: git status va vous le dire... on le fait tiens (17:19:12) davin.baragiotta: supprimez un de vos fichier (17:19:20) davin.baragiotta: (je supprime davin.txt) (17:20:06) davin.baragiotta: (fermez la fenêtre de gitk au besoin) (17:20:26) davin.baragiotta: j'ai supprimé mon fichier et git status me dit : giotta@machina:~/projets/ateliers/git/semainetech$ git status # On branch master # Changes not staged for commit: # (use "git add/rm ..." to update what will be committed) # (use "git checkout -- ..." to discard changes in working directory) # # deleted: davin.txt # no changes added to commit (use "git add" and/or "git commit -a") (17:21:07) davin.baragiotta: le fichier davin.txt a été supprimé de l'arborescence (17:21:55) davin.baragiotta: on va confirmer à git, qu'on ne veut bien supprimer ce fichier (17:21:56) davin.baragiotta: # (use "git add/rm ..." to update what will be committed) (17:22:09) davin.baragiotta: donc on fait : git rm davin.txt (17:22:30) davin.baragiotta: giotta@machina:~/projets/ateliers/git/semainetech$ git rm davin.txt rm 'davin.txt' giotta@machina:~/projets/ateliers/git/semainetech$ git status # On branch master # Changes to be committed: # (use "git reset HEAD ..." to unstage) # # deleted: davin.txt # (17:22:46) davin.baragiotta: git comprend maintenant qu'on est prêt à commiter ce changement (ici, une suppression) (17:22:54) davin.baragiotta: donc on commit.. comme d'habitude (17:23:28) davin.baragiotta: giotta@machina:~/projets/ateliers/git/semainetech$ git commit -a -m "Suppression de fichier davin" [master f21ded1] Suppression de fichier davin 0 files changed delete mode 100644 davin.txt (17:23:56) davin.baragiotta: voilà, mon commit f21ded1 est la version de mon arborescence de semainetech... sans le fichier davin.txt (17:24:04) davin.baragiotta: plutôt simple au final! (17:24:14) davin.baragiotta: on regarde le programme (17:24:22) davin.baragiotta: https://wiki.auf.org/wikiteki/Projet/SemaineTech/2013/Ateliers/Git/Support (17:25:06) davin.baragiotta: le PROCESSUS DE VERSIONNAGE est donc les commandes de base à savoir... incluant celles de push et pull pour travail collaboratif (17:25:32) davin.baragiotta: pour ce qui est des branches et du travail collaboratif : plsu tard dans cet atelier ou labo-git (17:26:01) davin.baragiotta: finalement, le WORKFLOW DE DÉVELOPPEMENT concerne plus ceux qui sont appelés à contribuer aux projets SI (17:26:03) davin.baragiotta: mais (17:26:21) davin.baragiotta: notre approche a un peu changer par rapport à ce qui est sur cette page... (17:26:26) davin.baragiotta: on s'en parle au besoin ;) (17:26:37) davin.baragiotta: CONCLUSION (partie Davin... celle de JC suit) (17:26:48) davin.baragiotta: on n'a pas de raison de se passer de Git (17:26:51) davin.baragiotta: c'est simple (17:26:56) davin.baragiotta: quelques commandes suffisent (17:27:06) davin.baragiotta: pour vous donner la toute puissance sur les modifications que vous faites (17:27:15) davin.baragiotta: sur une arboresence de fichier (17:27:23) davin.baragiotta: quoi, vous ne me croyez pas? (17:27:24) davin.baragiotta: ok (17:27:40) davin.baragiotta: supposons que supprimer votre fichier était une grosse bourde (17:27:44) davin.baragiotta: et que vous en parlez avec JC (17:28:07) davin.baragiotta: puis il vous dit : remet toute l'arborescence comme elle était AVANT que tu supprimes ton fichier (17:28:15) davin.baragiotta: git log ou gitk (17:28:32) davin.baragiotta: giotta@machina:~/projets/ateliers/git/semainetech$ git log commit f21ded178c5d7ca21100d682c4a18fb9e993b621 Author: Davin Baragiotta Date: Mon Sep 2 10:23:19 2013 -0400 Suppression de fichier davin commit e01b2957231d8750bd1a5cea000f0963ad1b6860 Author: Davin Baragiotta Date: Mon Sep 2 10:09:55 2013 -0400 Amorce du code de ce fameux script : il print un truc commit 078d16b50983723a2dc9e2620c4fde5fe22ff7d3 Author: Davin Baragiotta Date: Mon Sep 2 09:54:57 2013 -0400 Mon premier commit (17:29:25) davin.baragiotta: On voit ici que j'ai supprimé mon fichier dans le commit "f21ded1".... (ne pas juste se fichier au nom de commit, vous pouvez regarder le détail des changements via gitk et git diff, notamment) (17:29:30) davin.baragiotta: donc on veut le commit avant (17:29:45) davin.baragiotta: le commit avant est : e01b29 (17:30:04) davin.baragiotta: on va donc "se déplacer dans l'historique" (17:30:14) davin.baragiotta: pour revenir à une version antérieure!!! (17:30:27) davin.baragiotta: commande : git checkout e01b29 (17:31:03) davin.baragiotta: giotta@machina:~/projets/ateliers/git/semainetech$ git checkout e01b29 Note: checking out 'e01b29'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout. If you want to create a new branch to retain commits you create, you may do so (now or later) by using -b with the checkout command again. Example: git checkout -b new_branch_name HEAD is now at e01b295... Amorce du code de ce fameux script : il print un truc (17:31:13) davin.baragiotta: git status (17:31:35) davin.baragiotta: giotta@machina:~/projets/ateliers/git/semainetech$ git status # Not currently on any branch. nothing to commit (working directory clean) giotta@machina:~/projets/ateliers/git/semainetech$ git log commit e01b2957231d8750bd1a5cea000f0963ad1b6860 Author: Davin Baragiotta Date: Mon Sep 2 10:09:55 2013 -0400 Amorce du code de ce fameux script : il print un truc commit 078d16b50983723a2dc9e2620c4fde5fe22ff7d3 Author: Davin Baragiotta Date: Mon Sep 2 09:54:57 2013 -0400 Mon premier commit (17:32:13) davin.baragiotta: ok, donc j'ai atteint mon objectif... mais c'est pas la meilleure façon de faire : je ne suis plus sur aucune branche (17:32:39) davin.baragiotta: (ok je ne fais pas ça tous les jours... mais on prendre les questions et nos champions git vont nous dire LA façon de faire pour revenir en arrière) (17:33:08) davin.baragiotta: toujours est-il que sans Git... l'idée de revenir dans un "état" antérieur est tout simplement pas possible (17:33:15) davin.baragiotta: questions? (17:34:46) yemen.sayour: jusqu'à maintenant non :) (17:36:13) davin.baragiotta: ok, alors au final... regardez la doc de git... regardez les projets de l'AUF sur http://git.auf.org (17:36:35) davin.baragiotta: et aussi, si vous aimez l'Open Source... énormement de choses se passe sur Git Hub (17:36:45) davin.baragiotta: http://github.com (17:37:05) davin.baragiotta: créez-vous un utilisateur et codez, participez! :) (17:37:30) davin.baragiotta: voilà, je laisse la parole à progfou et on se revoit en fin d,atelier ou sur labo-git si on n'a pas le temps (17:37:39) davin.baragiotta: progfou: à toi (17:37:58) progfou: ok (17:38:02) progfou: donc (17:38:09) progfou: je vais maintenant vous parler d'un exemple concret d'utilisation de git (17:38:17) progfou: mais pour autre chose que du développement logiciel ! :-) (17:38:42) progfou: ce dont je vais vous parler est du suivi de configuration de serveur via git (17:38:52) progfou: selon la méthode documentée sur https://wiki.auf.org/wikiteki/Git/SuiviDeConfiguration (17:39:22) progfou: je ne vais pas vous refaire un laïus sur les commandes, vous venez de les voir (17:39:39) progfou: je vais plutôt vous parler de l'intérêt de cette technique et de comment l'utiliser à l'AUF (17:39:56) progfou: il s'agit ici de disposer d'une historique des modifications qui précise ce qui a été modifié, quand et pourquoi (17:40:16) progfou: attention : ne pas confondre avec un IDS (système de détection d'intrusion) (17:40:37) progfou: ici je parle d'un suivi volontaire et éventuellement collaboratif, je ne parle pas de sécurité (17:40:59) progfou: pour ce faire, on utilise git, qu'on installe au niveau de la racine du serveur (17:41:24) progfou: c'est à dit qu'on aura un dossier « caché » /.git contenant notre historique (17:41:32) progfou: le fait de l'installer à la racine permet de suivre potentiellement la totalité des fichiers du serveurs ! (17:41:50) progfou: mais ce n'est évidement pas ce qu'on veut (17:42:03) progfou: donc, ensuite, on utilise un fichier d'exclusions (/etc/auf-git-etc/info/exclude) pour préciser ce qui nous intéresse effectivement : en particulier /etc et /usr/local (17:42:24) progfou: on y ajoute aussi quelques dossiers spécifiques, comme le /boot pour la configuration de grub (17:42:36) progfou: ou encore le /var/chroot/bind pour les fichiers de bind9 en mode chroot (17:42:46) progfou: et d'autres encore (17:43:07) progfou: pour faciliter cette mise en place du suivi de configuration des serveurs à l'AUF, nous avons mis au point un paquet Debian : auf-git-etc (17:43:25) progfou: (pour les curieux, les sources se trouvent sur http://git.auf.org/?p=auf-git-etc.git;a=tree et le paquet est disponible via notre dépôt apt.auf.org) (17:43:51) progfou: ce paquet s'occupe de tout ce qu'il faut pour être immédiatement utilisable, ou presque… (17:44:10) progfou: il requiert tout de même au préalable qu'un service minimal d'envoi de courriels soit disponible en local sur le serveur (17:44:34) progfou: typiquement dans nos serveurs virtuels, un exim4 de base configuré pour envoyer vers un smarthost (17:45:03) progfou: ce service d'envoi de courriels est aussi nécessaire pour une bonne gestion du serveur de toutes façons (17:45:15) progfou: ne serait-ce que pour recevoir les résultat des tâches planifiées en cron ! (17:45:43) progfou: dès l'installation du paquet, un premier commit est automatiquement fait avec la configuration actuelle du serveur (17:46:04) progfou: et à chaque commit, y compris ce commit initial, un courriel est envoyé pour informer des changements enregistrés (17:46:36) progfou: le courriel est envoyé à root+git par défaut, ça se change dans /etc/auf-git-etc/hooks/post-commit (17:47:16) progfou: (et bientôt dans /etc/auf-git-etc/config ;-) ) (17:47:38) progfou: par ailleurs, si des modifications sont faites et ne sont pas enregistrées dans git (17:47:51) progfou: un cron s'exécutant à 10h et 16h va vous envoyer un courriel avec la liste des changements restant à valider (17:48:45) progfou: la aussi le courriel est envoyé à root+git par défaut, ce sera aussi configurable via /etc/auf-git-etc/config dans la version à venir (17:49:07) progfou: (en attendant vous pouvez aussi faire un alias de root+git vers votre adél dans /etc/aliases) (17:49:53) progfou: un autre avantage d'avoir un suivi des modifications est qu'il permet aussi, accessoirement, comme en développement logiciel, de revenir en arrière sur une modification que l'on souhaiterait annuler (17:50:23) progfou: ce qui se ferait soit avec un git checkout, en précisant éventuellement le ou les fichiers à reprendre, soit avec un git reset pour un retour en arrière général/massif (17:51:29) progfou: pour finir, l'installation de auf-git-etc est obligatoire sur tous les serveurs AUF, donc planifiez votre déploiement ! <= ça c'est pour déclencher les questions ! :-D (17:51:38) progfou: ça ira vite : pour chaque serveur, vérifier que l'envoi de courriel marche, puis installer le paquet auf-git-etc (en ajoutant la source APT AUF le cas échéant) et c'est fini ! (17:51:46) progfou: des questions ? ;-) (17:52:51) ongolaBoy: QUESTION : différence entre git reset et git revert ? (17:53:28) progfou: davin.baragiotta, c'est plus sur le plan des commandes, tu veux la prendre ? (17:53:38) davin.baragiotta: oui (17:53:59) davin.baragiotta: je les connais pas toutes, mais on utilise reset (17:54:25) davin.baragiotta: en fait, faudrait lire la doc, en toute honnêteté... (17:55:01) davin.baragiotta: ok je crois que progfou sait : go! ;) (17:55:01) progfou: en fait, oui, c'est expliqué dans le man git-revert : (17:55:12) progfou: un git reset est un peu violent (17:55:23) progfou: on retourne en arrière, en perdant l'information de notre avancée précédente (17:55:56) progfou: tandis que le git revert, lui, va conserver l'historique passée, et faire le retour en arrière et l'ajouter aux commits (17:56:12) progfou: donc avec git-revert on garde toute l'historique, y compris celle du retour en arrière (17:56:21) davin.baragiotta: y'a aussi rebase ;) (17:56:25) progfou: tandis qu'avec git reset on perd l'info du retour en arrière (17:56:48) progfou: oui, rebase est encore plus bas niveau (= à éviter, c'est pour les bidouille sur la façon dont le dépôt gère ses petits) (17:57:26) progfou: c'est vrai qu'avec notre suivi des serveurs on pourrait faire un revert (17:57:47) progfou: on garderait ainsi la trace de la tentative de config et du retour en arrière (17:58:01) progfou: en fait, moi-même, j'utilise rarement git reset (17:58:14) progfou: mais il est aussi rare que je retourne en arrière ;) (17:58:54) progfou: ou bien si je le fais c'est assez rapidement => ça touche généralement juste 1 ou 2 fichiers => je me contente d'un git checkout pour récupérer juste ceux-là (17:59:15) progfou: autres questions ? pour Davin ou moi (18:00:10) progfou: je rends la main à Davin (18:00:25) davin.baragiotta: bon alors, pour tous les champions dans cette salle qui suivent vraiment, on va s'amuser à collaborer! (18:00:53) davin.baragiotta: svp, dans le salon tech, tapez "." pour montrer que vous n'êtes pas encore en pause café ;) (18:01:04) davin.baragiotta: (surtout pour savoir avec qui je vais collaborer) (18:01:30) claudine.mosozi: . (18:02:15) davin.baragiotta: ok, pendant que les points s'ajoutent dans le salon tech... on va commencer tout de suite à collaborer (18:02:42) davin.baragiotta: (je suppose que vous avez votre clé publique SSH sur le dépôt git.auf.org... mais on verra vite si vous ne l,avez pas) (18:03:32) davin.baragiotta: dans un répertoire de test... disons un cran plus haut que votre répertoire semainetech... on va se positionner pour cloner le bacasable Git de l'AUF (18:03:34) davin.baragiotta: cd .. (18:03:54) davin.baragiotta: la commande pour cloner est dans notre doc AUF (18:04:10) davin.baragiotta: dépendamment si on est dans ou hors RPV, on tape pas la même chose (18:04:21) davin.baragiotta: http://wiki.auf.org/wikiteki/Git/D%C3%A9veloppeur (18:04:35) davin.baragiotta: sous "Participer à un projet" (18:04:49) davin.baragiotta: alors, je suppose que vous êtes dans RPV : (18:05:00) davin.baragiotta: $ git clone ssh://gitosis@git.auf/bacasable (18:05:12) davin.baragiotta: bacasable = nom du dépôt git qu'on veut cloner (18:05:37) davin.baragiotta: si on va sur http://git.auf.org (18:05:47) davin.baragiotta: et qu'on clique sur le projet bacasable (18:05:51) davin.baragiotta: http://git.auf.org/?p=bacasable.git;a=summary (18:06:19) davin.baragiotta: on voit que ce pauvre dépôt (18:06:43) davin.baragiotta: n'a eu qu'un seul commit depuis le commit initial (root-commit) le 2011-08-31 ;) (18:07:07) davin.baragiotta: tout le monde a cloné? alors on se déplace dans le répertoire bacasable (18:07:27) davin.baragiotta: premier réflexe? git status (18:07:35) davin.baragiotta: (on vient de cloner, tout devrait être beau) (18:07:49) davin.baragiotta: giotta@machina:~/projets/ateliers/git/bacasable$ git status # On branch master nothing to commit (working directory clean) (18:07:59) davin.baragiotta: on est sûr master... l'arbo est propre (18:08:30) davin.baragiotta: ok, svp : ajoutez un fichier nommé avec votre nom, ex.: "davin" pour moi, "claudine", etc. (18:09:03) davin.baragiotta: ensuite? git status! (18:09:26) davin.baragiotta: si vous venez d'ajouter un fichier, comme demandé... git va vous dire qu'il n'est pas suivi (untracked) (18:09:59) davin.baragiotta: ajoutez-le au suivi avec "git agg nom-de-fichier" ou "git add ." (pour ajouter toutes les nouveautés) (18:10:31) davin.baragiotta: donc * git status * éditer * git add . * git commit -a -m "Commit de untel" (18:10:40) davin.baragiotta: finalement, commit ce changement (18:11:46) davin.baragiotta: attention, si vous venez de modifier des fichiers en dehors de bacasable (comme je viens de le faire, j'étais encore dans semaintech) (18:11:55) davin.baragiotta: le git de bacasable ne voit rien... évidemment (18:12:09) davin.baragiotta: vous avez commité (18:12:19) davin.baragiotta: vous êtes prêt à partager vos modifs (18:12:25) davin.baragiotta: git push (18:13:31) davin.baragiotta: moi quand j'ai fait git push (18:13:33) davin.baragiotta: j'ai eu : (18:13:34) davin.baragiotta: giotta@machina:~/projets/ateliers/git/bacasable$ git push To gitosis@git.auf.org:bacasable.git ! [rejected] master -> master (non-fast-forward) error: failed to push some refs to 'gitosis@git.auf.org:bacasable.git' To prevent you from losing history, non-fast-forward updates were rejected Merge the remote changes (e.g. 'git pull') before pushing again. See the 'Note about fast-forwards' section of 'git push --help' for details. (18:13:37) davin.baragiotta: :) (18:14:03) davin.baragiotta: ça veut dire en français "hey, tu veux ajouter un commit au dépôt... mais ta version locale n'est pas à jour" (18:14:19) davin.baragiotta: sékou et willy m'ont pris de vitesse! ;) (18:14:26) davin.baragiotta: http://git.auf.org/?p=bacasable.git;a=summary (18:14:29) davin.baragiotta: pareil pour vous? (18:14:33) davin.baragiotta: la solution : git pull (18:14:44) davin.baragiotta: pour récupérer la version la plus récente du serveur (18:15:08) davin.baragiotta: automatiquement : git va merger (fusionner) votre version avec la dernière version du serveur (18:15:49) davin.baragiotta: voilà, j'ai pu collaborer : http://git.auf.org/?p=bacasable.git;a=summary (18:15:55) davin.baragiotta: mon commit = Davin collabore (18:16:27) davin.baragiotta: j'attends patrick, hassane, yemen, claudine et tout ceux qui ont dit qui suivait dans salon tech : (18:16:33) davin.baragiotta: git pull... (18:16:35) davin.baragiotta: git push (18:17:16) davin.baragiotta: ok, on commence à manquer de temps (18:17:25) davin.baragiotta: pour conclure cette mini-collaboration (18:17:36) davin.baragiotta: (où chacun a ajouté un fichier) (18:17:52) davin.baragiotta: regardez le commit final... celui en haut de la pile... en haut du tronc master (18:17:59) davin.baragiotta: http://git.auf.org/?p=bacasable.git;a=summary (18:18:14) davin.baragiotta: cliquez sur tree pour voir l'arborescence de fichier (18:18:24) davin.baragiotta: http://git.auf.org/?p=bacasable.git;a=tree;h=7bb0d38a9741d09f2e66ca73790573d186aa3ec0;hb=7bb0d38a9741d09f2e66ca73790573d186aa3ec0 (18:18:39) davin.baragiotta: on voit que co-existent les fichiers de davin, sekou et willy (18:19:04) davin.baragiotta: voilà... ça c'est la partie simple, car on "ne se marchait pas sur les pieds" : on était chacun dans notre fichier (18:19:12) davin.baragiotta: mais on peut travailler sur le même fichier (18:19:24) davin.baragiotta: git va faire un merge automatique (fusion).... (18:19:28) davin.baragiotta: .... si il le peut. (18:19:44) davin.baragiotta: Sinon : ce sera un conflit qu'il faudra régler manuellement (18:19:59) davin.baragiotta: i.e : choisir le BON contenu entre les 2 contenus proposés (18:20:26) davin.baragiotta: finalement, resterait à voir les branches pour vraiment voir toute la puissance de git (18:20:32) davin.baragiotta: vous voulez jouez? (18:20:47) davin.baragiotta: rendez-vous dans le salon "labo-git"... c'est branché! (18:20:50) davin.baragiotta: ;) (18:21:06) davin.baragiotta: ====================== FIN atelier git ========================= }}}