Compare commits

..

16 Commits

1013 changed files with 1161 additions and 25271 deletions

2
.gitignore vendored
View File

@ -14,5 +14,3 @@
build-messages-*.txt build-messages-*.txt
plans_de_formation.tar.gz plans_de_formation.tar.gz
.~lock* .~lock*
*.pygtex
*.pygstyle

233
README.md
View File

@ -36,236 +36,3 @@ L'ensemble des plans est regroupé et compressé sous le nom plans_de_formation.
- compléter ces fichiers - compléter ces fichiers
Penser à générer de nouveau les plans Penser à générer de nouveau les plans
# Révision du processus de production des supports de formation
## Organisation du dépôt
Le dépôt encourage autant que possible la réutilisation et la mutualisation du contenu.
Les éléments de contenu à inclure sont dans les dossiers _content_ et _slides_ pour les documents de type _article_ et _beamer_ respectivement.
Les figures sont placées à part dans le répertoire _figures_.
Ces éléments de contenu sont inclus dans des fichiers principaux placés dans le répertoire _presentations_.
Le répertoire _templates_ contient des modèles de document au format jinja utilisés par le script _setup_main_tex_file.py_.
## setup_main_tex_file.py
Le script setup_main_tex_file.py permet dorganiser la procédure en proposant :
- la création des fichiers maîtres pour une formation ;
- la création des fichiers de contenu à inclure si nécessaire ;
- la mise à jour du plan de formation en fonction des éléments inclus ;
- la compilation des trois documents (diaporama, support de cours et programme) si lapplication rubber est installée.
Pour chacune de ses sous-étapes, le script propose une sous-commande.
### Démarrer une formation (sous-commande init)
```
./setup_main_tex_file.py init -f beamer -a Cadoles -t "Formation personnalisée Scribe" -c "Conseil départemental" -d modules_EOLE_envole/Conseil_Départemental -i Cadoles -l cc-by-sa -n CD_Formation_Scribe
```
Les options obligatoires sont :
- le format (beamer ou article) : -f
- le titre qui apparaîtra sur la page de garde ou la première diapositive : -t
- lemplacement, soit le sous-répertoire du répertoire presentations : -d
- le nom du fichier (sans lextension) qui sera créé à lemplacement indiqué.
Les autres options prendront des valeurs par défaut si elles ne sont pas fournies :
- lauteur est Cadoles par défaut
- linstitut, qui détermine les logos à intégrer, est Cadoles par défaut
- la licence est la Creative Commons CC-BY-SA v2 par défaut
- le client est XXX par défaut
À noter, pour la licence, que seule la CC-BY-SA v2 est disponible dans les contenus à inclure pour linstant.
Lexécution de la commande précédente produit le fichier presentations/modules_EOLE_envole/Conseil_Départemental/diaporama.tex.
### Construire le contenu dune formation
On peut construire une formation en éditant le fichier maître créé précédemment.
Ce fichier présente la configuration du module skb
```
\documentclass{beamer}
\usepackage{skb}
\skbconfig[
root = ../../../,
rep = content,
pub = presentations,
fig = figures,
sli = slides,
acr = database/acr,
bib = database/bib
]{skblocal.tex}
```
Ces variables sont utilisées pour linclusion des éléments de contenu répartis dans les différents sous-dossier du dépôt.
Le corps du document qui est principalement intéressant est minimaliste au départ
```
\begin{document}
\skbinput[from=sli]{style/title}
% Corps de la formation
%\skbinput[from=sli]{}
\skbinput[from=sli]{licences/license-cc-by-sa-2.0}
\end{document}
```
Pour ajouter du contenu, on ajoute principalement des directives skbinput avec loption from=sli (pour les documents de type beamer) et lemplacement du fichier à partir du répertoire slides (puisque from=sli et sli = slides dans la configuration skb)
On peut également structurer la présentation en intercalant des directives section, subsection, etc.
Ces directives section, subsection, ainsi que le contenu inclu permet ensuite de construire le plan.
Les directives skbinput peuvent pointer vers un fichier inexistant dans un premier temps (une tentative de compilation du document dans cet état échouera bien évidemment).
### Consolider le contenu dune formation (sous-commande update)
Par exemple, avec le corps de document suivant
```
\section{Introduction}
\skbinput[from=sli]{modules_EOLE_envole/commun/intro}
\skbinput[from=sli]{modules_EOLE_envole/commun/nouveautes27}
\skbinput[from=sli]{modules_EOLE_envole/commun/panorama-module}
\skbinput[from=sli]{modules_EOLE_envole/scribe/description}
\section{Outils pédagogique Scribe}
\skbinput[from=sli]{modules_EOLE_envole/scribeAD/eop}
\skbinput[from=sli]{modules_EOLE_envole/scribeAD/eop-pratique}
\skbinput[from=sli]{modules_EOLE_envole/scribeAD/veyon}
\skbinput[from=sli]{modules_EOLE_envole/scribeAD/veyon-pratique}
\section{Les quatre phases}
\skbinput[from=sli]{modules_EOLE_envole/commun/quatre_phases}
\skbinput[from=sli]{modules_EOLE_envole/eolebase/virtualbox}
\skbinput[from=sli]{modules_EOLE_envole/commun/quatre_phases-pratique}
\skbinput[from=sli]{modules_EOLE_envole/commun/configuration-pratique}
\skbinput[from=sli]{modules_EOLE_envole/commun/02-gen_config}
\skbinput[from=sli]{modules_EOLE_envole/commun/instance-pratique}
\skbinput[from=sli]{modules_EOLE_envole/commun/du-contenu-inexistant}
```
La plupart du contenu existe déjà.
Seule la dernière inclusion poserait problème lors de la compilation.
Pour permettre de lancer des compilations sans attendre que tout le contenu soit prêt, le script propose une sous commande qui prépare le terrain en créant les fichiers de contenu manquant.
```
./setup_main_tex_file.py update -d modules_EOLE_envole/Conseil_Départemental
```
Le seul argument de cette sous-commande _update_ permet didentifier le sous-répertoire de _presentations_ contenant le fichier maître _diaporama.tex_.
Cette commande traite toutes les directives skbinput et créer le fichier à inclure sil nexiste pas déjà.
Elle affiche la liste des fichiers créés en retour de commande.
```
$ ./setup_main_tex_file.py update -d modules_EOLE_envole/Conseil_Départemental/
slides/modules_EOLE_envole/commun/du-contenu-inexistant.tex
```
Ce fichier contient du texte permettant de le repérer facilement dans le document généré
```
\begin{frame}
\frametitle{du-contenu-inexistant.tex}
fichier slides/modules\_EOLE\_envole/commun/du-contenu-inexistant.tex à éditer
% contenu (pas trop long) de la diapositive
\end{frame}
```
### Affichage du plan (sous-commande outline)
La sous-commande _outline_ permet de créer un sommaire du diaporama sous la forme de listes imbriquées et de linclure dans le programme.
Il est possible de restreindre le nombre de niveaux de titre utilisé pour le plan avec loption -l.
```
./setup_main_tex_file.py outline -d modules_EOLE_envole/Conseil_Départemental
```
```
Introduction
EOLE
En quatre points
Ce qui caractérise EOLE
Nouveautés 2.7
Modules disponibles en 2.7.0
Modules disponibles à partir de la 2.7.1
Eclair
Zéphir/Sentinelle
Zéphir
Seshat
Thot
Seth
Hapy
Scribe
Outils pédagogique Scribe
EOP
Mise en pratique
Veyon
Les fonctionnalités
Préparation
Mise en pratique
Les quatre phases
La phase d'installation
La phase de configuration
La phase d'instanciation
La phase dinstanciation
les étapes de linstanciation
Les comptes administrateurs locaux
Les mots de passe
La phase d'administration
La phase dadministration
VirtualBox
Configuration de la VM Eolebase
Configuration autonome
Nature dune configuration
Types de variables
Contraintes
Application de configuration du module
Les modes de lapplication de configuration du module
Les informations de debug
sauvegarde et chargement de la configuration
Instance
```
### Génération du document
Comme alternative à la recette Makefile pas encore adaptée pour la compilation de ce nouveau format, on peut utiliser la commande rubber (paquet supplémentaire à installer)
```
rubber --inplace --module=xelatex presentations/modules_EOLE_envole/Conseil_Départemental/CD_Formation_Scribe.tex
```
La sous-commande _compile_ appelle rubber pour compiler les trois documents : diaporama, support et programme.
```
./setup_main_tex_file.py compile -d modules_EOLE_envole/Conseil_Départemental
```
Cette sous-commande nest disponible que si la commande rubber est installé et accessible (test du retour rubber --version).
### Intégration avec git
Le script entreprend des actions complémentaires lorsque il détecte un environnement _git_.
#### Séparation et isolation des formations
La proposition est la suivante : séparer le contenu générique (contenu inclu dans les formations) et les fichiers maîtres spécifiques à des formations.
Une branche (master en loccurence) est utilisée comme pivot et contient les fragments de formations.
Chaque formation spécifique est isolée dans une branche propre.
De fait, le contenu du dossier _presentations_ est commité dans la branche spécifique, tandis que le reste (_content_ et _slides_ notamment) est commité dans _master_. Un hook git local est proposé pour limiter les commits dans les mauvaises branches, basé sur les chemins des fichiers créés ou modifiés.
Le script permet dautomatiser une partie de ce découpage, notamment la création des branches spécifiques et le commit dans les branches appropriées selon les actions entreprises.
#### action dinitialisation
Linitialisation doit être effectué depuis la branche _master_ et exécute les actions suivantes :
- création dune branche nommée daprès le répertoire de destination et suffixée avec _xelatex/_
- création des fichiers propres à la formation (fichiers maîtres pour le diaporama, le support, le programme, etc.)
- commit de ces fichiers dans la branche spécifique.
#### action de mise à jour du programme
Comme tout ce qui implique la mise à jour ou la création de contenu dans le répertoire _presentations_, le produit de la mise à jour du programme est commité dans la branche spécifique.

View File

@ -1,5 +0,0 @@
\begin{frame}
\begin{exampleblock}{}
Des questions ?
\end{exampleblock}
\end{frame}

View File

@ -1,11 +0,0 @@
\section{Licence}
Cette œuvre est mise à disposition sous licence \href{http://creativecommons.org/licenses/by-nc-sa/2.0/fr/}{\textsc{cc-by-sa-2.0}}
\begin{itemize}
\item Attribution
\item Partage dans les Mêmes Conditions 2.0
\item France
\end{itemize}
Pour voir une copie de cette licence, visitez
\href{http://creativecommons.org/licenses/by-sa/2.0/fr/}{http://creativecommons.org/licenses/by-sa/2.0/fr/}
ou écrivez à Creative Commons, 444 Castro Street, Suite 900,
Mountain View, California, 94041, USA.

View File

@ -1,7 +0,0 @@
\skbheading{Explorer la structure dun dictionnaire Creole}
Un dictionnaire Creole est une description de la configuration à laide du format de fichier \emph{xml}.
fichier content/modules\_EOLE\_envole/exercices/creole-dictionnaire-structure.tex à éditer
\inputminted[]{xml}{./content/modules_EOLE_envole/exercices/creole.dtd}

View File

@ -1,237 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!-- ===================================================================== -->
<!-- Definition de la DTD du fichier creole -->
<!-- ===================================================================== -->
<!--
# Conception :
# Eole (http://eole.orion.education.fr)
# Copyright (C) 2005-2018
# distribue sous la licence GPL-2
# En attendant une traduction officielle de la GPL, la notice de
# copyright demeure en anglais.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
# Se reporter a la documentation envoyee avec le programme pour la notice.
-->
<!--================ -->
<!-- root element -->
<!-- =============== -->
<!ELEMENT creole (containers | files | family_action | variables | constraints | help)*>
<!-- ============== -->
<!-- files element -->
<!-- ============== -->
<!ELEMENT family_action (action)>
<!ATTLIST family_action name CDATA #REQUIRED>
<!ATTLIST family_action description CDATA #IMPLIED>
<!ATTLIST family_action color CDATA #IMPLIED>
<!ATTLIST family_action image CDATA #IMPLIED>
<!ELEMENT action ((input* | profile* | ewtapp* | tag* | saltaction*)*)>
<!ATTLIST action type (form|custom|external|reader|apache) "custom">
<!ATTLIST action title CDATA #REQUIRED>
<!ATTLIST action description CDATA #REQUIRED>
<!ATTLIST action rewrite CDATA #IMPLIED>
<!ATTLIST action image CDATA #IMPLIED>
<!ATTLIST action actionlist CDATA #IMPLIED>
<!-- for apache action -->
<!ATTLIST action apache_path CDATA #IMPLIED>
<!ATTLIST action apache_path_type (FilenameOption|SymLinkOption) "FilenameOption">
<!-- for external action -->
<!ATTLIST action url CDATA #IMPLIED>
<!ATTLIST action url_type (URLOption|SymLinkOption) "URLOption">
<!-- for form action -->
<!ATTLIST action save (True|False) "False">
<!ELEMENT files ((service* | service_access* | service_restriction* | package* | file*)*)>
<!ELEMENT containers ((container* | all*)*)>
<!ELEMENT container ((service* | service_access* | service_restriction* | interface* | package* | file* | disknod* | host* | fstab*)*) >
<!ATTLIST container name CDATA #REQUIRED >
<!ATTLIST container id CDATA #IMPLIED >
<!ATTLIST container group CDATA #IMPLIED >
<!ELEMENT all ((service* | interface* | package* | file* | disknod* | host* | fstab*)*) >
<!ELEMENT service (#PCDATA)>
<!ATTLIST service servicelist CDATA #IMPLIED >
<!ATTLIST service instance_mode (when_container|when_no_container|always) "always">
<!ATTLIST service method (systemd|upstart|apache|network|restartonly) "systemd">
<!ATTLIST service redefine (True|False) "False">
<!ELEMENT input (#PCDATA)>
<!ELEMENT profile (#PCDATA)>
<!ELEMENT ewtapp (#PCDATA)>
<!ELEMENT tag (#PCDATA)>
<!ELEMENT saltaction (#PCDATA)>
<!ELEMENT service_access ((port | tcpwrapper)*)>
<!ATTLIST service_access service CDATA #REQUIRED >
<!ELEMENT port (#PCDATA)> <!--port_type-->
<!ATTLIST port port_type (PortOption|SymLinkOption) "PortOption">
<!ATTLIST port service_accesslist CDATA #IMPLIED >
<!ATTLIST port protocol (tcp|udp) "tcp">
<!ELEMENT tcpwrapper (#PCDATA)> <!--tcpwrapper_type-->
<!ATTLIST tcpwrapper tcpwrapper_type (UnicodeOption|SymLinkOption) "UnicodeOption">
<!ATTLIST tcpwrapper service_accesslist CDATA #IMPLIED >
<!ELEMENT service_restriction (ip*)>
<!ATTLIST service_restriction service CDATA #REQUIRED >
<!ELEMENT ip (#PCDATA)> <!--ip_type-->
<!ATTLIST ip service_restrictionlist CDATA #IMPLIED >
<!ATTLIST ip ip_type (NetworkOption|SymLinkOption) "NetworkOption">
<!ATTLIST ip interface_type (UnicodeOption|SymLinkOption) "UnicodeOption">
<!ATTLIST ip interface CDATA #REQUIRED> <!--interface_type-->
<!ATTLIST ip netmask_type (NetmaskOption|SymLinkOption) "NetmaskOption">
<!ATTLIST ip netmask CDATA "255.255.255.255"> <!--netmask_type-->
<!ELEMENT interface (#PCDATA)>
<!ATTLIST interface interfacelist CDATA #IMPLIED >
<!ATTLIST interface linkto CDATA #REQUIRED >
<!ATTLIST interface ip CDATA #REQUIRED> <!--SymLinkOption-->
<!ATTLIST interface ip_type (SymLinkOption) "SymLinkOption">
<!ATTLIST interface mask CDATA #REQUIRED> <!--SymLinkOption-->
<!ATTLIST interface mask_type (SymLinkOption) "SymLinkOption">
<!ATTLIST interface bcast CDATA #IMPLIED> <!--SymLinkOption-->
<!ATTLIST interface bcast_type (SymLinkOption) "SymLinkOption">
<!ATTLIST interface gateway CDATA #IMPLIED> <!--SymLinkOption-->
<!ATTLIST interface gateway_type (SymLinkOption) "SymLinkOption">
<!ATTLIST interface method (bridge|macvlan) "macvlan" >
<!ATTLIST interface redefine (True|False) "False">
<!ELEMENT host EMPTY >
<!ATTLIST host hostlist CDATA #IMPLIED >
<!ATTLIST host name CDATA #REQUIRED > <!--SymLinkOption-->
<!ATTLIST host name_type (SymLinkOption) "SymLinkOption">
<!ATTLIST host ip CDATA #REQUIRED > <!--SymLinkOption-->
<!ATTLIST host ip_type (SymLinkOption) "SymLinkOption">
<!ATTLIST host crossed (True|False) "True" >
<!ATTLIST host instance_mode (when_container|when_no_container|always) "always">
<!ATTLIST host comment CDATA #IMPLIED >
<!ELEMENT fstab EMPTY >
<!ATTLIST fstab name CDATA #REQUIRED> <!--name_type-->
<!ATTLIST fstab name_type (FilenameOption|SymLinkOption) "FilenameOption">
<!ATTLIST fstab type (bind|normal) "bind">
<!ATTLIST fstab fstype (auto|ext3|ext4|nfs|smb) "auto">
<!ATTLIST fstab mount_point CDATA #IMPLIED> <!--mount_point_type-->
<!ATTLIST fstab mount_point_type (FilenameOption|SymLinkOption) "FilenameOption">
<!ATTLIST fstab options CDATA #IMPLIED>
<!ATTLIST fstab checks CDATA #IMPLIED>
<!ATTLIST fstab fstablist CDATA #IMPLIED>
<!ATTLIST fstab instance_mode (when_container|when_no_container|always) "when_container">
<!ELEMENT package (#PCDATA)>
<!ATTLIST package instance_mode (when_container|when_no_container|always) "always">
<!ELEMENT disknod (#PCDATA)>
<!ELEMENT file EMPTY>
<!ATTLIST file name CDATA #REQUIRED >
<!ATTLIST file name_type (UnicodeOption|SymLinkOption) "UnicodeOption">
<!ATTLIST file source CDATA #IMPLIED>
<!ATTLIST file mode CDATA #IMPLIED >
<!ATTLIST file owner CDATA #IMPLIED >
<!ATTLIST file group CDATA #IMPLIED >
<!ATTLIST file filelist CDATA #IMPLIED >
<!ATTLIST file mkdir (True|False) "False">
<!ATTLIST file instance_mode (when_container|when_no_container|always) "always">
<!ATTLIST file rm (True|False) "False">
<!ATTLIST file del_comment CDATA #IMPLIED >
<!ATTLIST file redefine (True|False) "False">
<!ELEMENT variables (family*, separators*)>
<!ELEMENT family (#PCDATA | variable)*>
<!ATTLIST family name CDATA #REQUIRED>
<!ATTLIST family description CDATA #IMPLIED>
<!ATTLIST family mode (basic|normal|expert) "basic">
<!ATTLIST family icon CDATA #IMPLIED>
<!ATTLIST family hidden (True|False) "False">
<!ATTLIST family dynamic CDATA #IMPLIED>
<!ELEMENT variable (#PCDATA | value)*>
<!ATTLIST variable name CDATA #REQUIRED>
<!ATTLIST variable type CDATA #IMPLIED>
<!ATTLIST variable description CDATA #IMPLIED>
<!ATTLIST variable hidden (True|False) "False">
<!ATTLIST variable disabled (True|False) "False">
<!ATTLIST variable multi (True|False) "False">
<!ATTLIST variable redefine (True|False) "False">
<!ATTLIST variable exists (True|False) "True">
<!ATTLIST variable mandatory (True|False) "False">
<!ATTLIST variable auto_freeze (True|False) "False">
<!ATTLIST variable auto_save (True|False) "False">
<!ATTLIST variable mode (basic|normal|expert) "normal">
<!ATTLIST variable remove_check (True|False) "False">
<!ATTLIST variable remove_condition (True|False) "False">
<!ELEMENT separators (separator*)>
<!ELEMENT separator (#PCDATA)>
<!ATTLIST separator name CDATA #REQUIRED>
<!ATTLIST separator never_hidden CDATA #IMPLIED>
<!ELEMENT value (#PCDATA)>
<!ELEMENT constraints ((fill* | check* | condition* | auto* | group*)*)>
<!ELEMENT fill (param*)>
<!ATTLIST fill name CDATA #REQUIRED>
<!ATTLIST fill target CDATA #REQUIRED>
<!ELEMENT check (param*)>
<!ATTLIST check name CDATA #REQUIRED>
<!ATTLIST check target CDATA #REQUIRED>
<!ATTLIST check level (error|warning) "error">
<!ELEMENT auto ((param)*)>
<!ATTLIST auto name CDATA #REQUIRED>
<!ATTLIST auto target CDATA #REQUIRED>
<!ELEMENT condition ((target | param)+ )>
<!ATTLIST condition name CDATA #REQUIRED>
<!ATTLIST condition source CDATA #REQUIRED>
<!ATTLIST condition fallback (True|False) "False">
<!ELEMENT group (slave+)>
<!ATTLIST group master CDATA #REQUIRED>
<!ATTLIST group description CDATA #IMPLIED>
<!ELEMENT param (#PCDATA)>
<!ATTLIST param type (string|eole|number|container|context|python) "string">
<!ATTLIST param name CDATA #IMPLIED>
<!ATTLIST param hidden (True|False) "True">
<!ATTLIST param optional (True|False) "False">
<!ELEMENT target (#PCDATA)>
<!ATTLIST target type (family|filelist|servicelist|interfacelist|variable|service_accesslist|service_restrictionlist|hostlist|fstablist|actionlist) "variable">
<!ATTLIST target optional (True|False) "False">
<!ELEMENT slave (#PCDATA)>
<!ELEMENT help ((variable* | family*)*)>

View File

@ -1,2 +0,0 @@
\skbheading{vnstat-activation.tex}
fichier content/modules\_EOLE\_envole/exercices/vnstat-activation.tex à éditer

View File

@ -1,2 +0,0 @@
\skbheading{vnstat-contrainte.tex}
fichier content/modules\_EOLE\_envole/exercices/vnstat-contrainte.tex à éditer

View File

@ -1,2 +0,0 @@
\skbheading{vnstat-documentation.tex}
fichier content/modules\_EOLE\_envole/exercices/vnstat-documentation.tex à éditer

View File

@ -1,2 +0,0 @@
\skbheading{vnstat-gestion-reseau.tex}
fichier content/modules\_EOLE\_envole/exercices/vnstat-gestion-reseau.tex à éditer

View File

@ -1,2 +0,0 @@
\skbheading{vnstat-gestion-service.tex}
fichier content/modules\_EOLE\_envole/exercices/vnstat-gestion-service.tex à éditer

View File

@ -1,2 +0,0 @@
\skbheading{vnstat-template.tex}
fichier content/modules\_EOLE\_envole/exercices/vnstat-template.tex à éditer

View File

@ -1,16 +0,0 @@
#!/bin/bash
#set -e
. /usr/lib/eole/diagnose.sh
EchoGras "*** Service de statistique réseau"
if [ "$(CreoleGet activer_vnstat)" = "oui" ]; then
TestPid vnStat vnstatd
echo
vnstat
else
Inactif vnStat
fi
echo
exit 0

View File

@ -1,40 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<creole>
<files>
<file filelist='vnstat' name='etc/vnstat.conf'/>
<service servicelist='vnstat'>vnstat</service>
<service_access service='vnstat'>
<port>8888</port>
<tcpwrapper>vnstat</tcpwrapper>
</service_access>
<service_restriction service='vnstat'>
<ip interface='auto' netmask='255.255.255.0'>192.168.56.101</ip>
</service_restriction>
</files>
<variables>
<family name='services'>
<variable name='activer_vnstat' type='oui/non' description='Activer le service vnStat'>
<value>oui</value>
</variable>
</family>
<family name='vnstat'>
<variable name='vnstat_interface' type='string' description='Numéro de linterface par défaut de vnStat' mandatory='True' multi='True'/>
<variable name='vnstat_user' type='unix_user' description='Nom dutilisateur' mode='expert'/>
<variable name='vnstat_group' type='unix_user' description='Nom du groupe' mode='expert'/>
</family>
</variables>
<constraints>
<check name='valid_enum' target='vnstat_interface'>
<param>['0', '1', '2', '3', '4']</param>
</check>
<fill name='calc_val' target='vnstat_group'>
<param type='eole' name='valeur'>vnstat_user</param>
</fill>
<condition name='disabled_if_in' source='activer_vnstat'>
<param>non</param>
<target type='family'>vnstat</target>
<target type='filelist'>vnstat</target>
<target type='servicelist'>vnstat</target>
</condition>
</constraints>
</creole>

View File

@ -1,16 +0,0 @@
#!/bin/bash
#set -e
. /usr/lib/eole/diagnose.sh
EchoGras "*** Service de statistique réseau"
if [ "$(CreoleGet activer_vnstat)" = "oui" ]; then
TestPid vnStat vnstatd
echo
vnstat
else
Inactif vnStat
fi
echo
exit 0

View File

@ -1,170 +0,0 @@
# vnStat 1.18 config file
##
# default interface
%set %%interfaces = []
%for interface in %%vnstat_interface
%set %%zone = 'nom_zone_eth' + interface
%silent %%interfaces.append(%%getVar(%%zone))
%end for
Interface "%%custom_join(%%interfaces,'+']"
# location of the database directory
DatabaseDir "/var/lib/vnstat"
# locale (LC_ALL) ("-" = use system locale)
Locale "-"
# on which day should months change
MonthRotate 1
# date output formats for -d, -m, -t and -w
# see 'man date' for control codes
DayFormat "%x"
MonthFormat "%b '%y"
TopFormat "%x"
# characters used for visuals
RXCharacter "%"
TXCharacter ":"
RXHourCharacter "r"
TXHourCharacter "t"
# how units are prefixed when traffic is shown
# 0 = IEC standard prefixes (KiB/MiB/GiB/TiB)
# 1 = old style binary prefixes (KB/MB/GB/TB)
UnitMode 0
# how units are prefixed when traffic rate is shown
# 0 = IEC binary prefixes (Kibit/s...)
# 1 = SI decimal prefixes (kbit/s...)
RateUnitMode 1
# output style
# 0 = minimal & narrow, 1 = bar column visible
# 2 = same as 1 except rate in summary and weekly
# 3 = rate column visible
OutputStyle 3
# used rate unit (0 = bytes, 1 = bits)
RateUnit 1
# number of decimals to use in outputs
DefaultDecimals 2
HourlyDecimals 1
# spacer for separating hourly sections (0 = none, 1 = '|', 2 = '][', 3 = '[ ]')
HourlySectionStyle 2
# try to detect interface maximum bandwidth, 0 = disable feature
# MaxBandwidth will be used as fallback value when enabled
BandwidthDetection 1
# maximum bandwidth (Mbit) for all interfaces, 0 = disable feature
# (unless interface specific limit is given)
MaxBandwidth 1000
# interface specific limits
# example 8Mbit limit for eth0 (remove # to activate):
#MaxBWeth0 8
# how many seconds should sampling for -tr take by default
Sampletime 5
# default query mode
# 0 = normal, 1 = days, 2 = months, 3 = top10
# 4 = exportdb, 5 = short, 6 = weeks, 7 = hours
QueryMode 0
# filesystem disk space check (1 = enabled, 0 = disabled)
CheckDiskSpace 1
# database file locking (1 = enabled, 0 = disabled)
UseFileLocking 1
# how much the boot time can variate between updates (seconds)
BootVariation 15
# log days without traffic to daily list (1 = enabled, 0 = disabled)
TrafficlessDays 1
# vnstatd
##
# switch to given user when started as root (leave empty to disable)
DaemonUser "%%vnstat_user"
# switch to given user when started as root (leave empty to disable)
DaemonGroup "%%vnstat_group"
# how many minutes to wait during daemon startup for system clock to
# sync time if most recent database update appears to be in the future
TimeSyncWait 5
# how often (in seconds) interface data is updated
UpdateInterval 30
# how often (in seconds) interface status changes are checked
PollInterval 5
# how often (in minutes) data is saved to file
SaveInterval 5
# how often (in minutes) data is saved when all interface are offline
OfflineSaveInterval 30
# how often (in minutes) bandwidth detection is redone when
# BandwidthDetection is enabled (0 = disabled)
BandwidthDetectionInterval 5
# force data save when interface status changes (1 = enabled, 0 = disabled)
SaveOnStatusChange 1
# enable / disable logging (0 = disabled, 1 = logfile, 2 = syslog)
UseLogging 2
# create dirs if needed (1 = enabled, 0 = disabled)
CreateDirs 1
# update ownership of files if needed (1 = enabled, 0 = disabled)
UpdateFileOwner 1
# file used for logging if UseLogging is set to 1
LogFile "/var/log/vnstat/vnstat.log"
# file used as daemon pid / lock file
PidFile "/var/run/vnstat/vnstat.pid"
# vnstati
##
# title timestamp format
HeaderFormat "%x %H:%M"
# show hours with rate (1 = enabled, 0 = disabled)
HourlyRate 1
# show rate in summary (1 = enabled, 0 = disabled)
SummaryRate 1
# layout of summary (1 = with monthly, 0 = without monthly)
SummaryLayout 1
# transparent background (1 = enabled, 0 = disabled)
TransparentBg 0
# image colors
CBackground "FFFFFF"
CEdge "AEAEAE"
CHeader "606060"
CHeaderTitle "FFFFFF"
CHeaderDate "FFFFFF"
CText "000000"
CLine "B0B0B0"
CLineL "-"
CRx "92CF00"
CTx "606060"
CRxD "-"
CTxD "-"

View File

@ -1,18 +0,0 @@
\skbheading{Lannuaire de module Scribe}
Lannuaire du module Scribe est opéré à laide du logiciel OpenLDAP.
Les schémas mis en place sont définis selon les règles métiers de lÉducation nationale.
Les schémas mis en place sont les suivants :
\begin{itemize}
\item core.schema
\item cosine.schema
\item inetorgperson.schema
\item nis.schema
\item samba.schema
\item eole.schema
\item eoleshare.schema
\item radius.schema
\item ent.schema
\end{itemize}
Les schémas \emph{core.schema}, \emph{cosine.schema} et \emph{nis.schema} sont des schémas classiques pour les annuaires décrivant des personnes.
Les autres schémas, placés dans le sous-répertoire \emph{eole}, décrivent les objets nécessaires pour Samba (\emph{samba.schema}), les objets précisant les types de personnes (\emph{eole.schema}) et les partages (\emph{eoleshare.schema}), les attributs pour lutilisation de Radius (\emph{radius.schema}) et, enfin, les objets et attributs pour limplémentation du schéma directeur des espaces numériques de travail (\emph{ent.schema}).

View File

@ -1,33 +0,0 @@
\skbheading{Les classes dobjets métiers de lannuaire du module Scribe}
Les classe dobjets métiers de lannuaire du module Scribe sont celles décrites dans les schémas de plus haut niveau.
Ces classes dobjets décrivent des utilisateurs, des groupes dutilisateurs et des ressources comme les partages.
Plusieurs classes dobjets peuvent être utilisées conjointement pour préciser le type de la ressource décrite : les classes dobjects sont complémentaires et ne sont pas organisées de manière hiérarchique.
Les classes dont le nom débute par \emph{ENT} sont issues du schéma directeur des espaces numériques de travail.
Les classes dobjets susceptibles dêtre utilisées pour les personnes sont les suivantes :
\begin{itemize}
\item Eleves
\item administrateur
\item responsable
\item administratif
\item ENTPerson
\item ENTEleve
\item ENTAuxPersRelEleve
\item ENTAuxEnseignant
\item ENTAuxNonEnsServAc
\item ENTAuxNonEnsCollLoc
\item ENTAuxNonEnsEtab
\item ENTAuxPersExt
\item ENTAuxTuteurStage
\item ENTAuxRespEntrp
\item eolemail
\item autre
\end{itemize}
Les classes dobjets susceptibles dêtre utilisées pour les groupes sont les suivantes :
\begin{itemize}
\item eolegroupe
\item classe
\item ENTGroupe
\item ENTClasse
\end{itemize}

View File

@ -1,79 +0,0 @@
\skbheading{La fiche du personnel administratif dans lannuaire du module Scribe}
Le personnel administratif, dans lannuaire du module Scribe, est la conjonction de plusieurs classes dobjets :
\begin{itemize}
\item top
\item person
\item organizationalPerson
\item posixAccount
\item shadowAccount
\item inetOrgPerson
\item sambaSamAccount
\item administratif
\item ENTPerson
\item ENTAuxNonEnsEtab
\item radiusprofile
\end{itemize}
La partie métier est portée par les classes \emph{administratif}, \emph{ENTPerson} et \emph{ENTAuxNonEnsEtab}.
Les attributs susceptibles dêtre associés à un personnel administratif sont les suivants :
\begin{itemize}
\item les attributs issus de la classe administratif :
\begin{itemize}
\item dont les attributs obligatoires :
\begin{itemize}
\item typeadmin
\item codecivilite
\end{itemize}
\item et les attributs optionnels :
\begin{itemize}
\item dateNaissance
\item mailDir
\item mailHost
\item intid
\item FederationKey
\item Divcod
\item ManagedGroup
\item LastUpdate
\item mailAlternateAddress
\end{itemize}
\end{itemize}
\item les attributs issus de la classe ENTPerson :
\begin{itemize}
\item dont les attributs obligatoires :
\begin{itemize}
\item ENTPersonLogin
\item ENTPersonJointure
\end{itemize}
\item et les attributs optionnels :
\begin{itemize}
\item ENTPersonAutresPrenoms
\item ENTPersonNomPatro
\item ENTPersonSexe
\item ENTPersonCentresInteret
\item ENTPersonAdresse
\item ENTPersonCodePostal
\item ENTPersonVille
\item ENTPersonPays
\item ENTPersonAlias
\item ENTPersonStructRattach
\item ENTPersonFonctions
\item ENTPersonProfils
\item ENTPersonDateNaissance
\item personalTitle
\end{itemize}
\end{itemize}
\item les attributs issus de la classe ENTAuxNonEnsEtab :
\begin{itemize}
\item dont les attributs obligatoires :
\begin{itemize}
\item aucun attribut obligatoire
\end{itemize}
\item et les attributs optionnels :
\begin{itemize}
\item ENTAuxNonEnsEtabService
\end{itemize}
\end{itemize}
\end{itemize}

View File

@ -1,97 +0,0 @@
\skbheading{La fiche de lélève dans lannuaire du module Scribe}
Lélève, dans lannuaire du module Scribe, est la conjonction de plusieurs classes dobjets :
\begin{itemize}
\item top
\item person
\item organizationalPerson
\item posixAccount
\item shadowAccount
\item inetOrgPerson
\item sambaSamAccount
\item Eleves
\item ENTPerson
\item ENTEleve
\item radiusprofile
\end{itemize}
La partie métier est portée par les classes \emph{Eleves} et \emph{ENTEleve}.
Les attributs susceptibles dêtre associés à un élève sont les suivants :
\begin{itemize}
\item les attributs issus de la classe Eleves :
\begin{itemize}
\item dont les attributs obligatoires :
\begin{itemize}
\item givenName
\item codecivilite
\item mail
\item mailHost
\item userPassword
\item employeeNumber
\item dateNaissance
\item Meflcf
\item Divcod
\item uid
\end{itemize}
\item et les attributs optionnels :
\begin{itemize}
\item mailDir
\item telephoneNumber
\item mailForwardingAddress
\item mailAlternateAddress
\item textelibre
\item photo
\item diffusion
\item dermaj
\item Meflcm
\item Divcodmso
\item mailparent
\item FederationKey
\item Ine
\item postalAddress
\item rne
\item LastUpdate
\item intid
\end{itemize}
\end{itemize}
\item les attributs issus de la classe ENTEleve :
\begin{itemize}
\item dont les attributs obligatoires :
\begin{itemize}
\item ENTEleveStatutEleve
\item ENTEleveMEF
\item ENTEleveLibelleMEF
\item ENTEleveNivFormation
\item ENTEleveFiliere
\item ENTEleveEnseignements
\item ENTEleveClasses
\item ENTEleveMajeur
\end{itemize}
\item et les attributs optionnels :
\begin{itemize}
\item ENTEleveVilleNaissance
\item ENTEleveDeptNaissance
\item ENTElevePaysNaissance
\item ENTEleveParents
\item ENTEleveAutoriteParentale
\item ENTElevePersRelEleve1
\item ENTEleveQualitePersRelEleve1
\item ENTElevePersRelEleve2
\item ENTEleveQualitePersRelEleve2
\item ENTEleveBoursier
\item ENTEleveRegime
\item ENTEleveTransport
\item ENTEleveMEFRattach
\item ENTEleveNivFormationDiplome
\item ENTEleveSpecialite
\item ENTEleveGroupes
\item ENTEleveEnsRespStage
\item ENTEleveEnsTutStage
\item ENTEleveEntrTutStage
\item ENTEleveEntrAutres
\item ENTEleveDelegClasse
\item ENTEleveDelegAutres
\item ENTEleveMajeurAnticipe
\item ENTEleveStructRattachId
\end{itemize}
\end{itemize}
\end{itemize}

View File

@ -1,89 +0,0 @@
\skbheading{La fiche de lenseignant dans lannuaire du module Scribe}
Lenseignant, dans lannuaire du module Scribe, est la conjonction de plusieurs classes dobjets :
\begin{itemize}
\item top
\item person
\item organizationalPerson
\item posixAccount
\item shadowAccount
\item inetOrgPerson
\item sambaSamAccount
\item administrateur
\item ENTPerson
\item ENTAuxEnseignant
\item radiusprofile
\end{itemize}
La partie métier est portée par les classes \emph{administrateur}, \emph{ENTPerson} et \emph{ENTAuxEnseignant}.
Les attributs susceptibles dêtre associés à un enseignant sont les suivants :
\begin{itemize}
\item les attributs issus de la classe administrateur :
\begin{itemize}
\item dont les attributs obligatoires :
\begin{itemize}
\item typeadmin
\item codecivilite
\end{itemize}
\item et les attributs optionnels :
\begin{itemize}
\item dateNaissance
\item mailDir
\item mailHost
\item mailForwardingAddress
\item mailAlternateAddress
\item Meflcf
\item Divcod
\item FederationKey
\item ManagedGroup
\item LastUpdate
\item intid
\end{itemize}
\end{itemize}
\item les attributs issus de la classe ENTPerson :
\begin{itemize}
\item dont les attributs obligatoires :
\begin{itemize}
\item ENTPersonLogin
\item ENTPersonJointure
\end{itemize}
\item et les attributs optionnels :
\begin{itemize}
\item ENTPersonAutresPrenoms
\item ENTPersonNomPatro
\item ENTPersonSexe
\item ENTPersonCentresInteret
\item ENTPersonAdresse
\item ENTPersonCodePostal
\item ENTPersonVille
\item ENTPersonPays
\item ENTPersonAlias
\item ENTPersonStructRattach
\item ENTPersonFonctions
\item ENTPersonProfils
\item ENTPersonDateNaissance
\item personalTitle
\end{itemize}
\end{itemize}
\item les attributs issus de la classe ENTAuxEnseignant :
\begin{itemize}
\item dont les attributs obligatoires :
\begin{itemize}
\item aucun attribut obligatoire
\end{itemize}
\item et les attributs optionnels :
\begin{itemize}
\item ENTAuxsEnsMEF
\item ENTAuxEnsCategoDiscipline
\item ENTAuxEnsMatiereEnseignEtab
\item ENTAuxEnsClasses
\item ENTAuxEnsGroupes
\item ENTAuxEnsClassePrincipal
\item ENTAuxEnsRespStage
\item ENTAuxEnsTutStage
\end{itemize}
\end{itemize}
\end{itemize}

View File

@ -1,73 +0,0 @@
\skbheading{La fiche du responsable délève dans lannuaire du module Scribe}
Le responsable délève, dans lannuaire du module Scribe, est la conjonction de plusieurs classes dobjets :
\begin{itemize}
\item inetOrgPerson
\item responsable
\item ENTPerson
\item ENTAuxPersRelEleve
\end{itemize}
La partie métier est portée par les classes \emph{responsable}, \emph{ENTPerson} et \emph{ENTAuxPersRelEleve}.
Les attributs susceptibles dêtre associés à un responsable délève sont les suivants :
\begin{itemize}
\item les attributs issus de la classe responsable  :
\begin{itemize}
\item dont les attributs obligatoires :
\begin{itemize}
\item aucun attribut obligatoire
\end{itemize}
\item et les attributs optionnels :
\begin{itemize}
\item mailDir
\item mailHost
\item sambaLMPassword
\item sambaNTPassword
\item codecivilite
\item LastUpdate
\item gecos
\item eleve
\item intid
\item dateNaissance
\item mailPerso
\end{itemize}
\end{itemize}
\item les attributs issus de la classe ENTPerson :
\begin{itemize}
\item dont les attributs obligatoires :
\begin{itemize}
\item ENTPersonLogin
\item ENTPersonJointure
\end{itemize}
\item et les attributs optionnels :
\begin{itemize}
\item ENTPersonAutresPrenoms
\item ENTPersonNomPatro
\item ENTPersonSexe
\item ENTPersonCentresInteret
\item ENTPersonAdresse
\item ENTPersonCodePostal
\item ENTPersonVille
\item ENTPersonPays
\item ENTPersonAlias
\item ENTPersonStructRattach
\item ENTPersonFonctions
\item ENTPersonProfils
\item ENTPersonDateNaissance
\item personalTitle
\end{itemize}
\end{itemize}
\item les attributs issus de la classe ENTAuxPersRelEleve :
\begin{itemize}
\item dont les attributs obligatoires :
\begin{itemize}
\item ENTAuxPersRelEleveEleve
\end{itemize}
\item et les attributs optionnels :
\begin{itemize}
\item ENTAuxPersRelEleveRepresentant
\end{itemize}
\end{itemize}
\end{itemize}

View File

@ -1,2 +0,0 @@
\skbheading{schemas.tex}
fichier content/modules\_eole\_envole/scribe/annuaire/schemas.tex à éditer

View File

@ -1,29 +0,0 @@
\skbheading{Les outils du backend Scribe}
Le module Scribe amène des scripts pour la gestion des utilisateurs et des fonctions liées.
Ces fonctions utilisent les mêmes bibliothèques que lEAD2 pour la gestion des utilisateurs et groupes et sont donc une façon équivalente de manipuler lannuaire.
La liste des scripts disponibles est la suivante :
\begin{itemize}
\item ajout\_partage.py
\item change-classe.py
\item config-controle-vnc.py
\item creation-administratif.py
\item creation-eleve.py
\item creation-groupe.py
\item creation-prof.py
\item desinscription.py
\item droits\_partage.sh
\item droits\_user.py
\item inscription.py
\item mailsync.py
\item maj\_regle\_esu.sh
\item manage\_special\_shares.py
\item migre-domaine-messagerie.sh
\item modifie\_profil.py
\item regenalias.sh
\item regen\_maillist.py
\item suppression\_groupe.py
\item suppression\_utilisateur.py
\item zenity\_console.py
\end{itemize}

View File

@ -1,2 +0,0 @@
\skbheading{creation-administratif.tex}
fichier content/modules\_eole\_envole/scribe/backend/creation-administratif.tex à éditer

View File

@ -1,28 +0,0 @@
\skbheading{creation-eleve.py}
Le script \emph{creation-eleve.py} est utilisé pour créer un nouvel utilisateur du type élève dans lannuaire du module Scribe.
La fiche dun élève dans lannuaire du scribe contient obligatoirement :
\begin{itemize}
\item un identifiant de connexion ;
\item la classe de rattachement ;
\item un mot de passe ;
\item le prénom de lélève ;
\item le nom de famille de lélève ;
\item la date de naissance de lélève ;
\item le numéro de lélève ;
\item la civilité de lélève.
\end{itemize}
En complément, il est possible de renseigner les éléments suivants :
\begin{itemize}
\item le niveau de lélève ;
\item le type de domaine pour le courriel de lélève ;
\item un quota disque à assigner à lélève ;
\item le type de profil pour lutilisation dun poste client Windows ;
\item lactivation du shell pour permettre la connexion sur un poste client GNU/Linux.
\end{itemize}
\begin{description}
\item[emplacement] /usr/share/eole/backend
\item[aide] creation-eleve.py
\end{description}

View File

@ -1,2 +0,0 @@
\skbheading{creation-groupe.tex}
fichier content/modules\_eole\_envole/scribe/backend/creation-groupe.tex à éditer

View File

@ -1,2 +0,0 @@
\skbheading{creation-prof.tex}
fichier content/modules\_eole\_envole/scribe/backend/creation-prof.tex à éditer

View File

@ -1,170 +0,0 @@
# vnStat 1.18 config file
##
# default interface
%set %%interfaces = []
%for interface in %%vnstat_interface
%set %%zone = 'nom_zone_eth' + interface
%silent %%interfaces.append(%%getVar(%%zone))
%end for
Interface "%%custom_join(%%interfaces,'+']"
# location of the database directory
DatabaseDir "/var/lib/vnstat"
# locale (LC_ALL) ("-" = use system locale)
Locale "-"
# on which day should months change
MonthRotate 1
# date output formats for -d, -m, -t and -w
# see 'man date' for control codes
DayFormat "%x"
MonthFormat "%b '%y"
TopFormat "%x"
# characters used for visuals
RXCharacter "%"
TXCharacter ":"
RXHourCharacter "r"
TXHourCharacter "t"
# how units are prefixed when traffic is shown
# 0 = IEC standard prefixes (KiB/MiB/GiB/TiB)
# 1 = old style binary prefixes (KB/MB/GB/TB)
UnitMode 0
# how units are prefixed when traffic rate is shown
# 0 = IEC binary prefixes (Kibit/s...)
# 1 = SI decimal prefixes (kbit/s...)
RateUnitMode 1
# output style
# 0 = minimal & narrow, 1 = bar column visible
# 2 = same as 1 except rate in summary and weekly
# 3 = rate column visible
OutputStyle 3
# used rate unit (0 = bytes, 1 = bits)
RateUnit 1
# number of decimals to use in outputs
DefaultDecimals 2
HourlyDecimals 1
# spacer for separating hourly sections (0 = none, 1 = '|', 2 = '][', 3 = '[ ]')
HourlySectionStyle 2
# try to detect interface maximum bandwidth, 0 = disable feature
# MaxBandwidth will be used as fallback value when enabled
BandwidthDetection 1
# maximum bandwidth (Mbit) for all interfaces, 0 = disable feature
# (unless interface specific limit is given)
MaxBandwidth 1000
# interface specific limits
# example 8Mbit limit for eth0 (remove # to activate):
#MaxBWeth0 8
# how many seconds should sampling for -tr take by default
Sampletime 5
# default query mode
# 0 = normal, 1 = days, 2 = months, 3 = top10
# 4 = exportdb, 5 = short, 6 = weeks, 7 = hours
QueryMode 0
# filesystem disk space check (1 = enabled, 0 = disabled)
CheckDiskSpace 1
# database file locking (1 = enabled, 0 = disabled)
UseFileLocking 1
# how much the boot time can variate between updates (seconds)
BootVariation 15
# log days without traffic to daily list (1 = enabled, 0 = disabled)
TrafficlessDays 1
# vnstatd
##
# switch to given user when started as root (leave empty to disable)
DaemonUser "%%vnstat_user"
# switch to given user when started as root (leave empty to disable)
DaemonGroup "%%vnstat_group"
# how many minutes to wait during daemon startup for system clock to
# sync time if most recent database update appears to be in the future
TimeSyncWait 5
# how often (in seconds) interface data is updated
UpdateInterval 30
# how often (in seconds) interface status changes are checked
PollInterval 5
# how often (in minutes) data is saved to file
SaveInterval 5
# how often (in minutes) data is saved when all interface are offline
OfflineSaveInterval 30
# how often (in minutes) bandwidth detection is redone when
# BandwidthDetection is enabled (0 = disabled)
BandwidthDetectionInterval 5
# force data save when interface status changes (1 = enabled, 0 = disabled)
SaveOnStatusChange 1
# enable / disable logging (0 = disabled, 1 = logfile, 2 = syslog)
UseLogging 2
# create dirs if needed (1 = enabled, 0 = disabled)
CreateDirs 1
# update ownership of files if needed (1 = enabled, 0 = disabled)
UpdateFileOwner 1
# file used for logging if UseLogging is set to 1
LogFile "/var/log/vnstat/vnstat.log"
# file used as daemon pid / lock file
PidFile "/var/run/vnstat/vnstat.pid"
# vnstati
##
# title timestamp format
HeaderFormat "%x %H:%M"
# show hours with rate (1 = enabled, 0 = disabled)
HourlyRate 1
# show rate in summary (1 = enabled, 0 = disabled)
SummaryRate 1
# layout of summary (1 = with monthly, 0 = without monthly)
SummaryLayout 1
# transparent background (1 = enabled, 0 = disabled)
TransparentBg 0
# image colors
CBackground "FFFFFF"
CEdge "AEAEAE"
CHeader "606060"
CHeaderTitle "FFFFFF"
CHeaderDate "FFFFFF"
CText "000000"
CLine "B0B0B0"
CLineL "-"
CRx "92CF00"
CTx "606060"
CRxD "-"
CTxD "-"

View File

@ -1,9 +0,0 @@
\begin{frame}
\frametitle{Source Code Management}
\begin{description}
\item[SCM] Système de gestion du code source
\end{description}
\begin{exampleblock}{}
Outil permettant le développement de code informatique en conservant les étapes de création.
\end{exampleblock}
\end{frame}

View File

@ -1,11 +0,0 @@
\begin{frame}
\frametitle{Fonctionnalités d'un SCM}
\framesubtitle{Que peut faire un SCM pour vous ?}
Avec un SCM :
\begin{itemize}
\item produisez des bugs en toute quiétude
\item déterminez qui est responsable du bug bloquant
\item corrigez facilement ce bug
\item identifiez cet état du code comme stable
\end{itemize}
\end{frame}

View File

@ -1,47 +0,0 @@
\begin{frame}
\frametitle{Commandes git}
\framesubtitle{Récapitulatif}
\tiny{
\begin{columns}
\begin{column}{.3\textwidth}
Faire le point :
\begin{itemize}
\item status
\item ls-files
\item diff
\item log
\item grep
\item cherry
\item show
\item bisect
\item blame
\end{itemize}
\end{column}
\begin{column}{.3\textwidth}
Modifier le contenu :
\begin{itemize}
\item checkout
\item pull
\item fetch
\item merge
\item rebase
\item add
\item reset
\item clean
\item commit
\item cherry-pick
\item revert
\item push
\item filter-branch
\end{itemize}
\end{column}
\begin{column}{.3\textwidth}
Organiser le développement :
\begin{itemize}
\item branch
\item tag
\end{itemize}
\end{column}
\end{columns}
}
\end{frame}

View File

@ -1,14 +0,0 @@
\begin{frame}
\frametitle{Commandes git}
\framesubtitle{add}
\begin{description}
\item[\commande{git add}] Ajouter le contenu d'un fichier à l'index.
\end{description}
\skbinput[from=fig]{apps/git_commande_add}
\begin{exampleblock}{Options à retenir}
\begin{description}
\item[\commande{-u}] ajout des modifications des fichiers déjà connus de git
\item[\commande{-i}] ajout interactif
\end{description}
\end{exampleblock}
\end{frame}

View File

@ -1,7 +0,0 @@
\begin{frame}
\frametitle{Commandes git}
\framesubtitle{bisect}
\begin{description}
\item[\commande{git bisect start}] Démarrer une session de recherche du commit problématique par division binaire
\end{description}
\end{frame}

View File

@ -1,7 +0,0 @@
\begin{frame}
\frametitle{Commandes git}
\framesubtitle{blame}
\begin{description}
\item[\commande{git blame}] Afficher l'auteur et la référence de la dernière modification pour chaque ligne d'un fichier
\end{description}
\end{frame}

View File

@ -1,14 +0,0 @@
\begin{frame}
\frametitle{Commandes git}
\framesubtitle{branch}
\begin{description}
\item[git branch] Gérer les branches
\end{description}
\begin{exampleblock}{Options à retenir}
\begin{description}
\item[\commande{--list}] Lister les branches (\commande{-a} les branches locales et distantes, \commande{-r} les branches distantes uniquement)
\item[\commande{-d}] Supprimer une branche
\end{description}
\end{exampleblock}
\end{frame}

View File

@ -1,14 +0,0 @@
\begin{frame}
\frametitle{Commandes git}
\framesubtitle{checkout}
\begin{description}
\item[\commande{git checkout}] Synchroniser le répertoire de travail avec une version
\end{description}
\skbinput[from=fig]{apps/git_commande_checkout}
\begin{exampleblock}{Options à retenir}
\begin{description}
\item[\commande{-b}] Créer une nouvelle branche et déplacer HEAD dessus
\item[\commande{--ours --theirs}] Conserver des modifications explicitement
\end{description}
\end{exampleblock}
\end{frame}

View File

@ -1,12 +0,0 @@
\begin{frame}
\frametitle{Commandes git}
\framesubtitle{cherry-pick}
\begin{description}
\item[\commande{git cherry-pick}] Appliquer les changements introduits dans un commit donné
\end{description}
\begin{exampleblock}{Options à retenir}
\begin{description}
\item[\commande{--abort}] Interrompre le processus
\end{description}
\end{exampleblock}
\end{frame}

View File

@ -1,7 +0,0 @@
\begin{frame}
\frametitle{Commandes git}
\framesubtitle{cherry}
\begin{description}
\item[\commande{git cherry}] Trouver les commit qui ne sont pas encore appliqués dans le dépôt distant
\end{description}
\end{frame}

View File

@ -1,13 +0,0 @@
\begin{frame}
\frametitle{Commandes git}
\framesubtitle{clean}
\begin{description}
\item[\commande{git clean}] Supprime les fichiers non suivis du répertoire de travail
\end{description}
\begin{exampleblock}{Options à retenir}
\begin{description}
\item[\commande{-xdf}] Combinaison pour supprimer du répertoire de travail les dossiers et fichiers non suivis
\end{description}
\end{exampleblock}
% contenu (pas trop long) de la diapositive
\end{frame}

View File

@ -1,8 +0,0 @@
\begin{frame}
\frametitle{Commandes git}
\framesubtitle{clone}
\begin{description}
\item[\commande{git clone <url du dépôt>}] Récupérer un dépôt git depuis une source distante
\end{description}
% contenu (pas trop long) de la diapositive
\end{frame}

View File

@ -1,15 +0,0 @@
\begin{frame}
\frametitle{Commandes git}
\framesubtitle{commit}
\begin{description}
\item[\commande{git commit}] Créer un commit à partir du contenu de l'index
\end{description}
\skbinput[from=fig]{apps/git_commande_commit}
\begin{exampleblock}{Options à retenir}
\begin{description}
\item[\commande{-a}] Court-circuiter l'index en intégrant au commit les modifications des fichiers suivis dans le répertoire de travail
\item[\commande{--amend}] Modifier le dernier commit
\end{description}
\end{exampleblock}
% contenu (pas trop long) de la diapositive
\end{frame}

View File

@ -1,8 +0,0 @@
\begin{frame}
\frametitle{Commandes git}
\framesubtitle{diff}
\begin{description}
\item[\commande{git diff}] Afficher la différence entre deux états (entre le répertoire de travail ou l'index et la branche par exemple)
\end{description}
% contenu (pas trop long) de la diapositive
\end{frame}

View File

@ -1,13 +0,0 @@
\begin{frame}
\frametitle{Commandes git}
\framesubtitle{checkout}
\begin{description}
\item[git fetch] Mettre à jour la copie locale d'un dépôt distant
\end{description}
\skbinput[from=fig]{apps/git_commande_fetch}
\begin{exampleblock}{Options à retenir}
\begin{description}
\item[-all] Mettre à jour les copies locales de tous les dépôts distants configurés
\end{description}
\end{exampleblock}
\end{frame}

View File

@ -1,13 +0,0 @@
\begin{frame}
\frametitle{Commandes git}
\framesubtitle{filter-branch}
\begin{description}
\item[\commande{git filter-branch}] Exécuter une commande sur un ensemble de commit
\end{description}
\begin{exampleblock}{Options à retenir}
\begin{description}
\item[\commande{--tree-filter}] Modifier le contenu de l'arborescence pour chaque version du projet
\item[\commande{--env-filter}] Modifier la teneur des variables d'environnement pour chaque commit
\end{description}
\end{exampleblock}
\end{frame}

View File

@ -1,14 +0,0 @@
\begin{frame}
\frametitle{Commandes git}
\framesubtitle{grep}
\begin{description}
\item[\commande{git grep}] Rechercher dans chaque fichier d'un arbre quelconque
\end{description}
\begin{exampleblock}{Options à retenir}
\begin{description}
\item[\commande{--break}] Sépare les résultats pour une meilleure lisibilité
\item[\commande{--heading}] Donne le contexte du résultat
\end{description}
\end{exampleblock}
% contenu (pas trop long) de la diapositive
\end{frame}

View File

@ -1,8 +0,0 @@
\begin{frame}
\frametitle{Commandes git}
\framesubtitle{init}
\begin{description}
\item[\commande{git init}] Convertir le dossier courant en dépôt git
\end{description}
% contenu (pas trop long) de la diapositive
\end{frame}

View File

@ -1,15 +0,0 @@
\begin{frame}
\frametitle{Commandes git}
\framesubtitle{log}
\begin{description}
\item[\commande{git log}] Afficher une liste de commit
\end{description}
\begin{exampleblock}{Options à retenir}
\begin{description}
\item[\commande{-L}] Retracer l'historique d'un morceau de code
\item[\commande{<c1>..<c2>}] Lister les commit accessibles depuis c2 mais pas c1
\item[\commande{<c1>...<2>}] Lister les commit accessibles depuis l'un ou l'autre mais pas des deux à la fois
\item[\commande{--not Ref}] Lister les commit qui ne sont pas accessibles depuis Ref
\end{description}
\end{exampleblock}
\end{frame}

View File

@ -1,7 +0,0 @@
\begin{frame}
\frametitle{Commandes git}
\framesubtitle{ls-files}
\begin{description}
\item[\commande{git ls-files}] Afficher les informations sur les fichiers de l'index et du répertoire de travail.
\end{description}
\end{frame}

View File

@ -1,14 +0,0 @@
\begin{frame}
\frametitle{Commandes git}
\framesubtitle{merge}
\begin{description}
\item[\commande{git merge}] Intégrer les commit d'une branche à une autre
\end{description}
%\skbinput[from=fig]{apps/git_commande_merge}
\begin{exampleblock}{Options à retenir}
\begin{description}
\item[\commande{--abort}] Pour faire machine arrière lors d'un merge manuel
\end{description}
\end{exampleblock}
% contenu (pas trop long) de la diapositive
\end{frame}

View File

@ -1,14 +0,0 @@
\begin{frame}
\frametitle{Commandes git}
\framesubtitle{pull}
\begin{description}
\item[\commande{git pull}] Synchroniser une branche locale avec la branche distante
\end{description}
\skbinput[from=fig]{apps/git_commande_pull}
\begin{exampleblock}{Options à retenir}
\begin{description}
\item[\commande{--rebase}] Choisir la stratégie rebase pour incorporer les changements (équivalent à la succession des commandes \commande{fetch} et \commande{rebase})
\end{description}
\end{exampleblock}
% contenu (pas trop long) de la diapositive
\end{frame}

View File

@ -1,15 +0,0 @@
\begin{frame}
\frametitle{Commandes git}
\framesubtitle{push}
\begin{description}
\item[\commande{git push}] Synchroniser une branche distante avec une branche locale
\end{description}
\skbinput[from=fig]{apps/git_commande_push}
\begin{exampleblock}{Options à retenir}
\begin{description}
\item[\commande{--tags}] Pousser les tags locaux sur le dépôt distant
\item[\commande{--all}] Pousser toutes les branches
\end{description}
\end{exampleblock}
% contenu (pas trop long) de la diapositive
\end{frame}

View File

@ -1,14 +0,0 @@
\begin{frame}
\frametitle{Commandes git}
\framesubtitle{rebase}
\begin{description}
\item[\commande{git rebase}] Rejouer les modifications après mise à jour de la branche
\end{description}
%\skbinput[from=fig]{apps/git_commande_rebase}
\begin{exampleblock}{Options à retenir}
\begin{description}
\item[\commande{-i}] Réordonner les modifications manuellement
\end{description}
\end{exampleblock}
% contenu (pas trop long) de la diapositive
\end{frame}

View File

@ -1,14 +0,0 @@
\begin{frame}
\frametitle{Commandes git}
\framesubtitle{reset}
\begin{description}
\item[\commande{git reset}] Revenir à une version antérieure
\end{description}
%\skbinput[from=fig]{apps/git_commande_reset}
\begin{exampleblock}{Options à retenir}
\begin{description}
\item[\commande{--hard}] Écraser le contenu du répertoire de travail et de l'index
\end{description}
\end{exampleblock}
% contenu (pas trop long) de la diapositive
\end{frame}

View File

@ -1,14 +0,0 @@
\begin{frame}
\frametitle{Commandes git}
\framesubtitle{revert}
\begin{description}
\item[\commande{git revert}] Créer le commit annulant un autre commit
\end{description}
%\skbinput[from=fig]{apps/git_commande_revert}
\begin{exampleblock}{Options à retenir}
\begin{description}
\item[\commande{--abort}] Interrompre le traitement
\end{description}
\end{exampleblock}
% contenu (pas trop long) de la diapositive
\end{frame}

View File

@ -1,8 +0,0 @@
\begin{frame}
\frametitle{Commandes git}
\framesubtitle{show}
\begin{description}
\item[\commande{git show}] Afficher la description d'un commit
\end{description}
% contenu (pas trop long) de la diapositive
\end{frame}

View File

@ -1,8 +0,0 @@
\begin{frame}
\frametitle{Commandes git}
\framesubtitle{status}
\begin{description}
\item[\commande{git status}] Afficher le statut du répertoire de travail, et de l'index relativement à la branche
\end{description}
% contenu (pas trop long) de la diapositive
\end{frame}

View File

@ -1,15 +0,0 @@
\begin{frame}
\frametitle{Commandes git}
\framesubtitle{tag}
\begin{description}
\item[\commande{git tag}] Gérer les étiquettes attachées à un commit
\end{description}
\begin{exampleblock}{Options à retenir}
\begin{description}
\item[\commande{-l}] Lister les étiquettes (éventuellement correpondant à un motif)
\item[\commande{-a}] Annoter l'étiquette
\item[\commande{-s}] Signer l'étiquette
\end{description}
\end{exampleblock}
% contenu (pas trop long) de la diapositive
\end{frame}

View File

@ -1,33 +0,0 @@
\begin{frame}
\frametitle{Ergonomie}
\framesubtitle{alias}
Les alias sont des raccourcis gérés pas git.
\commande{git config alias.<nom de l'alias> "<commande>"}
\begin{exampleblock}{Nature des commandes}
Les commandes peuvent aussi bien être des options et sous-commandes de git que des commandes externes accessibles au shell.
\end{exampleblock}
\end{frame}
\begin{frame}[fragile]
\frametitle {Ergonomie}
\framesubtitle{Exemples d'alias}
\begin{minted}[fontsize=\tiny]{ini}
[alias]
co = checkout
st = status
fe = fetch
lo = log --oneline
re = reset --hard HEAD~1
br = branch
mnf = merge --no-ff
sw = checkout @{-1}
lu = log ..@{upstream}
luo = log --oneline ..@{upstream}
ul=log @{upstream}..HEAD
ulo=log --oneline @{upstream}..HEAD
cslt = !git describe --long --first-parent | awk -F'/' '{print $NF}' | awk -F'-' '{print $(NF-1)}'
clf = !git lo --no-merges $(git lo -1 --pretty=format:"%h" debian/changelog)..
\end{minted}
\end{frame}

View File

@ -1,10 +0,0 @@
\begin{frame}
\frametitle{Ergonomie}
\framesubtitle{Interface}
\begin{itemize}
\item \commande{git config --global core.editor "vim"}
\item \commande{git config --global core.pager "less"}
\item \commande{git config --global color.ui auto}
\end{itemize}
% contenu (pas trop long) de la diapositive
\end{frame}

View File

@ -1,47 +0,0 @@
\begin{frame}
\frametitle{Ergonomie}
\framesubtitle{Hooks}
Les hooks sont des actions déclenchées par des évènements concernant le dépôt git.
\begin{exampleblock}{}
Les hooks sont des scripts exécutables (pas de langage imposé) posés dans le dossier .git/hooks.
\end{exampleblock}
\end{frame}
\begin{frame}
\frametitle{Ergonomie}
\framesubtitle{Hooks pour le client}
\begin{columns}
\begin{column}{0.5\textwidth}
\begin{itemize}
\item pre-commit
\item prepare-commit-msg
\item commit-msg
\item post-commit
\item applypatch-msg
\item preapply-patch
\item postapply-patch
\end{itemize}
\end{column}
\begin{column}{0.5\textwidth}
\begin{itemize}
\item pre-rebase
\item post-rewrite
\item post-checkout
\item post-merge
\item pre-push
\end{itemize}
\end{column}
\end{columns}
\end{frame}
\begin{frame}
\frametitle{Ergonomie}
\framesubtitle{Hooks pour le serveur}
\begin{itemize}
\item pre-receive
\item update
\item post-receive
\end{itemize}
\end{frame}

View File

@ -1,8 +0,0 @@
\begin{frame}
\frametitle{Configurer git}
\framesubtitle{Une configuration souple}
\begin{itemize}
\item configuration globale
\item configuration par dépôt
\end{itemize}
\end{frame}

View File

@ -1,16 +0,0 @@
\begin{frame}[fragile]
\frametitle{Ergonomie}
\framesubtitle{bash}
\begin{minted}{bash}
source ~/.git-prompt.sh
GIT_PS1_SHOWDIRTYSTATE=1
GIT_PS1_SHOWSTASHSTATE=1
GIT_PS1_SHOWUNTRACKEDFILES=1
GIT_PS1_SHOWUPSTREAM="auto"
PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '
\end{minted}
\begin{exampleblock}{git-prompt}
git-prompt.sh est un script définissant la fonction \_\_git\_ps1 permettant d'afficher des informations pertinentes sur l'état du dépôt git dans l'invite de commande.
\end{exampleblock}
% contenu (pas trop long) de la diapositive
\end{frame}

View File

@ -1,9 +0,0 @@
\begin{frame}
\frametitle{Configurer git}
\framesubtitle{Identifier l'utilisateur}
git associe à chaque commit des informations sur la personne ayant commité et sur la personne ayant mergé le commit.
\begin{itemize}
\item \commande{git config --global user.name "<nom d'utilisateur>"}
\item \commande{git config --global user.email "<courriel>"}
\end{itemize}
\end{frame}

View File

@ -1,6 +0,0 @@
\begin{frame}
\frametitle{Décentralisé}
\begin{description}
\item[DVCS] Système de gestion de version décentralisé
\end{description}
\end{frame}

View File

@ -1,12 +0,0 @@
\begin{frame}
\frametitle{Les trois états des fichiers}
\begin{itemize}
\item non-suivi (avec la variante ignoré)
\item suivi :
\begin{itemize}
\item non modifié (par rapport au dernier état archivé)
\item modifié (par rapport au dernier état archivé)
\item sélectionné pour être archivé
\end{itemize}
\end{itemize}
\end{frame}

View File

@ -1,10 +0,0 @@
\begin{frame}
\frametitle{Exercices}
\framesubtitle{Configuration globale de git}
Les paramètres de l'application git peuvent être globaux ou propres à un dépôt.
L'ergonomie, l'identité, les alias sont souvent les mêmes pour tous les dépôts.
La première étape consiste généralement à renseigner ces paramètres.
Le premier exercice consiste donc à renseigner un minimum de ces variables globales.
\end{frame}

View File

@ -1,38 +0,0 @@
\begin{frame}
\frametitle{Mise en place}
\framesubtitle{Identité de l'utilisateur}
\begin{itemize}
\item \commande{git config --global user.name "<nom de l'utilisateur>"}
\item \commande{git config --global user.email "<courriel de l'utilisateur>"}
\end{itemize}
\begin{exampleblock}{En cas d'oubli}
\commande{git} émet un avertissement lors du premier commit si ces variables ne sont pas renseignées.
Il est possible de corriger cet oubli facilement si les commit n'ont pas encore été partagés.
\end{exampleblock}
\end{frame}
\begin{frame}
\frametitle{Mise en place}
\framesubtitle{Ergonomie}
\begin{itemize}
\item \commande{git config --global color.ui auto}
\item \commande{git config --global core.editor "<éditeur de texte à utiliser>"}
\item \commande{git config --global core.pager "<pager>"}
\end{itemize}
\end{frame}
\begin{frame}[fragile]
\frametitle{Mise en place}
\framesubtitle{Ergonomie (GNU/Linux)}
\begin{minted}{bash}
source ~/.git-prompt.sh
GIT_PS1_SHOWDIRTYSTATE=1
GIT_PS1_SHOWSTASHSTATE=1
GIT_PS1_SHOWUNTRACKEDFILES=1
GIT_PS1_SHOWUPSTREAM="auto"
PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '
\end{minted}
\begin{exampleblock}{git-prompt}
git-prompt.sh est un script définissant la fonction \_\_git\_ps1 permettant d'afficher des informations pertinentes sur l'état du dépôt git dans l'invite de commande.
\end{exampleblock}
\end{frame}

View File

@ -1,14 +0,0 @@
\begin{frame}
\frametitle{Exercices}
\framesubtitle{Initialiser un dépôt}
Un dépôt git peut être amorcé de différentes façons selon le contexte.
\begin{itemize}
\item le dépôt existe déjà en \emph{distant} :
\begin{itemize}
\item le dépôt distant est déjà au format git ;
\item le dépôt distant est géré par un autre scm ;
\end{itemize}
\item un répertoire local doit être converti en dépôt git ;
\end{itemize}
L'exercice propose la création d'un dépôt suivant ces différents contextes.
\end{frame}

View File

@ -1,21 +0,0 @@
\begin{frame}
\frametitle{Initialiser le dépôt}
\framesubtitle{Récupérer le dépôt git distant en ssh}
Le serveur de dépôt de test propose un dépôt par groupe.
\commande{git clone ssh://gogs@<adresse\_serveur>/formation/<groupe>}
\end{frame}
\begin{frame}
\frametitle{Initialiser le dépôt}
\framesubtitle{Récupérer le dépôt git distant en https}
L'accès au serveur est aussi permis en http(s)
\commande{git clone http://<adresse\_serveur>:3000/formation/<groupe>}
\end{frame}
\begin{frame}
\frametitle{Initialiser le dépôt}
\framesubtitle{Convertir le dossier local en dépôt git}
N'importe quelle répertoire peut être converti en dépôt git.
\commande{git init}
\end{frame}

View File

@ -1,9 +0,0 @@
\begin{frame}
\frametitle{Exercice}
\framesubtitle{Avoir des dépôts distants en référence}
Les dépôts distants sont un aspect important du fonctionnement d'un SCM décentralisé.
git permet d'associer plusieurs dépôts distants à un dépôt local et de renseigner à quelle branche de quel dépôt distant une branche locale doit se référer.
Le présent exercice aborde la mise en place de tels liens entre branches locales et branches distantes.
\end{frame}

View File

@ -1,31 +0,0 @@
\begin{frame}
\frametitle{Associer les dépôts distants}
\framesubtitle{Ajouter un dépôt distant}
\commande{git remote add <nom> <protocole>://[<utilisateur>@]<adresse>[:port]/<chemin>}
Exemples :
\begin{itemize}
\item \commande{git remote add formation ssh://gogs@localhost:3000/formation/exercices.git}
\item \commande{git remote add formation http://gogs@localhost:3000/formation/exercices.git}
\end{itemize}
\begin{exampleblock}{Vérification}
Les dépôts distants configurés peuvent être listés avec :
\begin{itemize}
\item \commande{git remote} pour la version sobre ou
\item \commande{git remote -v} pour plus de détails.
\end{itemize}
\end{exampleblock}
\end{frame}
\begin{frame}
\frametitle{Associer les dépôts distants}
\framesubtitle{Observer une branche distante}
Pour une branche distante existante :
\begin{itemize}
\item \commande{git branch --set-upstream-to=<nom\_dépôt\_distant>/<branche\_distante>}
\end{itemize}
Pour une branche distante inexistante :
\begin{itemize}
\item \commande{git push --set-upstream <nom\_dépôt\_distant> <branche\_locale>}
\end{itemize}
\end{frame}

View File

@ -1,7 +0,0 @@
\begin{frame}
\frametitle{Exercice}
\framesubtitle{Premier commit}
Le premier commit est toujours le plus facile. Pas de conflit à attendre, pas de stress…
Cet exercice permet de revoir le fonctionnement des \emph{arbres} de git avec l'ajout d'un simple fichier dans un dossier.
\end{frame}

View File

@ -1,138 +0,0 @@
\begin{frame}[fragile]
\frametitle{Premier pas}
\framesubtitle{Dépôt vide}
Au démarrage, est un dépôt vide :
\begin{minted}[fontsize=\tiny]{bash}
Sur la branche master
Validation initiale
rien à valider (créez/copiez des fichiers et utilisez "git add" pour les suivre)
\end{minted}
\end{frame}
\begin{frame}[fragile]
\frametitle{Premier pas}
\framesubtitle{Et pourtant…}
\begin{columns}
\begin{column}{0.5\textwidth}
L'initialisation consiste en la création du dossier .git :
\end{column}
\begin{column}{0.5\textwidth}
\begin{minted}[fontsize=\tiny]{bash}
.
└── .git
├── branches
├── config
├── description
├── HEAD
├── hooks
│   ├── applypatch-msg.sample
│   ├── commit-msg.sample
│   ├── post-update.sample
│   ├── pre-applypatch.sample
│   ├── pre-commit.sample
│   ├── prepare-commit-msg.sample
│   ├── pre-push.sample
│   ├── pre-rebase.sample
│   └── update.sample
├── info
│   └── exclude
├── objects
│   ├── info
│   └── pack
└── refs
├── heads
└── tags
\end{minted}
\end{column}
\end{columns}
\end{frame}
\begin{frame}
\frametitle{Premier pas}
\framesubtitle{Création d'un dossier}
\commande{mkdir doc}
\end{frame}
\begin{frame}[fragile]
\frametitle{Premier pas}
\framesubtitle{Création d'un dossier}
\commande{git status}
\begin{minted}[fontsize=\tiny]{bash}
Sur la branche master
Validation initiale
rien à valider (créez/copiez des fichiers et utilisez "git add" pour les suivre)
\end{minted}
\begin{exampleblock}{}
git ne prend en considération que le contenu des fichiers.
\end{exampleblock}
\end{frame}
\begin{frame}
\frametitle{Premier pas}
\framesubtitle{Création d'un fichier}
\commande{touch doc/README}
\end{frame}
\begin{frame}[fragile]
\frametitle{Premier pas}
\framesubtitle{Création d'un fichier}
\commande{git status}
\begin{minted}[fontsize=\tiny]{bash}
Sur la branche master
Validation initiale
Fichiers non suivis:
(utilisez "git add <fichier>..." pour inclure dans ce qui sera validé)
doc/
aucune modification ajoutée à la validation mais des fichiers non suivis sont présents
(utilisez "git add" pour les suivre)
\end{minted}
\end{frame}
\begin{frame}
\frametitle{Premier pas}
\framesubtitle{Création d'un fichier}
\commande{git add .}
\skbinput[from=fig]{apps/git_commande_add}
\end{frame}
\begin{frame}[fragile]
\frametitle{Premier pas}
\framesubtitle{Création d'un fichier}
\commande{git status}
\begin{minted}[fontsize=\tiny]{bash}
Sur la branche master
Validation initiale
Modifications qui seront validées :
(utilisez "git rm --cached <fichier>..." pour désindexer)
nouveau fichier : doc/README
\end{minted}
\end{frame}
\begin{frame}
\frametitle{Premier pas}
\framesubtitle{Création d'un fichier}
\commande{git commit -m "Ajout du premier fichier."}
\skbinput[from=fig]{apps/git_commande_commit}
\end{frame}
\begin{frame}[fragile]
\frametitle{Premier pas}
\framesubtitle{Création d'un fichier}
\commande{git status}
\begin{minted}[fontsize=\tiny]{bash}
Sur la branche master
rien à valider, la copie de travail est propre
\end{minted}
\end{frame}

View File

@ -1,8 +0,0 @@
\begin{frame}
\frametitle{Exercice}
\framesubtitle{Gérer son répertoire de travail}
Le répertoire de travail est la vue du dépôt la plus facile à prendre en main dans un dépôt git.
Cet exercice a pour but de bien maîtriser les quatre états des fichiers dans un dépôt git : non-suivi, suivi et identique au contenu de l'index, suivi et différent et enfin, suivi, différent et selectionné pour archivage.
La difficulté majeure, à ce stade, est de toujours contrôler les passages d'état pour ne pas archiver un fichier indésirable par exemple.
\end{frame}

View File

@ -1,115 +0,0 @@
\begin{frame}
\frametitle{Gérer son répertoire de travail}
\framesubtitle{Créer un fichier}
\commande{echo "userA userApwd" > password}
\end{frame}
\begin{frame}
\frametitle{Gérer son répertoire de travail}
\framesubtitle{Modifier un fichier}
Ajouter du texte au fichier doc/README
\end{frame}
\begin{frame}[fragile]
\frametitle{Gérer son répertoire de travail}
\framesubtitle{Admirer la complexité de la situation}
\commande{git status}
\begin{minted}[fontsize=\tiny]{console}
Sur la branche master
Modifications qui seront validées :
(utilisez "git reset HEAD <fichier>..." pour désindexer)
modifié : doc/README
Fichiers non suivis:
(utilisez "git add <fichier>..." pour inclure dans ce qui sera validé)
password
\end{minted}
\end{frame}
\begin{frame}[fragile]
\frametitle{Gérer son répertoire de travail}
\framesubtitle{À la croisée des chemins}
Associer les commandes suivantes :
\begin{columns}
\begin{column}{.3\textwidth}
\tiny{\commande{git add .}}
\tiny{\commande{git commit -m "Tout de go"}}
\end{column}
\begin{column}{.3\textwidth}
\tiny{\commande{git commit -am "Implicite"}}
\end{column}
\begin{column}{.3\textwidth}
\tiny{\commande{git add doc/README}}
\tiny{\commande{git commit -m "Explicite"}}
\end{column}
\end{columns}
aux résultats suivants :
\begin{columns}
\begin{column}{.3\textwidth}
\begin{minted}[fontsize=\tiny,breaklines,frame=single]{console}
Sur la branche master
Fichiers non suivis:
(utilisez "git add <fichier>..." pour inclure dans ce qui sera validé)
password
aucune modification ajoutée à la validation mais des fichiers non suivis sont présents (utilisez "git add" pour les suivre)
\end{minted}
\end{column}
\begin{column}{.3\textwidth}
\begin{minted}[fontsize=\tiny,breaklines,frame=single]{console}
Sur la branche master
rien à valider, la copie de travail est propre
\end{minted}
\end{column}
\begin{column}{.3\textwidth}
\begin{minted}[fontsize=\tiny,breaklines,frame=single]{console}
Sur la branche master
Fichiers non suivis:
(utilisez "git add <fichier>..." pour inclure dans ce qui sera validé)
password
aucune modification ajoutée à la validation mais des fichiers non suivis sont présents (utilisez "git add" pour les suivre)
\end{minted}
\end{column}
\end{columns}
\end{frame}
\begin{frame}
\frametitle{Gérer son répertoire de travail}
\framesubtitle{Parer les erreurs prévisibles}
\commande{echo "password" > .gitignore}
\commande{git add .gitignore}
\commande{git commit -m "Filtre de fichier à ne pas suivre"}
\end{frame}
\begin{frame}[fragile]
\frametitle{Gérer son répertoire de travail}
\framesubtitle{Laisser sur le côté de la route}
\commande{git status}
\begin{minted}[fontsize=\tiny]{console}
Sur la branche master
rien à valider, la copie de travail est propre
\end{minted}
\end{frame}
\begin{frame}
\frametitle{Gérer son répertoire de travail}
\framesubtitle{Et s'il est trop tard ?}
\commande{git reset HEAD\~{}1}
\end{frame}
\begin{frame}
\frametitle{Gérer son répertoire de travail}
\framesubtitle{Recueil de .gitignore}
Des .gitignore adaptés à différents contextes sont faciles à obtenir sur l'Internet.
\url{https://github.com/github/gitignore}
\end{frame}

View File

@ -1,8 +0,0 @@
\begin{frame}
\frametitle{Exercice}
\framesubtitle{Utiliser les branches}
Les branches sont faciles à créer et détruire dans un dépôt git.
Cela en fait un outil de choix pour l'organisation du développement.
L'exercice suivant aborde les manipulations de base avec les branches.
\end{frame}

View File

@ -1,219 +0,0 @@
\begin{frame}
\frametitle{Utiliser les branches}
\framesubtitle{Créer une branche}
On créé une branche qui contiendra le fichier password.
\commande{git checkout -b branche\_indiscrete}
équivalent de la succession de commandes :
\begin{enumerate}
\item \commande{git branch branche\_indiscrete}
\item \commande{git checkout branche\_indiscrete}
\end{enumerate}
\begin{tikzpicture}
\gitDAG[grow right sep = 1em]{
A -- B};
\gitbranch{master}{above=of B}{B}
\gitHEAD{above=of master}{master}
\end{tikzpicture}
\begin{tikzpicture}
\gitDAG[grow right sep = 1em]{
A -- B};
\gitbranch{master}{above=of B}{B}
\gitHEAD{above=of master}{master}
\gitbranch[brindis]{brancheindiscrete}{below=of B}{B}
\end{tikzpicture}
\begin{tikzpicture}
\gitDAG[grow right sep = 1em]{
A -- B};
\gitbranch{master}{above=of B}{B}
\gitbranch[brindis]{brancheindiscrete}{below=of B}{B}
\gitHEAD{below=of brindis}{brindis}
\end{tikzpicture}
\end{frame}
\begin{frame}
\frametitle{Utiliser les branches}
\frametitle{Aparté}
\commande{git add password}
\commande{git commit -m "le fichier indésirable"}
\end{frame}
\begin{frame}
\frametitle{Utiliser les branches}
\frametitle{Aparté}
\commande{git log master..branche\_indiscrete}
\commande{git log master..}
\commande{git reflog}
\end{frame}
\begin{frame}
\frametitle{Utiliser les branches}
\framesubtitle{Merge}
\commande{git checkout master}
\commande{git branch merge/automatique}
\commande{git branch merge/conflit}
\commande{git branch merge/rebase}
% \begin{tikzpicture}
% \gitDAG[grow down sep = 1em]{
% A -- B};
% \gitbranch{master}{left=of B}{B}
% \gitHEAD{left=of master}{master}
% \gitbranch[auto]{merge/automatique}{right=of master}{B}
% \gitbranch[conflit]{merge/conflit}{right=of auto}{B}
% \gitbranch[rebase]{merge/rebase}{right=of conflit}{B}
% \end{tikzpicture}
\end{frame}
\begin{frame}
\frametitle{Utiliser les branches}
\framesubtitle{Merge}
\commande{git checkout merge/automatique}
\commande{cp doc/README\{,.md\}}
\commande{git add doc/}
\commande{git commit -m "Copie du fichier"}
% \begin{tikzpicture}
% \gitDAG[grow down sep = 1em]{
% A -- B --{C}};
% \gitbranch{master}{right=of B}{B}
% \gitHEAD{left=of auto}{auto}
% \gitbranch[auto]{merge/automatique}{left=of C}{C}
% \gitbranch[conflit]{merge/conflit}{right=of master}{B}
% \gitbranch[rebase]{merge/rebase}{right=of conflit}{B}
% \end{tikzpicture}
\end{frame}
\begin{frame}
\frametitle{Utiliser les branches}
\framesubtitle{Merge}
\commande{git checkout merge/conflit}
Édition du fichier doc/README
\commande{git commit -am "Des ennuis en perspective"}
% \begin{tikzpicture}
% \gitDAG[grow down sep = 1em]{
% A -- B --{C, D}};
% \gitbranch{master}{right=of B}{B}
% \gitHEAD{left=of conflit}{conflit}
% \gitbranch[auto]{merge/automatique}{right=of C}{C}
% \gitbranch[conflit]{merge/conflit}{left=of D}{D}
% \gitbranch[rebase]{merge/rebase}{right=of master}{B}
% \end{tikzpicture}
\end{frame}
\begin{frame}
\frametitle{Utiliser les branches}
\framesubtitle{Merge}
\commande{git checkout merge/rebase}
Édition du fichier doc/README
\commande{git commit -am "Des ennuis en perspective"}
% \begin{tikzpicture}
% \gitDAG[grow right sep = 1em]{
% A -- B --{C, D, E}};
% \gitbranch{master}{above=of B}{B}
% \gitHEAD{above=of rebase}{rebase}
% \gitbranch[auto]{merge/automatique}{above=of C}{C}
% \gitbranch[conflit]{merge/conflit}{above=of D}{D}
% \gitbranch[rebase]{merge/rebase}{above=of E}{E}
% \end{tikzpicture}
\end{frame}
\begin{frame}
\frametitle{Utiliser les branches}
\framesubtitle{Merge}
\commande{git checkout master}
Édition du fichier doc/README pour ajouter des alias
\commande{git commit -am "Des ennuis en perspective"}
Pour chaque branche merge/*, tenter la commande :
\commande{git merge merge/<nom>}
\end{frame}
\begin{frame}
\frametitle{Utiliser les branches}
\framesubtitle{Rebase}
\commande{git checkout merge/rebase}
\commande{git rebase master}
% \begin{tikzpicture}
% \gitDAG[grow down sep = 1em]{
% A -- B --{C, D, E'}};
% \gitbranch{master}{right=of B}{B}
% \gitHEAD{left=of rebase}{rebase}
% \gitbranch[auto]{merge/automatique}{right=of C}{C}
% \gitbranch[conflit]{merge/conflit}{right=of D}{D}
% \gitbranch[rebase]{merge/rebase}{left=of E'}{E'}
% \end{tikzpicture}
\end{frame}
% \begin{tikzpicture}
% % Commit DAG
% \gitDAG[grow right sep = 2em]{
% A -- B -- {
% C,
% D -- E,
% }
% };
% % Tag reference
% \gittag
% [v0p1] % node name
% {v0.1} % node text
% {above=of A} % node placement
% {A} % target
% % Remote branch
% \gitremotebranch
% [origmaster] % node name
% {origin/master} % node text
% {above=of C} % node placement
% {C} % target
% % Branch
% \gitbranch
% {master} % node name and text
% {above=of E} % node placement
% {E} % target
% % HEAD reference
% \gitHEAD
% {above=of master} % node placement
% {master} % target
% \end{tikzpicture}
% \begin{tikzpicture}
% \gitDAG[grow right sep = 2em]{
% A -- B -- {
% C -- D' -- E',
% {[nodes=unreachable] D -- E },
% }
% };
% % Tag reference
% \gittag
% [v0p1] % node name
% {v0.1} % node text
% {above=of A} % node placement
% {A} % target
% % Remote branch
% \gitremotebranch
% [origmaster] % node name
% {origin/master} % node text
% {above=of C} % node placement
% {C} % target
% % Branch
% \gitbranch
% {master} % node name and text
% {above=of E'} % node placement
% {E'} % target
% % HEAD reference
% \gitHEAD
% {above=of master} % node placement
% {master} % target
% \SAandWT
% \end{tikzpicture}

View File

@ -1,11 +0,0 @@
\begin{frame}
\frametitle{Exercice}
\framesubtitle{Inspection générale}
Un historique de code n'a d'intérêt que si le besoin de connaître les actions
qui ont mené à un état se fait sentir.
git met à disposition divers outils pour inspecter l'historique.
Cet exercice se propose de présenter certains de ces outils.
Cet exercice s'appuie sur le contenu du dépôt git \emph{exercices} fourni.
\end{frame}

View File

@ -1,132 +0,0 @@
\begin{frame}
\frametitle{Inspection}
\framesubtitle{log}
Comparer les branches du dépôt \emph{exercices} en explorant les différentes options de git log (--graph, --all, --decorate, .., ...)
\commande{git log}
% contenu (pas trop long) de la diapositive
\end{frame}
\begin{frame}
\frametitle{Inspection}
\framesubtitle{log}
\begin{tikzpicture}
\begin{pgflowlevelscope}{\pgftransformscale{0.5}}
\gitDAG[grow right sep=1em]{
fcacc8a -- a3a980c -- {6d7f839 -- {d221665 -- 841f693 -- f5965df -- a12f94b -- 5464ee7, fe0c2b7 -- 6212e29 -- 0f13577 -- a60f3ed, f81ca5c, 7e54de0},
30a5821, b13bcf2, 902ae87}
};
\gitbranch
{master}
{above=of 6d7f839}
{6d7f839}
\gitbranch
{brancheindiscrete}
{right=of 902ae87}
{902ae87}
\gitbranch
{merge/conflit}
{right=of 30a5821}
{30a5821}
\gitbranch
{merge/automatique}
{right=of b13bcf2}
{b13bcf2}
\gitbranch
{merge/rebase}
{right=of 7e54de0}
{7e54de0}
\gitbranch
{branche/perdue}
{right=of f81ca5c}
{f81ca5c}
\gitbranch
{branche/minee}
{above=of 5464ee7}
{5464ee7}
\gitbranch
{histoire/confuse}
{right=of a60f3ed}
{a60f3ed}
\end{pgflowlevelscope}
\end{tikzpicture}
\end{frame}
\begin{frame}
\frametitle{Inspection}
\framesubtitle{bisect}
\begin{minipage}{\textwidth}
\begin{tikzpicture}
%\begin{pgflowlevelscope}{\pgftransformscale{0.5}}
\begin{pgflowlevel}{\pgftransformscale{0.6}}
\gitDAG[grow right sep=1em]{
fcacc8a -- a3a980c -- {6d7f839 -- {d221665 -- 841f693 -- f5965df -- a12f94b -- 5464ee7}}
};
\gitbranch
{master}
{above=of 6d7f839}
{6d7f839}
\gitbranch
{branche/minee}
{above=of 5464ee7}
{5464ee7}
%\end{pgflowlevelscope}
\end{pgflowlevel}
\end{tikzpicture}
\end{minipage}
La branche minee schématise une situation dans laquelle un dysfonctionnement a été introduit mais pas détecté
aussitôt.
Un script \emph{test.sh} a été ajouté pour simuler le test du code.
Il retourne \emph{0} lorsque le code est bon, \emph{1} lorsque le code est mauvais.
L'exercice consiste donc à utiliser la commande \commande{git bisect} pour repérer le commit ayant introduit l'erreur, c'est-à-dire à partir duquel le script retourne \emph{1}.
\end{frame}
\begin{frame}
\frametitle{Inspection}
\framesubtitle{bisect}
Conditions de départ :
\begin{itemize}
\item dernier \emph{commit} de la branche \emph{branche/minee}
\item dernier état du code fonctionnel : dernier \emph{commit} de la branche \emph{master}.
\end{itemize}
\begin{enumerate}[<+->]
\item \commande{git checkout branche/minee}
\item \commande{git bisect start} \# démarrage de la session de recherche
\item \commande{git bisect bad} \# déclaration de l'état du dernier \emph{commit}
\item \commande{git bisect good \$(git log --oneline -1 --format=\%h master)} \# déclaration du dernier état fonctionnel connu
\end{enumerate}
% contenu (pas trop long) de la diapositive
\end{frame}
\begin{frame}
\frametitle{Inspection}
\framesubtitle{bisect}
À chaque déplacement contrôlé par \commande{git bisect}, exécuter \emph{test.sh} et indiquer si l'état est fonctionnel :
\commande{./test.sh; [[ \$? -eq 0 ]] \&\& git bisect good || git bisect bad}
\end{frame}
\begin{frame}
\frametitle{Inspection}
\framesubtitle{bisect}
\commande{a12f94b62f617417f4b1f8c5317bc2f033c92f5a is the first bad commit}
Terminer la session de recherche :
\commande{git bisect reset}
\end{frame}
\begin{frame}
\frametitle{Inspection}
\framesubtitle{blame}
La conclusion précédente, vu la simplicité du code en cause, aurait pu être tirée grâce à \commande{git blame} et \commande{git log}.
% contenu (pas trop long) de la diapositive
\end{frame}
\begin{frame}
\frametitle{Inspection}
\framesubtitle{blame}
\begin{itemize}
\item \commande{git blame test.sh}
\item \commande{git log -S"exit 1" test.sh}
\end{itemize}
\end{frame}

View File

@ -1,8 +0,0 @@
\begin{frame}
\frametitle{Exercice}
\framesubtitle{Travail collaboratif}
En fait de travail collaboratif, chacun peut facilement personnifier l'enfer pour ses collègues.
L'exercice suivant propose de nettoyer son dépôt personnel avant de le rendre public.
% contenu (pas trop long) de la diapositive
\end{frame}

View File

@ -1,156 +0,0 @@
\begin{frame}
\frametitle{Travail collaboratif}
\framesubtitle{Nettoyage}
\begin{minipage}{\textwidth}
\begin{tikzpicture}
%\begin{pgflowlevelscope}{\pgftransformscale{0.5}}
\begin{pgflowlevel}{\pgftransformscale{0.6}}
\gitDAG[grow right sep=1em]{
fcacc8a -- a3a980c -- {6d7f839 -- {fe0c2b7 -- 6212e29 -- 0f13577 -- a60f3ed}}
};
\gitbranch
{master}
{above=of 6d7f839}
{6d7f839}
\gitbranch
{histoire/confuse}
{above=of a60f3ed}
{a60f3ed}
%\end{pgflowlevelscope}
\end{pgflowlevel}
\end{tikzpicture}
\end{minipage}
Le scénario proposé pour le nettoyage s'appuie sur la branche \emph{histoire/confuse}.
Les \emph{commit} n'y sont pas cohérents : mélange de corrections syntaxiques, orthographiques et grammaticales.
Le but est de redonner de la lisibilité à l'historique du dépôt en le réécrivant à l'aide de \commande{git rebase -i} et \commande{git add -i}.
\end{frame}
\begin{frame}
\frametitle{Travail collaboratif}
\framesubtitle{Nettoyage}
\begin{enumerate}[<+->]
\item \commande{git checkout histoire/confuse}
\item \commande{git show master..} \# aperçu des modifications à réorganiser
\item \commande{git rebase -i \$(git merge-base --fork-point master)} \# rebase de tous les commits depuis la divergence avec la branche \emph{master}
\end{enumerate}
\end{frame}
\begin{frame}[fragile]
\frametitle{Travail collaboratif}
\framesubtitle{Nettoyage}
À l'origine :
\begin{minted}[fontsize=\tiny]{console}
pick fe0c2b7 Commit un peu rapide.
pick 6212e29 Premier commit de correction
pick 0f13577 Deuxième commit de correction
pick a60f3ed Troisième et dernier (on espère) commit de correction
\end{minted}
Ce qu'on veut faire :
\begin{itemize}
\item un \emph{commit} pour les espaces superflues (0f13577 et 6212e29)
\item un \emph{commit} pour l'orthographe et la grammaire (0f13577, a60f3ed et 6212e29)
\item un \emph{commit} pour le contresens
\end{itemize}
\end{frame}
\begin{frame}[fragile]
\frametitle{Travail collaboratif}
\framesubtitle{Nettoyage}
\begin{enumerate}[<+->]
\item s'arrêter sur le \emph{commit} 6212e29 et répartir les modifications sur trois \emph{commit}
\item s'arrèter sur le \emph{commit} 0f13577 et répartir les modifications sur deux \emph{commit}
\item reformuler le message du \emph{commit} a60f3ed
\end{enumerate}
\begin{minted}[fontsize=\tiny]{console}
pick fe0c2b7 Commit un peu rapide.
e 6212e29 Premier commit de correction
e 0f13577 Deuxième commit de correction
r a60f3ed Troisième et dernier (on espère) commit de correction
\end{minted}
\end{frame}
\begin{frame}[fragile]
\frametitle{Travail collaboratif}
\framesubtitle{Nettoyage}
Pour chaque \emph{commit} édité :
\begin{enumerate}[<+->]
\item \commande{git reset HEAD\~{}1}
\item \commande{git add -i}
\item \commande{patch} et sélection du fichier à éditer
\item validation, refus ou édition du fragment de patch
\item sortie du mode patch
\item \commande{git add doc/README} suivi de \commande{git commit}
\item si il n'y a plus de modifications, \commande{git rebase --continue}, sinon, retour à l'étape 2
\end{enumerate}
\end{frame}
\begin{frame}[fragile]
\frametitle{Travail collaboratif}
\framesubtitle{Nettoyage}
\begin{minted}[fontsize=\tiny]{console}
f500056 Corrections orthographiques et grammaticales
a11256a Suppression des espaces superflues
1a03003 Corrections orthographiques et grammaticales
f48a802 Corrections orthographiques et grammaticales
9ed1adb Suppression des espaces superflues
7236369 Correction du contresens
fe0c2b7 Commit un peu rapide.
\end{minted}
\end{frame}
\begin{frame}[fragile]
\frametitle{Travail collaboratif}
\framesubtitle{Nettoyage}
Prêt pour la seconde passe.
\begin{minted}[fontsize=\tiny]{console}
pick fe0c2b7 Commit un peu rapide.
pick 7236369 Correction du contresens
pick 9ed1adb Suppression des espaces superflues
s a11256a Suppression des espaces superflues
pick f48a802 Corrections orthographiques et grammaticales
s 1a03003 Corrections orthographiques et grammaticales
s f500056 Corrections orthographiques et grammaticales
\end{minted}
\end{frame}
\begin{frame}[fragile]
\frametitle{Travail collaboratif}
\framesubtitle{Nettoyage}
Prêt pour la seconde passe.
\begin{minted}[fontsize=\tiny]{console}
f7caf4b Corrections orthographiques et grammaticales
cdcf39e Suppression des espaces superflues
7236369 Correction du contresens
fe0c2b7 Commit un peu rapide.
\end{minted}
\end{frame}
\begin{frame}
\frametitle{Travail collaboratif}
\framesubtitle{Nettoyage}
Évidemment, dans la situation décrite, peu de modifications mais imbriquées, un résultat équivalent mais plus rapidement obtenu avec :
\begin{enumerate}[<+->]
\item \commande{git reset \$(git merge-base --fork-point master)}
\item \commande{git add -i}
\end{enumerate}
\end{frame}
\begin{frame}
\frametitle{Travail collaboratif}
\framesubtitle{Nettoyage}
\begin{minipage}{\textwidth}
\begin{tikzpicture}
%\begin{pgflowlevelscope}{\pgftransformscale{0.5}}
\begin{pgflowlevel}{\pgftransformscale{0.6}}
\gitDAG[grow right sep=1em]{
fcacc8a -- a3a980c -- {902ae87}
};
\gitbranch
{brancheindiscrete}
{above=of 902ae87}
{902ae87}
%\end{pgflowlevelscope}
\end{pgflowlevel}
\end{tikzpicture}
\end{minipage}
Il ne reste plus qu'à purger les \emph{commit} de tous les fichiers embarrassants, ajoutés par inadvertance.
\begin{enumerate}[<+->]
\item \commande{git checkout branche\_indiscrete}
\item \commande{git filter-branch --tree-filter "git rm password" master..}
\end{enumerate}
% contenu (pas trop long) de la diapositive
\end{frame}

View File

@ -1,8 +0,0 @@
\begin{frame}
\frametitle{Travail collaboratif}
\framesubtitle{Partager}
Reprendre les exercices en incluant les commandes push, pull et fetch.
Côté serveur, tester les hooks.
% contenu (pas trop long) de la diapositive
\end{frame}

View File

@ -1,4 +0,0 @@
\begin{frame}
\frametitle{}
% contenu (pas trop long) de la diapositive
\end{frame}

View File

@ -1,9 +0,0 @@
\begin{frame}
\frametitle{Exercice}
\framesubtitle{Intégration dans les processus}
git est intégré dans divers processus, notamment les processus de packaging.
Cet exercice donne un aperçu d'une telle intégration dans le cas du packaging debian.
% contenu (pas trop long) de la diapositive
\end{frame}

View File

@ -1,35 +0,0 @@
\begin{frame}
\frametitle{Packaging debian}
\framesubtitle{buildpackage}
buildpackage regroupe les outils simplifiant le packaging debian basé sur des sources maintenues en dépôts git.
\commande{apt-get install git-buildpackage}
% contenu (pas trop long) de la diapositive
\end{frame}
\begin{frame}
\frametitle{Packaging debian}
\framesubtitle{patchs}
gbp-pq est la commande permettant de faire correspondre les commit d'une branche aux patchs d'un paquet.
Depuis la branche de packaging :
\commande{gbp-pq import}
Après modification du code et organisation en commit :
\commande{gbp-pq export}
% contenu (pas trop long) de la diapositive
\end{frame}
\begin{frame}
\frametitle{Packaging debian}
\framesubtitle{changelog}
git dch permet d'automatiser l'écriture du changelog en se basant sur les commit.
\commande{git dch}
% contenu (pas trop long) de la diapositive
\end{frame}
\begin{frame}
\frametitle{Packaging debian}
\framesubtitle{description du paquet}
Finalement, git buildpackage produit les fichiers nécessaires à la construction du paquet : .dsc, archive des sources, etc.
\commande{apt-get install git-buildpackage}
% contenu (pas trop long) de la diapositive
\end{frame}

View File

@ -1,7 +0,0 @@
\begin{frame}
\frametitle{Installer git}
\framesubtitle{sur les systèmes d'exploitation GNU/Linux}
\begin{itemize}
\item apt-get, dnf, emerge, pacman, zypper, \ldots{}
\end{itemize}
\end{frame}

View File

@ -1,8 +0,0 @@
\begin{frame}
\frametitle{Installer git}
\framesubtitle{sur les systèmes d'exploitation Apple}
\begin{itemize}
\item \url{http://git-scm.com/download/mac}
\item \url{https://mac.github.com/}
\end{itemize}
\end{frame}

View File

@ -1,8 +0,0 @@
\begin{frame}
\frametitle{Installer git}
\framesubtitle{sur les systèmes d'exploitation Microsoft©}
\begin{itemize}
\item \url{http://git-scm.com/download/win}
\item \url{https://windows.github.com/}
\end{itemize}
\end{frame}

View File

@ -1,9 +0,0 @@
\begin{frame}
\frametitle{Git en un mot}
\begin{itemize}
\item projet créé en 2005
\item sous licence GPLv2
\item gère le code source du noyau linux
\item est multiplateforme
\end{itemize}
\end{frame}

View File

@ -1,8 +0,0 @@
\begin{frame}
\frametitle{Références}
\begin{itemize}
\item \url{http://www.git-scm.com/docs}
\item Pro-git, S. Chacon et B. Straub, Apress, 2014
\item les pages de man : gitcore-tutorial, gitworkflows, gitcvs-migration
\end{itemize}
\end{frame}

View File

@ -1,11 +0,0 @@
\begin{frame}
\frametitle{Ce que cache le dépôt git}
\begin{description}[répertoire de travail]
\item[.git]<1-> Les objets et la configuration locale du dépôt git
\item[répertoire de travail]<2-> Une arborescence de fichiers accessible à l'édition, le bac à sable
\item[index]<3-> Les changements candidats à l'archivage
\item[HEAD]<4-> Le dernier état archivé
\item[stash]<5-> Une zone tampon pour les modifications à mettre momentanément de côté
\end{description}
\skbinput[from=fig]{apps/git_trees}
\end{frame}

View File

@ -1,7 +0,0 @@
\begin{frame}
\frametitle{Serveur de dépôts git}
\framesubtitle{Serveur basique ssh}
Ajout des clés des utilisateurs au fichier ~/.ssh/authorized\_keys de l'utilisateur administrant les dépôts.
Préciser l'utilisation d'un shell restreint, git-shell, pour limiter les droits (\commande{chsh git /usr/bin/git-shell}).
\end{frame}

View File

@ -1,10 +0,0 @@
\begin{frame}
\frametitle{Serveur de dépôts git}
\framesubtitle{GitLab}
Application combinant un serveur de dépôts git avec une interface web conviviale.
\begin{itemize}
\item Gestion des utilisateurs
\item Navigation dans les dépôts
\item Gestion des évènements git et web
\end{itemize}
\end{frame}

View File

@ -1,11 +0,0 @@
\begin{frame}
\frametitle{Serveur de dépôts git}
\framesubtitle{gitolite}
Application de gestion de dépôts git sans interface graphique
\begin{itemize}
\item Gestion des utilisateurs
\item Accès par ssh
\item Gestion fine des droits
\item Gestion sous la forme d'un dépôt git
\end{itemize}
\end{frame}

View File

@ -1,10 +0,0 @@
\begin{frame}
\frametitle{Serveur de dépôts git}
\framesubtitle{Gogs}
Application combinant un serveur de dépôts git avec une interface web conviviale.
\begin{itemize}
\item Gestion des utilisateurs
\item Navigation dans les dépôts
\item Gestion des évènements git et web
\end{itemize}
\end{frame}

View File

@ -1,8 +0,0 @@
\begin{frame}
\frametitle{Des branches pour étayer le tronc}
\begin{itemize}
\item maintenir l'histoire du code lisible
\item faciliter les divergences
\item éphémères ou pérennes
\end{itemize}
\end{frame}

Some files were not shown because too many files have changed in this diff Show More