Projet / SemaineTech / 2013 / Ateliers / Git / Archive

ARCHIVE ATELIER GIT

   1 (16:30:07) davin.baragiotta: ======================= DEBUT : Atelier Git ===========================
   2 (16:30:23) arnaud.amelina left the room.
   3 (16:30:27) davin.baragiotta: Bonjour à tous! Cet atelier est co-animé par moi et progfou
   4 (16:30:52) davin.baragiotta: Je vais vous guider pendant 1h sur les commandes de base Git
   5 (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 ;)
   6 (16:31:37) davin.baragiotta: finalement on aura 20min de questions
   7 (16:31:47) davin.baragiotta: support de présentation pour ma partie :
   8 (16:31:54) davin.baragiotta: https://wiki.auf.org/wikiteki/Projet/SemaineTech/2013/Ateliers/Git/Support
   9 (16:32:08) davin.baragiotta: grosso modo, c'est le même atelier que l'an dernier
  10 (16:32:11) davin.baragiotta: mais un peu plus court
  11 (16:32:22) davin.baragiotta: on pourra collaborer ensuite
  12 (16:32:36) davin.baragiotta: dans un "labo" (autre nouveauté de cette année)
  13 (16:32:49) davin.baragiotta: j'ai créé un labo-git... on en parle après...
  14 (16:33:05) davin.baragiotta: maintenant, vous devriez avoir 3 fenêtres ouvertes
  15 (16:33:11) davin.baragiotta: * celle-ci ;)
  16 (16:33:21) davin.baragiotta: * le support de présentation (web)
  17 (16:33:26) davin.baragiotta: * un terminal
  18 (16:33:32) davin.baragiotta: c'est parti!
  19 (16:33:35) davin.baragiotta: INTRODUCTION
  20 (16:33:50) davin.baragiotta: notre objectif aujourd'hui est de connaître les commandes de base
  21 (16:34:11) davin.baragiotta: pour pouvoir suivre localement les versions
  22 (16:34:33) davin.baragiotta: utiliser les branches (sera certainement plus dans le "labo")
  23 (16:34:44) davin.baragiotta: et surtout, faire le suivi des serveurs
  24 (16:34:51) davin.baragiotta: vous devez avoir Git d'installé
  25 (16:34:59) davin.baragiotta: sudo apt-get install git
  26 (16:35:05) davin.baragiotta: (avant c'était git-core)
  27 (16:35:23) davin.baragiotta: aussi, installer l'outil de visualisation graphique de git : gitk
  28 (16:35:29) davin.baragiotta: sudo apt-get install gitk
  29 (16:35:38) davin.baragiotta: mais pourquoi "versionner"?
  30 (16:36:09) davin.baragiotta: en fait, on veut pouvoir "suivre" les modifications qu'on fait dans une arboresence de fichiers dans plusieurs cas
  31 (16:36:13) davin.baragiotta: exemples
  32 (16:36:29) davin.baragiotta: vous développez un logiciel... vous faites donc des modifications au code source
  33 (16:36:44) davin.baragiotta: on veut suivre les modifications!
  34 (16:37:06) davin.baragiotta: vous gérez un serveur à l'AUF et vous modifiez sa config, par exemple....
  35 (16:37:11) davin.baragiotta: on veut suivre les modifications!
  36 (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
  37 (16:38:03) davin.baragiotta: Git est un "gestionnaire de version"... un VCS en anglais
  38 (16:38:22) davin.baragiotta: Git est de la 3e génération des VCS, la génération plus récente
  39 (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
  40 (16:38:49) davin.baragiotta: en quoi Git est particulier?
  41 (16:38:58) davin.baragiotta: d'abord, il est distribué
  42 (16:39:06) davin.baragiotta: attention, c'est important! ;)
  43 (16:39:30) davin.baragiotta: non.... il n'y a pas LE dépôt central avec Git...
  44 (16:39:39) davin.baragiotta: il y a PLEIN de dépôts autonomes...
  45 
  46 (16:40:06) davin.baragiotta: concrètement, quand on collabore : chaque collaborateur a une version locale complète des sources versionnées
  47 (16:40:18) davin.baragiotta: indépendante...
  48 (16:40:48) davin.baragiotta: bien sûr, après on peut tout fusionner les apports de chacun dans les dépôts
  49 (16:40:59) davin.baragiotta: mais parlons concret : mettons les mains dans git
  50 (16:41:21) davin.baragiotta: sur votre poste, créez-vous un répertoire nommé... disons "semainetech"
  51 (16:41:32) davin.baragiotta: déplacez-y vous
  52 (16:41:36) davin.baragiotta: mkdir semainetech
  53 (16:41:40) davin.baragiotta: cd semainetech
  54 (16:42:17) davin.baragiotta: pour amorcer le suivi de ce répertoire (et de TOUT son contenu) par git :
  55 (16:42:26) davin.baragiotta: tapez la commande : 
  56 git init
  57 (16:42:43) davin.baragiotta: 
  58 giotta@machina:~/projets/ateliers/git$ mkdir semainetech
  59 giotta@machina:~/projets/ateliers/git$ cd semainetech
  60 giotta@machina:~/projets/ateliers/git/semainetech$ git init
  61 Initialized empty Git repository in /home/giotta/projets/ateliers/git/semainetech/.git/
  62 (16:43:01) davin.baragiotta: si vous regardez vos fichiers cachés
  63 (16:43:10) davin.baragiotta: vous allez voir un répertoire ".git"
  64 (16:43:20) davin.baragiotta: TOUT le suivi est là
  65 (16:43:38) davin.baragiotta: vous supprimez ce fichier? vous venez de supprimer TOUT le suivi Git.... !!!
  66 (16:43:45) davin.baragiotta: *ce répertoire, dis-je
  67 (16:44:08) davin.baragiotta: (contrairement à SVN qui crée des répertoire .SVN partout)
  68 (16:44:18) davin.baragiotta: ok donc on vit d'amorcer le suivi de Git
  69 (16:44:33) davin.baragiotta: on va maintenant se créer un nouveau fichier dans le répertoire semainetech
  70 (16:44:37) davin.baragiotta: et un nouveau répertoire
  71 (16:44:52) davin.baragiotta: je crée fichier "davin.txt" et répertoire "test"
  72 (16:45:31) davin.baragiotta: maintenant, une nouvelle commande... presque la plus importante :
  73 git status
  74 (16:45:47) davin.baragiotta: status vous permet de voir à tout instant "où vous en êtes"
  75 (16:46:02) davin.baragiotta: 
  76 giotta@machina:~/projets/ateliers/git/semainetech$ git status
  77 # On branch master
  78 #
  79 # Initial commit
  80 #
  81 # Untracked files:
  82 # (use "git add <file>..." to include in what will be committed)
  83 #
  84 # davin.txt
  85 nothing added to commit but untracked files present (use "git add" to track)
  86 (16:46:11) davin.baragiotta: on remarque 2 choses
  87 (16:46:19) davin.baragiotta: en fait 3 ;)
  88 (16:46:28) davin.baragiotta: 1. git est explicite : lisez ce qu'il vous dit
  89 (16:46:51) davin.baragiotta: 2. en lisant, on lit que le fichiier "davin.txt" n'est pas suivi (untracked)
  90 (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
  91 (16:48:07) davin.baragiotta: giotta@machina:~/projets/ateliers/git/semainetech$ git status
  92 # On branch master
  93 #
  94 # Initial commit
  95 #
  96 # Untracked files:
  97 # (use "git add <file>..." to include in what will be committed)
  98 #
  99 # davin.txt
 100 # test/
 101 nothing added to commit but untracked files present (use "git add" to track)
 102 (16:48:23) davin.baragiotta: voilà, maintenant on voit que test/ n'est pas suivi aussi
 103 (16:48:27) davin.baragiotta: git est poli
 104 (16:48:40) davin.baragiotta: il ne suit QUE ce que vous voulez qu'il suive...
 105 (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
 106 (16:49:31) davin.baragiotta: donc on va mainteant dire à Git de suivre ces fichiers...
 107 (16:49:54) davin.baragiotta: plus simplement, on va dire "suit TOUS les fichiers/répertoires dans semainetech"
 108 (16:50:00) davin.baragiotta: commande :
 109 git add .
 110 (16:50:22) davin.baragiotta: 
 111 giotta@machina:~/projets/ateliers/git/semainetech$ git add .
 112 giotta@machina:~/projets/ateliers/git/semainetech$ git status
 113 # On branch master
 114 #
 115 # Initial commit
 116 #
 117 # Changes to be committed:
 118 # (use "git rm --cached <file>..." to unstage)
 119 #
 120 # new file: davin.txt
 121 # new file: test/conf.py
 122 # new file: test/script.py
 123 #
 124 (16:50:45) davin.baragiotta: Aaaah! git status nous dit maintenant autre chose :
 125 (16:50:58) davin.baragiotta: il y a 3 changements "à commiter"
 126 (16:51:50) davin.baragiotta: c'est à dire que Git sait qu'on a ajouté 3 fichiers
 127 (16:51:55) davin.baragiotta: mais
 128 (16:52:18) davin.baragiotta: c'est à NOUS de dire à Git qu'on "commit" ces changements
 129 (16:52:33) davin.baragiotta: commit en anglais veut dire "engager" en français
 130 (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"
 131 (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 ;)
 132 (16:54:06) davin.baragiotta: "je le veux"
 133 (16:54:20) davin.baragiotta: alors, quelle est la commande pour "commiter" nos changements?
 134 (16:54:37) davin.baragiotta: 
 135 git commit -a -m "Mon premier commit"
 136 (16:55:07) davin.baragiotta: 
 137 giotta@machina:~/projets/ateliers/git/semainetech$ git commit -a -m "Mon premier commit"
 138 [master (root-commit) 078d16b] Mon premier commit
 139 0 files changed
 140 create mode 100644 davin.txt
 141 create mode 100644 test/conf.py
 142 create mode 100644 test/script.py
 143 (16:55:33) davin.baragiotta: Alors lisons un peu ce que Git nous dit après avoir fait notre commit
 144 (16:55:43) davin.baragiotta: [master (root-commit) 078d16b] Mon premier commit
 145 (16:55:52) davin.baragiotta: entre crochets [] : master
 146 (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)
 147 (16:56:32) davin.baragiotta: mais quand on fait status, git nous dit sur quelle branche on est
 148 (16:56:42) davin.baragiotta: (on était sur master : tout va bien)
 149 (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
 150 (16:57:41) davin.baragiotta: en fait, ce sera un Graphe acyclique... mais je ne veut pas dire de gros mots ;)
 151 (16:57:46) davin.baragiotta: donc
 152 (16:57:56) davin.baragiotta: c'est la racine de l'arbre de tous nos commits
 153 (16:57:59) davin.baragiotta: racine = root
 154 (16:58:12) davin.baragiotta: cet arbre aura aussi des branches... la métaphore se tient
 155 (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 ;)
 156 (16:58:46) davin.baragiotta: ok, ensuite... on a un morceau de hash
 157 (16:58:55) davin.baragiotta: 078d16b
 158 (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
 159 (16:59:47) davin.baragiotta: et finalement, le commit même a un hash... voyons le comme un identifiant unique
 160 (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)
 161 (17:00:44) davin.baragiotta: [master (root-commit) 078d16b] Mon premier commit
 162 (17:01:03) davin.baragiotta: finalement... le "Mon premier commit" est le message que j'ai passé en paramètre
 163 (17:01:28) davin.baragiotta: c'est très important d'avoir des noms de commits pertinents
 164 (17:01:37) davin.baragiotta: le but est de pouvoir suivre l'historique des modifications
 165 (17:01:52) davin.baragiotta: si vous écrivez toujours "changement", "modif", "correctifs"... euh
 166 (17:02:04) davin.baragiotta: ben faut aller voir concrètement le travail qui a été fait
 167 (17:02:08) davin.baragiotta: exemple :
 168 (17:02:24) davin.baragiotta: vous modifier la config d'Apache et votre serveur est suivi par Git?
 169 (17:02:33) davin.baragiotta: "Ajout du site cartographie"
 170 (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
 171 (17:03:07) davin.baragiotta: ok on continue
 172 (17:03:21) davin.baragiotta: on était là :
 173 (17:03:22) davin.baragiotta: giotta@machina:~/projets/ateliers/git/semainetech$ git commit -a -m "Mon premier commit"
 174 [master (root-commit) 078d16b] Mon premier commit
 175 0 files changed
 176 create mode 100644 davin.txt
 177 create mode 100644 test/conf.py
 178 create mode 100644 test/script.py
 179 (17:03:37) davin.baragiotta: le reste, c'est le détail des opérations sur les fichiers
 180 (17:03:52) davin.baragiotta: (pas de changé, car on a juste ajouté)... 3 fichiers créés
 181 (17:04:04) davin.baragiotta: reafites maintenant git status pour voir où vous en êtes
 182 (17:04:17) davin.baragiotta: 
 183 giotta@machina:~/projets/ateliers/git/semainetech$ git status
 184 # On branch master
 185 nothing to commit (working directory clean)
 186 (17:04:24) davin.baragiotta: voilà, Git est explicite :
 187 (17:04:51) davin.baragiotta: vous êtes sur la branche master (celle par défaut... disons, le tronc de l'arbre des modifications)
 188 (17:05:22) davin.baragiotta: rien à engager comme modifications car l'arborescence du répertoire "semainetech" que Git suit est "propre"
 189 (17:05:38) davin.baragiotta: c'est à dire : on n'a fait aucune modification depuiss notre dernier commit
 190 (17:05:48) davin.baragiotta: on récapitule les commandes vues :
 191 (17:05:59) davin.baragiotta: git init, git status, git add, git commit
 192 (17:06:01) davin.baragiotta: simple
 193 (17:06:04) davin.baragiotta: des questions?
 194 (17:07:14) davin.baragiotta: bon alors on continue... le modérateur me fera signe pour des questions tardive
 195 (17:07:24) davin.baragiotta: on en est où dans le programme?
 196 (17:07:33) davin.baragiotta: https://wiki.auf.org/wikiteki/Projet/SemaineTech/2013/Ateliers/Git/Support
 197 (17:07:42) davin.baragiotta: on est sous VERSIONNER EN LOCAL
 198 (17:08:07) davin.baragiotta: nous reste à voir la liste visuellement la liste de nos commits...
 199 (17:08:24) davin.baragiotta: pour ce faire on va créer un ou 2 commits...
 200 (17:08:29) davin.baragiotta: de plus
 201 (17:08:47) davin.baragiotta: modifiez vos fichiers actuels (ou ajoutez-en)
 202 (17:09:13) davin.baragiotta: assurez d,avoir "commité" vos changements... engagez-les car vous voulez ces changements
 203 (17:10:39) davin.baragiotta: 
 204 giotta@machina:~/projets/ateliers/git/semainetech$ git status
 205 # On branch master
 206 nothing to commit (working directory clean)
 207 giotta@machina:~/projets/ateliers/git/semainetech$ git status
 208 # On branch master
 209 # Changes not staged for commit:
 210 # (use "git add <file>..." to update what will be committed)
 211 # (use "git checkout -- <file>..." to discard changes in working directory)
 212 #
 213 # modified: test/script.py
 214 #
 215 no changes added to commit (use "git add" and/or "git commit -a")
 216 giotta@machina:~/projets/ateliers/git/semainetech$ git commit -a -m "Amorce du code de ce fameux script : il print un truc"
 217 [master e01b295] Amorce du code de ce fameux script : il print un truc
 218 1 file changed, 1 insertion(+)
 219 giotta@machina:~/projets/ateliers/git/semainetech$ git status
 220 # On branch master
 221 nothing to commit (working directory clean)
 222 (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
 223 (17:11:21) davin.baragiotta: excellent, j'ai maintenant 2 commits dans mon historique... 
 224 (17:11:26) davin.baragiotta: mais prouvons-le!
 225 (17:11:32) davin.baragiotta: nouvelle commande : git log
 226 (17:11:47) davin.baragiotta: 
 227 giotta@machina:~/projets/ateliers/git/semainetech$ git log
 228 commit e01b2957231d8750bd1a5cea000f0963ad1b6860
 229 Author: Davin Baragiotta <davin.baragiotta@auf.org>
 230 Date: Mon Sep 2 10:09:55 2013 -0400
 231 Amorce du code de ce fameux script : il print un truc
 232 commit 078d16b50983723a2dc9e2620c4fde5fe22ff7d3
 233 Author: Davin Baragiotta <davin.baragiotta@auf.org>
 234 Date: Mon Sep 2 09:54:57 2013 -0400
 235 Mon premier commit
 236 (17:12:01) davin.baragiotta: a-ha!
 237 (17:12:11) davin.baragiotta: on voit une liste de commits, avec leur hash complet
 238 (17:12:32) davin.baragiotta: l'auteur... (modifier votre .gitconfig dans votre home si votre nom n'apparait pas correctement)
 239 (17:12:53) davin.baragiotta: la date : wouhou! c'est mon anniversaire! (c'est vrai mais pas pertinent)
 240 (17:13:00) davin.baragiotta: et dessous : les messages de commit
 241 (17:13:18) davin.baragiotta: on voit que le tronc (master) pousse en ajoutant des commits
 242 (17:13:27) davin.baragiotta: mais pour le voir plus clairement, on a installé gitk
 243 (17:13:39) davin.baragiotta: lancez gitk en ligne de commande :
 244 gitk
 245 (17:14:08) davin.baragiotta: c'est la même information mais présentée graphiquement
 246 (17:14:26) davin.baragiotta: on voit les petits ronds : ce sont les commits
 247 (17:14:32) davin.baragiotta: ils s'empilent
 248 (17:14:52) davin.baragiotta: on vient de voir toutes les commandes sous VERSIONNER EN LOCAL
 249 (17:15:11) davin.baragiotta: on va sauter les parties collaboratives
 250 (17:15:21) davin.baragiotta: mais je veux vous mentionner que tous nos projets, à l'AUF
 251 (17:15:33) davin.baragiotta: se trouvent sur http://git.auf.org
 252 (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
 253 (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
 254 (17:17:08) davin.baragiotta: en fait, y,a seulement 2 choses à savoir de plus pour le travail collaboratif : push, pull
 255 (17:17:30) davin.baragiotta: soit "pousser ces modifications" sur le dépôt central
 256 (17:17:31) davin.baragiotta: ou
 257 (17:17:55) davin.baragiotta: "tirer (pull) les modifications récentes provenant du dépôt central"
 258 (17:17:58) davin.baragiotta: git push
 259 (17:18:00) davin.baragiotta: git pull
 260 (17:18:26) davin.baragiotta: autre commande à savoir, pas si vous ne la retenez pas, git vous la signale dansle contexte : git rm
 261 (17:18:31) davin.baragiotta: oui rm = remove
 262 (17:18:33) davin.baragiotta: donc
 263 (17:18:50) davin.baragiotta: si vous supprimez un fichier dans l'arborescence
 264 (17:19:07) davin.baragiotta: git status va vous le dire... on le fait tiens
 265 (17:19:12) davin.baragiotta: supprimez un de vos fichier
 266 (17:19:20) davin.baragiotta: (je supprime davin.txt)
 267 (17:20:06) davin.baragiotta: (fermez la fenêtre de gitk au besoin)
 268 (17:20:26) davin.baragiotta: j'ai supprimé mon fichier et git status me dit :
 269 giotta@machina:~/projets/ateliers/git/semainetech$ git status
 270 # On branch master
 271 # Changes not staged for commit:
 272 # (use "git add/rm <file>..." to update what will be committed)
 273 # (use "git checkout -- <file>..." to discard changes in working directory)
 274 #
 275 # deleted: davin.txt
 276 #
 277 no changes added to commit (use "git add" and/or "git commit -a")
 278 (17:21:07) davin.baragiotta: le fichier davin.txt a été supprimé de l'arborescence
 279 (17:21:55) davin.baragiotta: on va confirmer à git, qu'on ne veut bien supprimer ce fichier
 280 (17:21:56) davin.baragiotta: # (use "git add/rm <file>..." to update what will be committed)
 281 (17:22:09) davin.baragiotta: donc on fait :
 282 git rm davin.txt
 283 (17:22:30) davin.baragiotta: 
 284 giotta@machina:~/projets/ateliers/git/semainetech$ git rm davin.txt
 285 rm 'davin.txt'
 286 giotta@machina:~/projets/ateliers/git/semainetech$ git status
 287 # On branch master
 288 # Changes to be committed:
 289 # (use "git reset HEAD <file>..." to unstage)
 290 #
 291 # deleted: davin.txt
 292 #
 293 (17:22:46) davin.baragiotta: git comprend maintenant qu'on est prêt à commiter ce changement (ici, une suppression)
 294 (17:22:54) davin.baragiotta: donc on commit.. comme d'habitude
 295 (17:23:28) davin.baragiotta: 
 296 giotta@machina:~/projets/ateliers/git/semainetech$ git commit -a -m "Suppression de fichier davin"
 297 [master f21ded1] Suppression de fichier davin
 298 0 files changed
 299 delete mode 100644 davin.txt
 300 (17:23:56) davin.baragiotta: voilà, mon commit f21ded1 est la version de mon arborescence de semainetech... sans le fichier davin.txt
 301 (17:24:04) davin.baragiotta: plutôt simple au final!
 302 (17:24:14) davin.baragiotta: on regarde le programme
 303 (17:24:22) davin.baragiotta: https://wiki.auf.org/wikiteki/Projet/SemaineTech/2013/Ateliers/Git/Support
 304 (17:25:06) davin.baragiotta: le PROCESSUS DE VERSIONNAGE est donc les commandes de base à savoir... 
 305 incluant celles de push et pull pour travail collaboratif
 306 (17:25:32) davin.baragiotta: pour ce qui est des branches et du travail collaboratif : plsu tard dans cet atelier ou labo-git
 307 (17:26:01) davin.baragiotta: finalement, le WORKFLOW DE DÉVELOPPEMENT concerne plus ceux qui sont appelés à contribuer aux projets SI
 308 (17:26:03) davin.baragiotta: mais
 309 (17:26:21) davin.baragiotta: notre approche a un peu changer par rapport à ce qui est sur cette page...
 310 (17:26:26) davin.baragiotta: on s'en parle au besoin ;)
 311 (17:26:37) davin.baragiotta: CONCLUSION (partie Davin... celle de JC suit)
 312 (17:26:48) davin.baragiotta: on n'a pas de raison de se passer de Git
 313 (17:26:51) davin.baragiotta: c'est simple
 314 (17:26:56) davin.baragiotta: quelques commandes suffisent
 315 (17:27:06) davin.baragiotta: pour vous donner la toute puissance sur les modifications que vous faites
 316 (17:27:15) davin.baragiotta: sur une arboresence de fichier
 317 (17:27:23) davin.baragiotta: quoi, vous ne me croyez pas?
 318 (17:27:24) davin.baragiotta: ok
 319 (17:27:40) davin.baragiotta: supposons que supprimer votre fichier était une grosse bourde
 320 (17:27:44) davin.baragiotta: et que vous en parlez avec JC
 321 (17:28:07) davin.baragiotta: puis il vous dit : remet toute l'arborescence comme elle était AVANT que tu supprimes ton fichier
 322 (17:28:15) davin.baragiotta: git log ou gitk
 323 (17:28:32) davin.baragiotta: 
 324 giotta@machina:~/projets/ateliers/git/semainetech$ git log
 325 commit f21ded178c5d7ca21100d682c4a18fb9e993b621
 326 Author: Davin Baragiotta <davin.baragiotta@auf.org>
 327 Date: Mon Sep 2 10:23:19 2013 -0400
 328 Suppression de fichier davin
 329 commit e01b2957231d8750bd1a5cea000f0963ad1b6860
 330 Author: Davin Baragiotta <davin.baragiotta@auf.org>
 331 Date: Mon Sep 2 10:09:55 2013 -0400
 332 Amorce du code de ce fameux script : il print un truc
 333 commit 078d16b50983723a2dc9e2620c4fde5fe22ff7d3
 334 Author: Davin Baragiotta <davin.baragiotta@auf.org>
 335 Date: Mon Sep 2 09:54:57 2013 -0400
 336 Mon premier commit
 337 (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)
 338 (17:29:30) davin.baragiotta: donc on veut le commit avant
 339 (17:29:45) davin.baragiotta: le commit avant est : e01b29
 340 (17:30:04) davin.baragiotta: on va donc "se déplacer dans l'historique"
 341 (17:30:14) davin.baragiotta: pour revenir à une version antérieure!!!
 342 (17:30:27) davin.baragiotta: commande :
 343 git checkout e01b29
 344 (17:31:03) davin.baragiotta: 
 345 giotta@machina:~/projets/ateliers/git/semainetech$ git checkout e01b29
 346 Note: checking out 'e01b29'.
 347 You are in 'detached HEAD' state. You can look around, make experimental
 348 changes and commit them, and you can discard any commits you make in this
 349 state without impacting any branches by performing another checkout.
 350 If you want to create a new branch to retain commits you create, you may
 351 do so (now or later) by using -b with the checkout command again. Example:
 352 git checkout -b new_branch_name
 353 HEAD is now at e01b295... Amorce du code de ce fameux script : il print un truc
 354 (17:31:13) davin.baragiotta: git status
 355 (17:31:35) davin.baragiotta: 
 356 giotta@machina:~/projets/ateliers/git/semainetech$ git status
 357 # Not currently on any branch.
 358 nothing to commit (working directory clean)
 359 giotta@machina:~/projets/ateliers/git/semainetech$ git log
 360 commit e01b2957231d8750bd1a5cea000f0963ad1b6860
 361 Author: Davin Baragiotta <davin.baragiotta@auf.org>
 362 Date: Mon Sep 2 10:09:55 2013 -0400
 363 Amorce du code de ce fameux script : il print un truc
 364 commit 078d16b50983723a2dc9e2620c4fde5fe22ff7d3
 365 Author: Davin Baragiotta <davin.baragiotta@auf.org>
 366 Date: Mon Sep 2 09:54:57 2013 -0400
 367 Mon premier commit
 368 (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
 369 (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)
 370 (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
 371 (17:33:15) davin.baragiotta: questions?
 372 (17:34:46) yemen.sayour: jusqu'à maintenant non :)
 373 (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
 374 (17:36:35) davin.baragiotta: et aussi, si vous aimez l'Open Source... énormement de choses se passe sur Git Hub
 375 (17:36:45) davin.baragiotta: http://github.com
 376 (17:37:05) davin.baragiotta: créez-vous un utilisateur et codez, participez! :)
 377 (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
 378 (17:37:39) davin.baragiotta: progfou: à toi
 379 (17:37:58) progfou: ok
 380 (17:38:02) progfou: donc
 381 (17:38:09) progfou: je vais maintenant vous parler d'un exemple concret d'utilisation de git
 382 (17:38:17) progfou: mais pour autre chose que du développement logiciel ! :-)
 383 (17:38:42) progfou: ce dont je vais vous parler est du suivi de configuration de serveur via git
 384 (17:38:52) progfou: selon la méthode documentée sur https://wiki.auf.org/wikiteki/Git/SuiviDeConfiguration
 385 (17:39:22) progfou: je ne vais pas vous refaire un laïus sur les commandes, vous venez de les voir
 386 (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
 387 (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
 388 (17:40:16) progfou: attention : ne pas confondre avec un IDS (système de détection d'intrusion)
 389 (17:40:37) progfou: ici je parle d'un suivi volontaire et éventuellement collaboratif, je ne parle pas de sécurité
 390 (17:40:59) progfou: pour ce faire, on utilise git, qu'on installe au niveau de la racine du serveur
 391 (17:41:24) progfou: c'est à dit qu'on aura un dossier « caché » /.git contenant notre historique
 392 (17:41:32) progfou: le fait de l'installer à la racine permet de suivre potentiellement la totalité des fichiers du serveurs !
 393 (17:41:50) progfou: mais ce n'est évidement pas ce qu'on veut
 394 (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
 395 (17:42:24) progfou: on y ajoute aussi quelques dossiers spécifiques, comme le /boot pour la configuration de grub
 396 (17:42:36) progfou: ou encore le /var/chroot/bind pour les fichiers de bind9 en mode chroot
 397 (17:42:46) progfou: et d'autres encore
 398 (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
 399 (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)
 400 (17:43:51) progfou: ce paquet s'occupe de tout ce qu'il faut pour être immédiatement utilisable, ou presque…
 401 (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
 402 (17:44:34) progfou: typiquement dans nos serveurs virtuels, un exim4 de base configuré pour envoyer vers un smarthost
 403 (17:45:03) progfou: ce service d'envoi de courriels est aussi nécessaire pour une bonne gestion du serveur de toutes façons
 404 (17:45:15) progfou: ne serait-ce que pour recevoir les résultat des tâches planifiées en cron !
 405 (17:45:43) progfou: dès l'installation du paquet, un premier commit est automatiquement fait avec la configuration actuelle du serveur
 406 (17:46:04) progfou: et à chaque commit, y compris ce commit initial, un courriel est envoyé pour informer des changements enregistrés
 407 (17:46:36) progfou: le courriel est envoyé à root+git par défaut, ça se change dans /etc/auf-git-etc/hooks/post-commit
 408 (17:47:16) progfou: (et bientôt dans /etc/auf-git-etc/config ;-) )
 409 (17:47:38) progfou: par ailleurs, si des modifications sont faites et ne sont pas enregistrées dans git
 410 (17:47:51) progfou: un cron s'exécutant à 10h et 16h va vous envoyer un courriel avec la liste des changements restant à valider
 411 (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
 412 (17:49:07) progfou: (en attendant vous pouvez aussi faire un alias de root+git vers votre adél dans /etc/aliases)
 413 (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
 414 (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
 415 (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
 416 (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 !
 417 (17:51:46) progfou: des questions ? ;-)
 418 (17:52:51) ongolaBoy: QUESTION : différence entre git reset et git revert ?
 419 (17:53:28) progfou: davin.baragiotta, c'est plus sur le plan des commandes, tu veux la prendre ?
 420 (17:53:38) davin.baragiotta: oui
 421 (17:53:59) davin.baragiotta: je les connais pas toutes, mais on utilise reset
 422 (17:54:25) davin.baragiotta: en fait, faudrait lire la doc, en toute honnêteté...
 423 (17:55:01) davin.baragiotta: ok je crois que progfou sait : go! ;)
 424 (17:55:01) progfou: en fait, oui, c'est expliqué dans le man git-revert :
 425 (17:55:12) progfou: un git reset est un peu violent
 426 (17:55:23) progfou: on retourne en arrière, en perdant l'information de notre avancée précédente
 427 (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
 428 (17:56:12) progfou: donc avec git-revert on garde toute l'historique, y compris celle du retour en arrière
 429 (17:56:21) davin.baragiotta: y'a aussi rebase ;)
 430 (17:56:25) progfou: tandis qu'avec git reset on perd l'info du retour en arrière
 431 (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)
 432 (17:57:26) progfou: c'est vrai qu'avec notre suivi des serveurs on pourrait faire un revert
 433 (17:57:47) progfou: on garderait ainsi la trace de la tentative de config et du retour en arrière
 434 (17:58:01) progfou: en fait, moi-même, j'utilise rarement git reset
 435 (17:58:14) progfou: mais il est aussi rare que je retourne en arrière ;)
 436 (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à
 437 (17:59:15) progfou: autres questions ? pour Davin ou moi
 438 (18:00:10) progfou: je rends la main à Davin
 439 (18:00:25) davin.baragiotta: bon alors, pour tous les champions dans cette salle qui suivent vraiment, on va s'amuser à collaborer!
 440 (18:00:53) davin.baragiotta: svp, dans le salon tech, tapez "." pour montrer que vous n'êtes pas encore en pause café ;)
 441 (18:01:04) davin.baragiotta: (surtout pour savoir avec qui je vais collaborer)
 442 (18:01:30) claudine.mosozi: .
 443 (18:02:15) davin.baragiotta: ok, pendant que les points s'ajoutent dans le salon tech... on va commencer tout de suite à collaborer
 444 (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)
 445 (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
 446 (18:03:34) davin.baragiotta: cd ..
 447 (18:03:54) davin.baragiotta: la commande pour cloner est dans notre doc AUF
 448 (18:04:10) davin.baragiotta: dépendamment si on est dans ou hors RPV, on tape pas la même chose
 449 (18:04:21) davin.baragiotta: http://wiki.auf.org/wikiteki/Git/D%C3%A9veloppeur
 450 (18:04:35) davin.baragiotta: sous "Participer à un projet"
 451 (18:04:49) davin.baragiotta: alors, je suppose que vous êtes dans RPV :
 452 (18:05:00) davin.baragiotta: $ git clone ssh://gitosis@git.auf/bacasable
 453 (18:05:12) davin.baragiotta: bacasable = nom du dépôt git qu'on veut cloner
 454 (18:05:37) davin.baragiotta: si on va sur http://git.auf.org
 455 (18:05:47) davin.baragiotta: et qu'on clique sur le projet bacasable
 456 (18:05:51) davin.baragiotta: http://git.auf.org/?p=bacasable.git;a=summary
 457 (18:06:19) davin.baragiotta: on voit que ce pauvre dépôt
 458 (18:06:43) davin.baragiotta: n'a eu qu'un seul commit depuis le commit initial (root-commit) le 2011-08-31 ;)
 459 (18:07:07) davin.baragiotta: tout le monde a cloné? alors on se déplace dans le répertoire bacasable
 460 (18:07:27) davin.baragiotta: premier réflexe? git status
 461 (18:07:35) davin.baragiotta: (on vient de cloner, tout devrait être beau)
 462 (18:07:49) davin.baragiotta: 
 463 giotta@machina:~/projets/ateliers/git/bacasable$ git status
 464 # On branch master
 465 nothing to commit (working directory clean)
 466 (18:07:59) davin.baragiotta: on est sûr master... l'arbo est propre
 467 (18:08:30) davin.baragiotta: ok, svp : ajoutez un fichier nommé avec votre nom, ex.: "davin" pour moi, "claudine", etc.
 468 (18:09:03) davin.baragiotta: ensuite? git status!
 469 (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)
 470 (18:09:59) davin.baragiotta: ajoutez-le au suivi avec "git agg nom-de-fichier" ou "git add ." (pour ajouter toutes les nouveautés)
 471 (18:10:31) davin.baragiotta: donc
 472 * git status
 473 * éditer
 474 * git add .
 475 * git commit -a -m "Commit de untel"
 476 (18:10:40) davin.baragiotta: finalement, commit ce changement
 477 (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)
 478 (18:11:55) davin.baragiotta: le git de bacasable ne voit rien... évidemment
 479 (18:12:09) davin.baragiotta: vous avez commité
 480 (18:12:19) davin.baragiotta: vous êtes prêt à partager vos modifs
 481 (18:12:25) davin.baragiotta: git push
 482 (18:13:31) davin.baragiotta: moi quand j'ai fait git push
 483 (18:13:33) davin.baragiotta: j'ai eu :
 484 (18:13:34) davin.baragiotta: 
 485 giotta@machina:~/projets/ateliers/git/bacasable$ git push
 486 To gitosis@git.auf.org:bacasable.git
 487 ! [rejected] master -> master (non-fast-forward)
 488 error: failed to push some refs to 'gitosis@git.auf.org:bacasable.git'
 489 To prevent you from losing history, non-fast-forward updates were rejected
 490 Merge the remote changes (e.g. 'git pull') before pushing again. See the
 491 'Note about fast-forwards' section of 'git push --help' for details.
 492 (18:13:37) davin.baragiotta: :)
 493 (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"
 494 (18:14:19) davin.baragiotta: sékou et willy m'ont pris de vitesse! ;)
 495 (18:14:26) davin.baragiotta: http://git.auf.org/?p=bacasable.git;a=summary
 496 (18:14:29) davin.baragiotta: pareil pour vous?
 497 (18:14:33) davin.baragiotta: la solution : git pull
 498 (18:14:44) davin.baragiotta: pour récupérer la version la plus récente du serveur
 499 (18:15:08) davin.baragiotta: automatiquement : git va merger (fusionner) votre version avec la dernière version du serveur
 500 (18:15:49) davin.baragiotta: voilà, j'ai pu collaborer : http://git.auf.org/?p=bacasable.git;a=summary
 501 (18:15:55) davin.baragiotta: mon commit = Davin collabore
 502 (18:16:27) davin.baragiotta: j'attends patrick, hassane, yemen, claudine et tout ceux qui ont dit qui suivait dans salon tech :
 503 (18:16:33) davin.baragiotta: git pull...
 504 (18:16:35) davin.baragiotta: git push
 505 (18:17:16) davin.baragiotta: ok, on commence à manquer de temps
 506 (18:17:25) davin.baragiotta: pour conclure cette mini-collaboration
 507 (18:17:36) davin.baragiotta: (où chacun a ajouté un fichier)
 508 (18:17:52) davin.baragiotta: regardez le commit final... celui en haut de la pile... en haut du tronc master
 509 (18:17:59) davin.baragiotta: http://git.auf.org/?p=bacasable.git;a=summary
 510 (18:18:14) davin.baragiotta: cliquez sur tree pour voir l'arborescence de fichier
 511 (18:18:24) davin.baragiotta: http://git.auf.org/?p=bacasable.git;a=tree;h=7bb0d38a9741d09f2e66ca73790573d186aa3ec0;hb=7bb0d38a9741d09f2e66ca73790573d186aa3ec0
 512 (18:18:39) davin.baragiotta: on voit que co-existent les fichiers de davin, sekou et willy
 513 (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
 514 (18:19:12) davin.baragiotta: mais on peut travailler sur le même fichier
 515 (18:19:24) davin.baragiotta: git va faire un merge automatique (fusion)....
 516 (18:19:28) davin.baragiotta: .... si il le peut.
 517 (18:19:44) davin.baragiotta: Sinon : ce sera un conflit qu'il faudra régler manuellement
 518 (18:19:59) davin.baragiotta: i.e : choisir le BON contenu entre les 2 contenus proposés
 519 (18:20:26) davin.baragiotta: finalement, resterait à voir les branches pour vraiment voir toute la puissance de git
 520 (18:20:32) davin.baragiotta: vous voulez jouez?
 521 (18:20:47) davin.baragiotta: rendez-vous dans le salon "labo-git"... c'est branché!
 522 (18:20:50) davin.baragiotta: ;)
 523 (18:21:06) davin.baragiotta: ====================== FIN atelier git =========================

Projet/SemaineTech/2013/Ateliers/Git/Archive (dernière édition le 2013-09-03 08:27:08 par YemenSayour)