= Lundi 27 août 2012 ; atelier "git", archive de la conversation = {{{#!highlight irc (11:10:17) davin.baragiotta: -------------------- DEBUT Atelier Git --------------- (11:10:24) davin.baragiotta: bonjour à tous ou rebonjour (11:10:35) francis.ngatsi: Bonjour (11:10:38) davin.baragiotta: l'atelier sur git se passe ici (11:10:46) davin.baragiotta: les questions et commentaires dans le tech svp (11:10:59) davin.baragiotta: eric.mcsween sera le modérateur (11:11:30) davin.baragiotta: rappel : cet atelier sera repris mercredi à 02h00 GMT (11:11:39) davin.baragiotta: http://wiki.auf.org/wikiteki/Projet/SemaineTech/2012 (11:11:47) davin.baragiotta: http://wiki.auf.org/wikiteki/Projet/SemaineTech/2012/Ateliers/Git (11:12:07) davin.baragiotta: cet atelier nécessitait 3 pré-requis (11:12:17) davin.baragiotta: 2 installations et fournir votre clés SSH publique (11:12:39) davin.baragiotta: je suppose que c,est fait (11:12:44) chanesakhone.chitsaya a quitté le salon (11:13:00) davin.baragiotta: je vérifie avec adminstrateurs de git.auf.org (11:13:09) shafeek.sumser [shafeek.sumser@auf.org/Home] a rejoint le salon. (11:13:12) davin.baragiotta: si ils ont pu associer votre clé SSH (si elle n'y était pas) (11:13:24) davin.baragiotta: on peut commencer même si elle n'y est pas (11:13:40) davin.baragiotta: aussi : désolé de ce court retard de 13 minutes (11:14:47) chanesakhone.chitsaya [chanesakhone.chitsaya@auf.org/Home] a rejoint le salon. (11:14:53) davin.baragiotta: le contenu de l,atelier se trouve ici : (11:15:00) davin.baragiotta: http://wiki.auf.org/wikiteki/Ateliers/Git/Support (11:15:13) davin.baragiotta: vous devriez avoir 3 fenêtres ouvertes : (11:15:17) davin.baragiotta: 1. cette fenêtre (11:15:23) davin.baragiotta: 2. la page de l,atelier : http://wiki.auf.org/wikiteki/Ateliers/Git/Support (11:15:26) davin.baragiotta: 3. un terminal (11:15:31) davin.baragiotta: c'est parti (11:15:36) davin.baragiotta: INTRODUCTION (11:15:44) davin.baragiotta: Notre objectif dans cet atelier (11:15:57) davin.baragiotta: est de connaître les commandes de base de Git, pour un usage quotidien (11:16:13) davin.baragiotta: ça donne bien, il n'y en a pas beaucoup (11:16:16) davin.baragiotta: et elles sont simples (11:16:32) davin.baragiotta: On a un lien vers la documentation AUF, sur wikiteki : (11:16:37) davin.baragiotta: http://wiki.auf.org/wikiteki/Git/D%C3%A9veloppeur (11:16:45) fawaz.tairou a quitté le salon (11:16:57) davin.baragiotta: mais vous pouvez faire une recherche sur wikiteki, avec Git... il y a d'autres ressources que cette page (11:17:10) davin.baragiotta: cette doc = celle des commandes quotidiennes (11:17:19) davin.baragiotta: Pourquoi versionner? (11:17:38) davin.baragiotta: en fait, c'est souvent important de savoir quoi a été modifié.... (11:17:40) davin.baragiotta: par qui... (11:17:42) davin.baragiotta: quand... (11:17:58) davin.baragiotta: afin de pouvoir retracer l'historique des interventions dans une arborescence de fichier (11:18:14) davin.baragiotta: on ne parle pas seulement ici de code source de logiciel (11:18:31) davin.baragiotta: ... mais aussi de la configuration d'un serveur, pourquoi pas... (voir JC et RTR sur le sujet) (11:19:05) davin.baragiotta: aussi... on versionne car des fois, on veut expérimenter des changements sur des fichiers... mais on veut pouvoir revenir en arrière (11:19:13) davin.baragiotta: finalement (11:19:29) davin.baragiotta: on version aussi... quand on veut faire du travail collaboratif (11:19:29) chanesakhone.chitsaya a quitté le salon (11:19:57) davin.baragiotta: on ne veut pas se marcher sur les pieds (11:20:04) davin.baragiotta: on veut voir les contrib de chacun (11:20:09) davin.baragiotta: Pourquoi Git? (11:20:27) davin.baragiotta: Git est un logiciel de gestion de version de 3e génération (11:20:34) davin.baragiotta: CVS = 1ere génération (11:20:39) davin.baragiotta: SVN = 2e génération (11:20:51) davin.baragiotta: Git, Bazaar, Mercurial = 3e génération (11:21:04) davin.baragiotta: une des caractéristiques de ces 3e générations = (11:21:15) davin.baragiotta: gestion distribuée (11:21:30) davin.baragiotta: c'est-à-dire qu'il n'y a pas qu'un dépôt central (11:21:34) chanesakhone.chitsaya [chanesakhone.chitsaya@auf.org/Home] a rejoint le salon. (11:21:45) davin.baragiotta: à chaque fois qu'un dépôt est cloné (11:22:02) davin.baragiotta: l'ensemble du code est cloné... le dépôt se retrouve donc distribué (11:22:40) davin.baragiotta: ça nous permet notamment de pouvoir contribuer localement... hors-ligne... jusqu'à temps qu'on verse nos contrib dans le projet commun (qui lui est centralisé) (11:23:13) davin.baragiotta: mais commençons par le début... les premières commandes... en supposans un petit projet local qui ne concerne que vous (11:23:20) davin.baragiotta: VERSIONNER EN LOCAL (11:23:46) davin.baragiotta: créez vous un répertoire bidon, directement sur votre home (en fait... où vous voulez ;) ) (11:23:56) davin.baragiotta: par commodité, appelons-le "atelier" (11:24:22) davin.baragiotta: déplacez-vous dans ce répertoire (11:24:40) davin.baragiotta: la première commande : git init (11:24:50) davin.baragiotta: oui... ça initialise un dépôt git (11:25:12) davin.baragiotta: (dans le terminal... quand vous tapez git... le programme git-core est appelé) (11:25:26) davin.baragiotta: davin.baragiotta@u-db:~/atelier$ git init Initialized empty Git repository in /net/nfs-authnss.b.ca.auf/home/davin.baragiotta/atelier/.git/ (11:25:43) davin.baragiotta: Git est explicite dans ses messages (11:25:50) davin.baragiotta: presque pas besoin d,atelier ;) (11:26:02) davin.baragiotta: un dépôt Git a été initialisé dans.... (path) (11:26:17) davin.baragiotta: et on voit que dans notre répertoire, il y a un répertoire caché (11:26:20) davin.baragiotta: .git/ (11:26:23) davin.baragiotta: hmmmm.... (11:26:28) davin.baragiotta: ouvre-le pour le plaisir (11:26:49) davin.baragiotta: on y voit toute sorte de trucs... (11:26:54) davin.baragiotta: notamment un fichier config (11:26:58) davin.baragiotta: retenez une chose... (11:27:03) davin.baragiotta: ce répertoire : .git/ (11:27:11) davin.baragiotta: c'est TOUT votre dépôt (11:27:19) davin.baragiotta: le supprimer... c'est supprimer le suivi (11:27:40) davin.baragiotta: ce n'est pas comme avec SVN ou vous avez des répertoires .SVN partout (11:27:49) davin.baragiotta: là c'est tout propre : en un seul endroit (11:27:54) davin.baragiotta: des questions? (11:28:03) eric.mcsween: oui (11:28:08) eric.mcsween: frumence.boroto: QUESTION: peut être un peu prématuré ma question, mais je veux savoir si on doit travailler avec les droits d'administrateur ou non? (11:28:18) davin.baragiotta: non (11:28:44) davin.baragiotta: vous créer les dépo avec votre user (11:29:18) davin.baragiotta: je suis pas trop versé côté admin sys, le reste à voir avec JC et votre RTR... mais me semble que vous devez pas travailler en root (11:29:30) davin.baragiotta: et le sudo ici n'est pas nécessaire (11:29:50) davin.baragiotta: je continue (11:30:06) davin.baragiotta: on devrait tous avoir un dépôt git dans répertoire atelier (11:30:35) davin.baragiotta: toujours dans le répertoire atelier (11:30:44) davin.baragiotta: on va commencer à parler avec notre dépo local (11:30:52) davin.baragiotta: on va lui passer des commandes (11:30:57) davin.baragiotta: la commande magique à retenir : (11:31:00) davin.baragiotta: git status (11:31:11) davin.baragiotta: davin.baragiotta@u-db:~/atelier$ git status # On branch master # # Initial commit # nothing to commit (create/copy files and use "git add" to track) (11:31:13) davin.baragiotta: lisons (11:31:39) davin.baragiotta: on est sur la branche "master"... ah? (on y reviendra) (11:31:45) davin.baragiotta: Initial commit... (11:31:48) davin.baragiotta: commit... (11:31:59) davin.baragiotta: c'est la notion centrale d'un gestionnaire de version (11:32:08) davin.baragiotta: commit en anglais veut dire "engager" (11:32:23) niry.andriambelo a quitté le salon (11:32:31) davin.baragiotta: c'est des modifications qu'on s'engage à apporter aux fichiers (11:32:54) niry.andriambelo [niry.andriambelo@auf.org/AUF] a rejoint le salon. (11:33:06) davin.baragiotta: on s'engage : on dit "ça, je suis conscient d'avoir porté ces modifs... et je les veux" (11:33:18) davin.baragiotta: fianlement, dernière ligne du message : (11:33:48) davin.baragiotta: rien à commiter (à engager)... créer des fichiers (ou répertoires) et utilisez la commande git add pour les suivre (11:33:54) davin.baragiotta: c'est ce qu'on va faire ;) (11:34:08) davin.baragiotta: créez un fichier et un répertoire (11:34:12) davin.baragiotta: n'importe quoi (11:35:03) davin.baragiotta: n'hésitez pas à abuser de git status (11:35:10) davin.baragiotta: après création du contenu : (11:35:24) davin.baragiotta: davin.baragiotta@u-db:~/atelier$ git status # On branch master # # Initial commit # # Untracked files: # (use "git add ..." to include in what will be committed) # # conf.py # lib/ nothing added to commit but untracked files present (use "git add" to track) (11:35:26) davin.baragiotta: ah! (11:35:28) davin.baragiotta: du nouveau (11:35:30) davin.baragiotta: lisons (11:35:41) davin.baragiotta: toujours branche master, toujours premier commit... ok (11:35:50) davin.baragiotta: ah des fichiers non suivis... (11:36:01) davin.baragiotta: conf.py et répertoire lib/ (11:36:07) davin.baragiotta: (c'est ce que j'ai créé) (11:36:19) davin.baragiotta: il nous redit d'utiliser git add (11:36:23) davin.baragiotta: alors, allons-y (11:36:26) davin.baragiotta: git add . (11:36:30) davin.baragiotta: (avec un point) (11:36:38) chanesakhone.chitsaya a quitté le salon (11:36:45) davin.baragiotta: je passe rien dans terminal... (11:36:48) davin.baragiotta: étrange? (11:36:52) davin.baragiotta: voyons voir git status (11:37:03) davin.baragiotta: davin.baragiotta@u-db:~/atelier$ git add . davin.baragiotta@u-db:~/atelier$ git status # On branch master # # Initial commit # # Changes to be committed: # (use "git rm --cached ..." to unstage) # # new file: conf.py # new file: lib/script.py # (11:37:16) davin.baragiotta: ah... master... initial commit... mais : (11:37:26) davin.baragiotta: il y a des changements à commité (11:37:37) davin.baragiotta: les changements sont : (11:37:53) davin.baragiotta: conf.py et lib/script.py sont des nouveaux fichiers (11:38:05) davin.baragiotta: qu'est-ce qui s'est passé? (11:38:09) davin.baragiotta: Git est respectueux (11:38:22) davin.baragiotta: Git ne suit que ce que vous lui dites de suivre (11:38:40) davin.baragiotta: il a un index des choses qu'il doit surveiller (11:38:46) chanesakhone.chitsaya [chanesakhone.chitsaya@auf.org/Home] a rejoint le salon. (11:39:04) davin.baragiotta: surveiller pour détecter les modifs... surveiller pour vous demander d'engager les changements (commiter) (11:39:20) davin.baragiotta: git add : ajout des fichiers (ou répertoires) dans l'index à suivre (11:39:22) davin.baragiotta: inversement (11:39:28) davin.baragiotta: git rm les enlève (11:39:51) davin.baragiotta: avec le point à la fin, ça veut dire "tous (les fichiers)" : git add . (11:40:06) davin.baragiotta: on a donc ajouté à l'index de Git tous les fichiers nouvellement créés (11:40:12) davin.baragiotta: ok (11:40:21) davin.baragiotta: revenons au message (11:40:32) davin.baragiotta: Changes to be committed (11:40:43) davin.baragiotta: Changements à engager (traduction libre) (11:40:54) davin.baragiotta: c'est donc qu'il nous reste plus qu'à "faire le commit"... (11:40:58) davin.baragiotta: "commiter" (11:41:04) davin.baragiotta: (en mauvais français) (11:41:33) davin.baragiotta: commande pour "commiter" : git commit -a -m "message du commit" (11:41:39) davin.baragiotta: allons-y (11:41:47) davin.baragiotta: sans oublier les paramètres -a -m (11:42:57) davin.baragiotta: davin.baragiotta@u-db:~/atelier$ git commit -a -m "mon premier commit local, yéééééééé" [master (root-commit) 789760e] mon premier commit local, yéééééééé Author: Davin Baragiotta 0 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 conf.py create mode 100644 lib/script.py (11:43:04) davin.baragiotta: lisons (11:43:22) davin.baragiotta: master... ah c'est la branche de tout à l'heure (on va y revenir) (11:43:47) davin.baragiotta: root-commit... comprendre que c'est LE commit initial... le big bang quoi... avant y'a rien (11:44:20) davin.baragiotta: 789760e = premiers caractères du hash qui sert d'identifiant unique au commit... c'est utile de savoir (quand on en a besoin) (11:44:35) davin.baragiotta: le reste c'est mon message... c'est pour les humains... (11:44:44) davin.baragiotta: finalement on a l'auteur (11:45:13) davin.baragiotta: et des traces un peu plus cryptique de ce qui s'est passé (à explorer si ça vous intéresse) (11:45:51) davin.baragiotta: si votre "Auteur" n'est pas bien formatté, faites une recherche sur la config globale de votre clé SSH (de mémoire) (11:46:31) davin.baragiotta: ah non... de config globale de votre git sur votre machine : (11:46:44) davin.baragiotta: dans votre home, un fichier nommé : .gitconf (11:46:53) davin.baragiotta: contenu : [user] name = Davin Baragiotta email = davin.baragiotta@auf.org (11:46:59) davin.baragiotta: on ne s'y attarde pas plus (11:47:04) davin.baragiotta: bon ça va bien (11:47:12) davin.baragiotta: on a fait un premier commit en local :D (11:47:17) eric.mcsween: précision: le fichier s'appelle .gitconfig (11:47:27) davin.baragiotta: ahaha : tout à fait (11:47:35) davin.baragiotta: ça me crève les yeux! (11:47:45) davin.baragiotta: retour au plan de match sur notre page web : (11:47:51) davin.baragiotta: http://wiki.auf.org/wikiteki/Ateliers/Git/Support (11:48:16) davin.baragiotta: on veut maintenant "voir" le résultat de notre commit... dans l'historique de notre versionnage (11:48:20) shafeek.sumser: REMARQUE: .git/config (11:48:22) claudine.mosozi a quitté le salon (11:48:42) davin.baragiotta: shafeek.sumser: non, ça c'est pas ton répertoire de projet, sauf erreur... (11:48:48) davin.baragiotta: pas ta config globale dans ton home (11:49:20) davin.baragiotta: nouvelle commande : (11:49:21) davin.baragiotta: git log (11:49:34) davin.baragiotta: comme son nom indique... c'est le journal de nos modifs (11:49:50) davin.baragiotta: nos modifs... sont consignées dans des commits... donc c'est le log de nos commits (11:50:02) davin.baragiotta: davin.baragiotta@u-db:~/atelier$ git log commit 789760e857a17623fc632233fef26a2dea0270e8 Author: Davin Baragiotta Date: Mon Aug 27 11:42:50 2012 -0400 mon premier commit local, yéééééééé (11:50:05) davin.baragiotta: lisons (11:50:18) davin.baragiotta: tiens, on voit le hash au complet (id du commit ;) ) (11:50:28) davin.baragiotta: Auteur, date... message... c,est bon! (11:50:57) davin.baragiotta: ok, une autre approche intéressante, pour visualiser (vraiment) l'historique des modifs : (11:50:58) davin.baragiotta: gitk (11:51:04) davin.baragiotta: gitk c'est un autre programme (11:51:18) davin.baragiotta: il utilise les données de git, pour les représenter visuellement (11:51:23) davin.baragiotta: lancez gitk (11:51:53) davin.baragiotta: ce qui est intéressant, à mon sens, c'est la visualisation en haut à gauche (11:51:59) davin.baragiotta: on voit un point (jaune) (11:52:37) davin.baragiotta: ça représente notre commit... un point dans le temps... une version particulière du contenu du répertoire "atelier" (11:52:51) davin.baragiotta: à côté... on voit une "étiquette" verte... avec le nom master (11:53:14) davin.baragiotta: en gros, ça montre que "master" est rendu là... master est "à ce commit".... (11:53:30) davin.baragiotta: la version la plus à jour de master... c'est le commit "mon premier commit local..." (11:53:50) davin.baragiotta: plus précisément... le commit 789760e... (11:53:59) davin.baragiotta: toujours dans gitk (11:54:10) davin.baragiotta: on voit en bas le hash : Id SHA1 (11:54:27) davin.baragiotta: et d'autres infos dans le panneau de gauche (11:54:34) davin.baragiotta: (ressemble beaucoup au log ;) (11:54:58) davin.baragiotta: fermez gitk (11:55:19) davin.baragiotta: on vient de terminer les commandes utiles en local (11:55:24) davin.baragiotta: en gros, c,est ça git (11:55:34) davin.baragiotta: il nous reste à voir des commandes particulières pour : (11:55:42) davin.baragiotta: 1. échanger avec le serveur (11:55:53) davin.baragiotta: 2. utiliser des branches (11:56:01) davin.baragiotta: des questions? (11:56:16) shafeek.sumser: non ça va (11:56:30) eric.mcsween: non, pas de questions (11:56:36) davin.baragiotta: ok super... (11:56:44) davin.baragiotta: INTERFACE WEB DU SERVEUR (11:56:50) claudine.mosozi [claudine.mosozi@auf.org/Bureau] a rejoint le salon. (11:56:58) davin.baragiotta: allons faire un tour dans le domaine de moussa et de JC (11:57:09) davin.baragiotta: http://git.auf.org/ (11:57:23) davin.baragiotta: le dépôt AUF de nos projets Git (11:57:50) davin.baragiotta: on dit projet... mais c'est une liste des "dépots Git"... peu importe leur contenu (11:58:02) davin.baragiotta: on a des dépôts persos (11:58:15) davin.baragiotta: des dépôts relatifs aux Infrastructures techniques (11:58:28) davin.baragiotta: les dépôts des sources des Systèmes d'information (11:58:34) davin.baragiotta: presque tout est là (11:58:45) davin.baragiotta: tout devrait y être (pour les sources des SI, en tout cas ;) ) (11:58:57) davin.baragiotta: nous allons nous concentrer sur un projet bidon : (11:59:00) davin.baragiotta: esapce-formation.git (11:59:07) davin.baragiotta: espace-formation.git, dis-je (11:59:20) davin.baragiotta: http://git.auf.org/?p=espace-formation.git;a=summary (11:59:34) davin.baragiotta: on a là, un gitk version web (11:59:49) davin.baragiotta: (un peu moins puissant dans la représentation graphique... on y reviendra) (11:59:59) davin.baragiotta: regardons un peu ce qu'on peut y voir (12:00:05) davin.baragiotta: shortlog (12:00:15) davin.baragiotta: c'est la liste des commits fait dans le dépôt (12:00:22) davin.baragiotta: on voit l'étiquette verte... ahaha (12:00:25) eddy.andriamanantena a quitté le salon (12:00:35) davin.baragiotta: on voit donc le commit où "master est rendu" (12:00:40) davin.baragiotta: sa dernière version (12:01:01) davin.baragiotta: on voit que Davin a fait ce commit, il y a 5 heures... (12:01:13) davin.baragiotta: cliquons sur le lien à droite "commit" (12:01:30) davin.baragiotta: encore de l'info qui ressemble au log... à ce qu'on a dans gitk (12:01:46) davin.baragiotta: commit = 58a91d (12:02:31) davin.baragiotta: rappel : les sources qu'on regarde... dans espace-formation.git... n'ont *aucun* rapport avec votre dépôt git créé en local pour "atelier" (12:02:39) davin.baragiotta: vous pouvez même supprimer le répertoire "atelier" (12:02:50) davin.baragiotta: c'était juste pour amorcer un dépôt en local (git init) (12:02:57) davin.baragiotta: et explorer les commandes de base (12:03:10) davin.baragiotta: (on va les refaire, croyez moi ;) ) (12:03:13) davin.baragiotta: ok (12:03:19) davin.baragiotta: de retour sur la page web (12:03:31) davin.baragiotta: on voit : (12:03:43) davin.baragiotta: cedric.txt [deleted file] (12:03:52) davin.baragiotta: (je suis ici : http://git.auf.org/?p=espace-formation.git;a=commit;h=58a91d3ca8687d30c405078c91ff9816ea9d6ac4) (12:04:06) davin.baragiotta: en un coup d'oeil... (12:04:22) davin.baragiotta: on voit *toutes* les modifications faites à l'arborescence (12:04:28) davin.baragiotta: je précise ici un truc : (12:04:35) davin.baragiotta: quand vous créez un dépôt git (12:04:50) davin.baragiotta: git suit *tout* ce qu'il y a en dessous (12:05:00) davin.baragiotta: sauf ce que vous lui dites explicitement d'ignorer (12:05:08) davin.baragiotta: (on va y revenir) (12:05:17) davin.baragiotta: non tiens... maintenant : (12:05:33) davin.baragiotta: on déclare ce que git doit ignorer dans un fichier caché (12:05:40) davin.baragiotta: nommé : .gitignore (12:06:09) davin.baragiotta: on voit un exemple complet qu'on utilise dans nos projets SI (12:06:15) davin.baragiotta: dans la doc sur wikiteki : (12:06:15) davin.baragiotta: http://wiki.auf.org/wikiteki/Git/D%C3%A9veloppeur (12:06:22) davin.baragiotta: http://wiki.auf.org/wikiteki/Git/D%C3%A9veloppeur#Ignorer_des_fichiers_ou_des_dossiers (12:06:33) davin.baragiotta: # = commentaire (12:06:41) davin.baragiotta: le reste = les règles pour ignorer (12:06:49) davin.baragiotta: notamment, on peut voir : conf.py (12:07:05) davin.baragiotta: c'est là qu,on met nos paramètres d'accès à la base de données... (12:07:21) davin.baragiotta: on *ne veut pas* que nos paramètres d'accès se retrouvent dans notre dépôt (12:07:29) davin.baragiotta: lisible par tous (12:07:34) davin.baragiotta: donc on l'ignore (12:07:52) davin.baragiotta: bien sûr que le fichier *doit* exister pour que nos applications fonctionnent... (12:08:17) davin.baragiotta: ... seulement : c'est pas le problème de Git que de suivre ce fichier, c'est notre problème à nous, humains (car on le veut bien) (12:08:24) davin.baragiotta: autre exemple de fichiers qu'on ignore (12:08:30) davin.baragiotta: dans le système RH (12:08:39) davin.baragiotta: des évaluations du personnel, par exemple (12:08:59) davin.baragiotta: les évaluations en PDF qui sont chargées (uploadées) sur le serveur... dans nos sources... (12:09:05) davin.baragiotta: on ne veut pas qu'elles soient suivies (12:09:25) davin.baragiotta: (en général, tous les uploads ne sont pas suivis... c'est comme du contenu de la DB) (12:09:44) davin.baragiotta: donc on va dire que le répertoire où sont les uploads ne'est pas suivi (12:09:52) davin.baragiotta: si vous voulez tester (12:10:22) davin.baragiotta: ajoutez .gitignore dans "atelier" (si vous ne l'avez pas supprimé :-/ ) (12:10:34) davin.baragiotta: copiez le contenu du fichier de la documentation (12:10:47) davin.baragiotta: et tester avec un conf.py dans votre arborescence (12:10:51) davin.baragiotta: donc (12:11:06) davin.baragiotta: à part les exceptions dans .gitignore... (12:11:36) davin.baragiotta: git suit *toute* l'arborescence *sous* le répertoire root (où .git/ est) (12:11:43) davin.baragiotta: voilà c'est important : (12:11:58) davin.baragiotta: cette arborescence.... c'est le "tree" des fichiers (12:12:12) davin.baragiotta: retournons sur le web (12:12:21) davin.baragiotta: explorer le dépo communt de espace-formation (12:12:28) davin.baragiotta: avant de tous commiter dedans ;) (12:12:36) davin.baragiotta: nous étions dans un commit particulier (12:12:41) davin.baragiotta: http://git.auf.org/?p=espace-formation.git;a=commit;h=58a91d3ca8687d30c405078c91ff9816ea9d6ac4 (12:13:04) davin.baragiotta: à côté du fichier "cedric.txt" qui a été supprimé par ce commit... on voit blob (12:13:07) davin.baragiotta: cliquez (12:13:28) davin.baragiotta: ça... c'est le contenu du fichier avant sa suppression... (12:13:34) davin.baragiotta: (retour en arrière) (12:13:43) davin.baragiotta: autre lien : history (12:13:46) davin.baragiotta: intéressant! (12:14:10) davin.baragiotta: on voit toute l'histoire du fichier cedric.txt dans le dépôt espace-formation.git (12:14:16) davin.baragiotta: ce n'est pas rien!!!! (12:14:37) davin.baragiotta: on voit *chaque* commit qui a modifié, ajouté ou supprimé ce fichier!!! (12:14:58) abrosine2 a quitté le salon (12:14:59) davin.baragiotta: le premier, lors de l'ajout : "Ajout fichier cedric" (12:15:24) abrosine2 [abrosine2@gmail.com/D9E338DB] a rejoint le salon. (12:15:28) davin.baragiotta: les liens commitdiff permettent même d'explorer les modifications exactes faites entre chaque version!!!! (12:15:30) davin.baragiotta: :D (12:15:35) davin.baragiotta: puissant! (12:15:50) davin.baragiotta: retournons à la page d'accueil du projet et ensuite collaborons (12:15:55) davin.baragiotta: http://git.auf.org/?p=espace-formation.git;a=summary (12:16:05) davin.baragiotta: en bas complètement de la page (12:16:09) davin.baragiotta: on voit "heads" (12:16:19) davin.baragiotta: ce sont les "têtes" de chaque branche.... (12:16:25) davin.baragiotta: on parle des branche bientôt (12:16:47) davin.baragiotta: ko l'heure est grave... nous allons cloner ce dépôt pour qu'on collabore tous dessus :D (12:16:52) davin.baragiotta: avant : des questions? (12:16:52) doan.manh.ha a quitté le salon (12:17:11) eric.mcsween: pas de questions (12:17:15) davin.baragiotta: je continue (12:17:25) davin.baragiotta: http://wiki.auf.org/wikiteki/Ateliers/Git/Support (12:17:34) davin.baragiotta: VERSIONNER SUR SERVEUR (12:17:53) davin.baragiotta: clonez le dépôt en local... sur votre home directement, par exemple (12:17:56) davin.baragiotta: (ou ailleurs) : (12:18:22) davin.baragiotta: (je saute la partie ou on transfère un dépôt local sur le serveur) (12:18:29) davin.baragiotta: git clone ssh://gitosis@git.auf/espace-formation (12:18:54) davin.baragiotta: faire signe dans salon tech si vous avez des probl lors du clone (12:19:26) davin.baragiotta: vous devriez voir : (12:19:28) davin.baragiotta: davin.baragiotta@u-db:~$ git clone ssh://gitosis@git.auf/espace-formation Initialized empty Git repository in /net/nfs-authnss.b.ca.auf/home/davin.baragiotta/espace-formation/.git/ remote: Counting objects: 1178, done. remote: Compressing objects: 100% (1082/1082), done. remote: Total 1178 (delta 441), reused 254 (delta 38) Receiving objects: 100% (1178/1178), 1.48 MiB, done. Resolving deltas: 100% (441/441), done. (12:19:57) davin.baragiotta: on voit qu'un dépôt git a été initialisé dans le répertoire "espace-formation" (12:20:05) davin.baragiotta: tout est ok, pas de probl? (12:20:21) davin.baragiotta: je continue (12:20:27) davin.baragiotta: déplacez-vous dans ce répertoire (12:20:59) davin.baragiotta: davin.baragiotta@u-db:~$ cd espace-formation/ davin.baragiotta@u-db:~/espace-formation$ ls -l total 8 drwxrwx--- 5 davin.baragiotta users 4096 2012-08-27 12:19 bmo_repertoire drwxrwx--- 9 davin.baragiotta users 4096 2012-08-27 12:19 super_beco (12:21:11) davin.baragiotta: évidemment, le répertoire n'est pas vide!" (12:21:13) eric.mcsween: oh... il y a des problèmes de clone (12:21:19) davin.baragiotta: ach. (12:21:49) davin.baragiotta: tout le monde est dans le RPV? (12:22:10) shafeek.sumser: moi non (12:22:19) davin.baragiotta: ah. (12:22:37) niry.andriambelo a quitté le salon (12:22:41) davin.baragiotta: c'est plus compliqué hors RPV, mais possible... ce ne sera pas couvert ici (12:22:46) thierry.tsitoara: moi non plus (12:22:51) davin.baragiotta: (on pourra reprendre ensemble au besoin) (12:23:14) davin.baragiotta: je laisse eric.mcsween faire le support dans tech, sauf si personne ne peut plus suivre :-/ (12:23:48) davin.baragiotta: nous avons donc (la plupart d'entre nous), un dépôt espace-formation (12:23:57) davin.baragiotta: l'idée = contribuer à ce projet (bidon) (12:24:13) davin.baragiotta: nous allons modifier l'arborescence et mettre nos contributions sur le serveur (12:24:32) davin.baragiotta: (via SSH... d'où le besoin des clés : pour vous permettre l'accès en écriture) (12:24:34) davin.baragiotta: PROCESSUS DE VERSIONNAGE (12:24:50) niry.andriambelo [niry.andriambelo@auf.org/AUF] a rejoint le salon. (12:24:51) davin.baragiotta: premier réflexe : git status (12:25:01) davin.baragiotta: davin.baragiotta@u-db:~/espace-formation$ git status # On branch master nothing to commit (working directory clean) (12:25:15) davin.baragiotta: tout est propre... rien à commiter (car rien de modifié) (12:25:30) davin.baragiotta: créez un fichier nommé avec votre prénom (12:25:33) davin.baragiotta: ex.: davin.txt (12:25:45) davin.baragiotta: arnaud.txt (12:26:00) davin.baragiotta: mettez-y le contenu vuolu (ou pas)... (12:26:03) davin.baragiotta: git status? (12:26:39) davin.baragiotta: davin.baragiotta@u-db:~/espace-formation$ git status # On branch master # 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) (12:27:05) davin.baragiotta: en suite? eh bien... on lit ce que Git nous dit... et on est en local... on fait comme tout à l'heure (12:27:09) eric.mcsween: davin, prends peut-être un petit 2 minutes de pause, histoire de permettre à ceux qui n'étaient pas dans le RPV de nous rattraper (12:27:18) eric.mcsween: Ils ont cloné, mais en lecture seulement. (12:27:30) davin.baragiotta: la seule différence c'est que ce dépôt existe aussi sur le serveur ET sur tous vos postes (12:27:48) davin.baragiotta: eric.mcsween: ok... mais hors RPV, faut toctoctoc.sh pour pousser... (12:28:24) davin.baragiotta: donc hors RPV, c'est en dehors de l'atelier (à mois que tu n'aies tout ce qu'il faut pour leur donner...) (12:28:49) davin.baragiotta: l,atelier sera repris mercredi à 02h00 GMT : si vous pouvez être dans le RPV à ce moment là.... (12:28:59) davin.baragiotta: je continue car le temps file (12:29:07) eric.mcsween: ok. (12:29:22) davin.baragiotta: on reprend donc simplement le processus normal de versionnage (12:29:31) davin.baragiotta: http://wiki.auf.org/wikiteki/Ateliers/Git/Support (12:29:40) davin.baragiotta: -> PROCESSUS DE VERSIONNAGE (12:29:46) davin.baragiotta: git status (12:29:52) davin.baragiotta: git pull ; c'est une nouveauté (12:30:02) davin.baragiotta: ça, ça veut dire "tirer" (12:30:11) davin.baragiotta: tirer la versino la plus à jour du serveur (12:30:22) davin.baragiotta: davin.baragiotta@u-db:~/espace-formation$ git pull Already up-to-date. (12:30:37) davin.baragiotta: je suis déjà à jour... normal, on vient de cloner... (12:30:46) davin.baragiotta: donc on continue : (12:30:49) davin.baragiotta: git add . (12:30:55) davin.baragiotta: git commit .... (12:31:17) davin.baragiotta: davin.baragiotta@u-db:~/espace-formation$ git add . davin.baragiotta@u-db:~/espace-formation$ git commit -a -m 'davin contribue au projet' [master 0366cef] davin contribue au projet Author: Davin Baragiotta 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 davin.txt (12:31:56) davin.baragiotta: finalement, on peut pousser notre commit sur le serveur : (12:32:26) davin.baragiotta: ahaha... un plus rapide que mois avait poussé! (12:32:31) davin.baragiotta: alors j'explique : (12:32:56) davin.baragiotta: davin.baragiotta@u-db:~/espace-formation$ git push To ssh://gitosis@git.auf/espace-formation ! [rejected] master -> master (non-fast-forward) error: failed to push some refs to 'ssh://gitosis@git.auf/espace-formation' To prevent you from losing history, non-fast-forward updates were rejected Merge the remote changes before pushing again. See the 'Note about fast-forwards' section of 'git push --help' for details. davin.baragiotta@u-db:~/espace-formation$ git push origin master To ssh://gitosis@git.auf/espace-formation ! [rejected] master -> master (non-fast-forward) error: failed to push some refs to 'ssh://gitosis@git.auf/espace-formation' To prevent you from losing history, non-fast-forward updates were rejected Merge the remote changes before pushing again. See the 'Note about fast-forwards' section of 'git push --help' for details. davin.baragiotta@u-db:~/espace-formation$ git pull remote: Counting objects: 4, done. remote: Compressing objects: 100% (2/2), done. remote: Total 3 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. From ssh://git.auf/espace-formation 58a91d3..0e7b208 master -> origin/master Merge made by recursive. niry.txt | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 niry.txt davin.baragiotta@u-db:~/espace-formation$ git push Counting objects: 7, done. Delta compression using up to 2 threads. Compressing objects: 100% (4/4), done. Writing objects: 100% (5/5), 552 bytes, done. Total 5 (delta 2), reused 0 (delta 0) To ssh://gitosis@git.auf/espace-formation 0e7b208..6bb2dc3 master -> master (12:33:06) davin.baragiotta: wowo... c'est beaucoup (12:33:26) davin.baragiotta: mais : j'ai assayé de faire un push... c'est à dire pousser mes modifications sur le serveur (12:33:29) davin.baragiotta: la commande est : (12:33:31) davin.baragiotta: git push (12:33:41) davin.baragiotta: j'ai eu une erreur :( (12:34:10) davin.baragiotta: j'ai réessayé en étant plus explicite (erreur de config?) : git push origin master (12:34:18) davin.baragiotta: erreur... :( (12:34:45) davin.baragiotta: typiquement c'est INTERDIT de pousser (push) un commit si tu n'est pas à jour avec le serveur (12:34:57) davin.baragiotta: donc je devais être PAS à jour (12:35:04) davin.baragiotta: j'ai refait un git pull (12:35:17) davin.baragiotta: et effectivement ça a télécahrgé du contenu!!!! (12:35:28) davin.baragiotta: donc quelqu'un m'a pris de vitesse!!!! (12:35:40) davin.baragiotta: finalement, j'ai pu faire un git push (12:35:45) davin.baragiotta: sans problème....! (12:35:59) davin.baragiotta: alors, tous, essayez de faire un push... (12:36:02) davin.baragiotta: on est beaucoup (12:36:09) davin.baragiotta: si vous avez une erreur : (12:36:20) davin.baragiotta: essayez de refaire un pull (12:36:54) davin.baragiotta: en attendant, pour s,amuser, on va aller voir ce qui se passe sur le serveur : (12:37:01) davin.baragiotta: http://git.auf.org/?p=espace-formation.git;a=summary (12:37:24) davin.baragiotta: c'est victor.bruneau qui m'a pris de vitesse!!!! (12:37:27) davin.baragiotta: rahlala! (12:37:37) davin.baragiotta: on attend vos commits tout le monde ;) (12:37:40) davin.baragiotta: des questions? (12:37:47) davin.baragiotta: git pull (12:37:49) davin.baragiotta: git push (12:38:05) abrosine2 a quitté le salon (12:38:33) davin.baragiotta: actuellement, davin.baragiotta et victor.bruneau on pusher... (12:38:35) davin.baragiotta: on vous attend... (12:38:46) davin.baragiotta: *ont pushé (12:38:56) davin.baragiotta: arnaud.amelina@auf.org: ? (12:39:06) davin.baragiotta: balla.fall: ? (12:40:16) davin.baragiotta: aaaah, exact! victor.bruneau me faisait remarquer que c'est niry.andriambelo qui m,a pris de vitesse (12:40:25) davin.baragiotta: nous sommes donc 3 à avoir commité (12:40:45) davin.baragiotta: wow, ok... on a un user "Coda" (12:41:04) davin.baragiotta: 4 à avoir commité... merci franck.kouyami ;) (12:41:21) davin.baragiotta: tout le monde dort? (12:41:47) eric.mcsween: la plupart des gens n'ont pas pu puller au début, ils sont donc en train de se rattraper. (12:41:53) chamback.pierre [chamback.pierre@auf.org/171101896134674130143882] a rejoint le salon. (12:41:54) davin.baragiotta: ah ok (12:42:18) balla.fall: j'ai une coupure depuis ce matin (12:42:38) balla.fall: je fais des aller retour (12:42:47) chanesakhone.chitsaya a quitté le salon (12:43:22) eric.mcsween: franck.kouyami: [Question] cela peut sembler bête, mais quelle est le diff entre pull et push ..? (12:43:28) davin.baragiotta: quelle est la différence entre pull et push : (12:43:37) davin.baragiotta: pull = tirer, push = pousser (12:43:40) davin.baragiotta: ce sont les contraire (12:43:56) davin.baragiotta: donc dans un cas, on "tire les données du serveur vers notre dépôt local" (12:44:11) davin.baragiotta: dans l'autre cas, on "pousse les données du local vers le serveur" (12:44:16) claudine.mosozi a quitté le salon (12:44:29) davin.baragiotta: ok il me reste 15 minutes (12:44:54) davin.baragiotta: combien sont dans le coup? (12:45:15) davin.baragiotta: bon, j'ai aucun autre push nouveau... 4 m'incluant... pas cool... (12:45:31) davin.baragiotta: je propose de continuer un survol du contenu formel, pour voir ce qui resterait à couvrir (12:45:42) davin.baragiotta: ensuite, on reste ensemble pour ceux qui ont le courage (12:45:52) davin.baragiotta: (aucun autre atelier ne suit après celui-ci) (12:46:05) davin.baragiotta: j'accepte ma proposition ;) (12:46:17) davin.baragiotta: reprenons donc le plan de l,atelier : (12:46:23) davin.baragiotta: http://wiki.auf.org/wikiteki/Ateliers/Git/Support (12:46:33) davin.baragiotta: on vient de couvrir : PROCESSUS DE VERSIONNAGE (12:46:36) davin.baragiotta: c'est tout (12:46:39) davin.baragiotta: c'est ça git : (12:46:44) davin.baragiotta: à longueur de journée : (12:47:22) davin.baragiotta: git status édition git add / git rm git commit git pull git push (12:47:35) davin.baragiotta: maintenant... dans la vie... il y a des conflits (12:47:57) davin.baragiotta: je voulais avec vous créer ces conflits dans (12:48:04) davin.baragiotta: EXERCICE TRAVAIL COLLABORATIF (12:48:10) davin.baragiotta: le principe est simple : (12:48:33) davin.baragiotta: quand on fait git pull et qu'on récupère les données du serveur pour les importer en local... (12:48:56) davin.baragiotta: ... git essaie *automatiquement* des les fusionner (merge) avec notre commit qu'on vient de faire (12:49:32) davin.baragiotta: ex.: si on ajoute chacun un nouveau fichier de notre côté... facile... git les "ajoute tous automatiquement" (12:49:41) davin.baragiotta: il fait un "merge" automatique (12:49:45) davin.baragiotta: merge = fusion (12:50:00) davin.baragiotta: mais si on modifie un même fichier...?? (12:50:28) davin.baragiotta: git *peut* réussir seul à faire un merge automatique aussi quand on modifie même fichier (12:50:35) davin.baragiotta: mais il peut échouer aussi : (12:50:42) davin.baragiotta: par exemple, si on modifie la même ligne... (12:51:05) davin.baragiotta: normal : quelle ligne sera la meilleure, la mienne, celle de niry, celle de frnack, celle de victor? (12:51:14) davin.baragiotta: (non... pas nécessairement celle de victor.bruneau ;) ) (12:51:18) davin.baragiotta: donc... (12:51:30) davin.baragiotta: si git échoue à faire un merge "automatique"... (12:51:42) davin.baragiotta: ... nous devons faire ce merge "manuellement" (12:51:53) davin.baragiotta: concrètement, git nous liste les fichiers problématiques (12:52:14) davin.baragiotta: en les ouvrant : vous voyez les 2 versions en conflit... séparées par >>>>>>>>>>>>>>>>>>>>> (12:52:23) davin.baragiotta: à vous de choisir quel sera le code final (12:52:39) davin.baragiotta: et commiter votre merge manuel... votre règlement du conflit (12:52:44) davin.baragiotta: pour finir (12:52:55) davin.baragiotta: une partie intéressante (12:52:56) davin.baragiotta: simple (12:53:13) davin.baragiotta: mais vraiment pas obligatoire pour utiliser git dans son travail quotidien : (12:53:18) davin.baragiotta: ce sont les BRANCHES (12:53:28) davin.baragiotta: un simple mot : (12:53:37) davin.baragiotta: les branches, comme dans les branches d'un arbre (12:53:48) davin.baragiotta: partent du "tronc" commun... (12:54:09) davin.baragiotta: la branche elle-même... c'est une série de commit sur une ligne (la branche elle-même) (12:54:24) davin.baragiotta: la branche à une feuille au bout... à la tête de la branche... c'est le HEAD (12:54:36) davin.baragiotta: le HEAD c'est le commit le plus à jour de la branche (12:54:47) davin.baragiotta: c'est celui qui a l'étiquette verte avec le nom de la branche... (12:54:56) davin.baragiotta: mais... voyons voir concrètement de quoi on parle (12:55:05) davin.baragiotta: dans espace-formation/ (12:55:14) davin.baragiotta: lancez gitk --all (12:55:50) davin.baragiotta: en faisant défiler... on voit plein de lignes de couleurs (12:56:07) davin.baragiotta: qui en bas complètement du graphe, sont nées du même commit originel (12:56:10) davin.baragiotta: du commit root (12:56:14) davin.baragiotta: du commit racine! (12:56:44) davin.baragiotta: il est nommé : "Le premier commit" (2e8ff6de...) (12:57:19) photo-valentin.kouadio a quitté le salon (12:57:34) davin.baragiotta: chaque étiquette, représente le HEAD d'une branche (12:57:42) davin.baragiotta: je n,en dis pas plus si ce n'est (12:57:50) davin.baragiotta: outre la beauté du graphe (12:58:05) davin.baragiotta: que les branches servent à explorer des modifications aux fichiers (12:58:34) davin.baragiotta: (ex.: coder une nouvelle fonctionnalité si on fait du développement, tester une config si on suit une configuration serveur)) (12:58:48) davin.baragiotta: explorer, sans impacté le tronc d'origine (12:58:57) davin.baragiotta: l'expérimentation a portée fruit? (12:59:18) davin.baragiotta: on pourra donc fusionner la branche dans le tronc d'origine pour y ajouter ces nouvelles modifs (12:59:21) davin.baragiotta: CONCLUSION (12:59:25) davin.baragiotta: git est puissant (12:59:35) davin.baragiotta: git est simple : quelque commandes suffisent (12:59:45) davin.baragiotta: git permet de mieux travailler ensemble : (13:00:12) davin.baragiotta: parlons-nous, partageons nos sources (entre nous et avec les autres) et collaborons (13:00:22) davin.baragiotta: c'est en fait, pas mal l'esprit du libre (13:00:27) davin.baragiotta: des exemples? (13:00:43) davin.baragiotta: regardez les dépôts de projets libre sur GitHub : (13:00:49) davin.baragiotta: à vous de collaborer, maintenant ;) (13:00:59) davin.baragiotta: https://github.com/ (13:01:02) davin.baragiotta: des questions? (13:02:20) eric.mcsween: pas de questions (13:02:28) davin.baragiotta: désolé pour la partie RPV : je croyais que c'était un peu implicite... et j,en avais parlé avec le BAP mais j,ai oublié de l'ajouter sur la page de l'atelier : (13:02:32) davin.baragiotta: http://wiki.auf.org/wikiteki/Projet/SemaineTech/2012/Ateliers/Git (13:02:47) davin.baragiotta: ceci dit : cet atelier en rappel mercredi 02h00 GMT (13:02:54) davin.baragiotta: ---------- FIN ATELIER GIT -------------------- }}}