Commit be56f0e6 authored by Elise Maigne's avatar Elise Maigne
Browse files

review all pres, add git spaces

parent 90ce8591
......@@ -13,6 +13,7 @@ cache:
before_script:
- Rscript -e "if (!requireNamespace('renv', quietly = TRUE)) install.packages('renv')"
- Rscript -e "install.packages('showtext')"
- Rscript -e "renv::restore()"
pages:
......
......@@ -4,3 +4,26 @@
background-repeat:no-repeat;
}
h2, h3, h4 {
margin-bottom: 0;
}
.h3space {
font-weight: bold;
font-size: var(--header-h3-font-size);
color: var(--text-bold-color);
margin-top: 2em;
margin-bottom: 2em;
}
.left-column {
width: 20%;
float: left;
}
.right-column {
width: 75%;
float: right;
padding-top: 0;
}
......@@ -73,10 +73,7 @@ Qui permet :
![ok](images/cry.png)]
---
class: center, middle
# Git et son écosystème
<img src="images/logo_git.png", width="300" height="300">
......@@ -88,18 +85,34 @@ class: center, middle
</center>
---
# Etape 2 (facultatif sur linux et mac)
#### un logiciel plus sympa que la ligne de commande
# Etape 2 (facultative)
#### choisir un endroit pour déposer son code
<center>
<img src="images/vocab2.png", width="90%">
</center>
---
# Etape 3 (facultative)
#### choisir un endroit pour déposer son code
# Etape 3 (facultative sur mac et linux)
#### un logiciel plus sympa que la ligne de commande
<center>
<img src="images/vocab3.png", width="90%">
</center>
---
# A quoi ressemble un projet versionné ?
.left-column[
#### Sur ma machine :
<img src="images/capture_ecran_git.png", width = "90%">
]
--
.right-column[
#### Sur forgemia.inra.fr :
https://forgemia.inra.fr/elise.maigne/2021_git/-/tree/main
<img src="images/capture_ecran_forgemia.png", width = "90%">
]
---
class: center, middle
......@@ -109,44 +122,254 @@ class: center, middle
---
# Initialisation
### Sur sa machine
1. Depuis un projet (dossier) :
**Prérequis : j'ai mis ma clé ssh sur un serveur distant**
.pull-left[
### Je démarre un projet sur la forge
1. Création d'un projet sur une forge (avec README)
2. Clone de ce projet sur sa machine en local
```{bash, eval=FALSE}
git init
git clone git@forgemia.inra.fr:elise.maigne/2021_git.git
```
]
--
### Sur un serveur distant (gitlab par exemple)
1. Création d'un projet sur une forge
2. Clone de ce projet sur sa machine en local avec `git clone`
.pull-right[
### J'ai déjà un dossier en local
1. `git init`
2. Création d'un projet sur une forge (sans README)
3. "Push an existing folder"
]
```{bash, eval=FALSE}
git clone git@forgemia.inra.fr:elise.maigne/2021_git.git
--
<center>
```{r, echo=FALSE, fig.height=1.5}
gitsteps <- DiagrammeR::grViz("
digraph {
rankdir = LR;
bgcolor = '#EAEAEA'
edge [minlen = 3]
node [fontsize=40 shape=cylinder style=filled color='#822744' fillcolor='#c98399' fontcolor='#822744' width=2 height=1.5 penwidth=4]
local [label=<local<br/>repository>]
remote [label=<remote<br/>repository>]
node [fontcolor='#595959' color='#595959' fillcolor = '#ededed']
workdir [label=<working<br/>directory>]
stage [label=<stage<br/>(index)> penwidth=0.5]
workdir -> stage -> local -> remote
}
")
widgetframe::frameableWidget(gitsteps)
```
</center>
--
---
# Les "espaces" git
<center>
```{r, echo=FALSE, fig.height=1.5}
gitsteps <- DiagrammeR::grViz("
digraph {
rankdir = LR;
bgcolor = '#EAEAEA';
bgcolor = '#EAEAEA'
edge [minlen = 3]
node [fontsize=40 shape=cylinder style=filled fontcolor='#595959' color='#595959' fillcolor = '#ededed' width=2 height=1.5 penwidth=4]
local [label=<local<br/>repository>]
remote [label=<remote<br/>repository>]
workdir [label=<working<br/>directory>]
stage [label=<stage<br/>(index)> penwidth=0.5]
workdir -> stage -> local -> remote
}
")
widgetframe::frameableWidget(gitsteps)
```
</center>
<br/>
.pull-left[
- **working directory**
- **stage**
- **local repository**
- **remote repository**
]
.pull-right[
]
---
# Les "espaces" git
<center>
```{r, echo=FALSE, fig.height=1.5}
gitsteps <- DiagrammeR::grViz("
digraph {
rankdir = LR;
bgcolor = '#EAEAEA'
edge [minlen = 3]
node [fontsize=40 shape=cylinder style=filled color='#822744' fillcolor='#c98399' fontcolor='#822744' width=2 height=1.5]
local [label=local penwidth=4]
remote [label=remote penwidth=4]
node [fontcolor='#b0b0b0' color='#b0b0b0' fillcolor = '#ededed']
stage [label=stage]
head [label=HEAD]
local -> stage -> head -> remote
node [fontsize=40 shape=cylinder style=filled fontcolor='#595959' color='#595959' fillcolor = '#ededed' width=2 height=1.5 penwidth=4]
local [label=<local<br/>repository>]
remote [label=<remote<br/>repository>]
workdir [label=<working<br/>directory>]
stage [label=<stage<br/>(index)> penwidth=0.5]
workdir -> stage -> local -> remote
}
")
widgetframe::frameableWidget(gitsteps)
```
</center>
<br/>
.pull-left[
- .h3space[working directory]
- **stage**
- **local repository**
- **remote repository**
]
.pull-right[
Mon espace de travail classique, sur ma machine. Là où je code.
]
---
# Les "espaces" git
<center>
```{r, echo=FALSE, fig.height=1.5}
gitsteps <- DiagrammeR::grViz("
digraph {
rankdir = LR;
bgcolor = '#EAEAEA'
edge [minlen = 3]
node [fontsize=40 shape=cylinder style=filled fontcolor='#595959' color='#595959' fillcolor = '#ededed' width=2 height=1.5 penwidth=4]
local [label=<local<br/>repository>]
remote [label=<remote<br/>repository>]
workdir [label=<working<br/>directory>]
stage [label=<stage<br/>(index)> penwidth=0.5]
workdir -> stage -> local -> remote
}
")
widgetframe::frameableWidget(gitsteps)
```
</center>
<br/>
.pull-left[
- **working directory**
- .h3space[stage]
- **local repository**
- **remote repository**
]
.pull-right[
<br/>
<br/>
Aussi appelé **index** ou **zone de stagging**.
Un espace de transit sur lequel sont observées les modifications de fichier.
]
---
# Les "espaces" git
<center>
```{r, echo=FALSE, fig.height=1.5}
gitsteps <- DiagrammeR::grViz("
digraph {
rankdir = LR;
bgcolor = '#EAEAEA'
edge [minlen = 3]
node [fontsize=40 shape=cylinder style=filled fontcolor='#595959' color='#595959' fillcolor = '#ededed' width=2 height=1.5 penwidth=4]
local [label=<local<br/>repository>]
remote [label=<remote<br/>repository>]
workdir [label=<working<br/>directory>]
stage [label=<stage<br/>(index)> penwidth=0.5]
workdir -> stage -> local -> remote
}
")
widgetframe::frameableWidget(gitsteps)
```
</center>
<br/>
.pull-left[
- **working directory**
- **stage**
- .h3space[local repository]
- **remote repository**
]
.pull-right[
<br/>
<br/>
<br/>
Le dépôt de version local, sur ma machine.
Enregistre tous les changements (commits).
]
---
# Les "espaces" git
<center>
```{r, echo=FALSE, fig.height=1.5}
gitsteps <- DiagrammeR::grViz("
digraph {
rankdir = LR;
bgcolor = '#EAEAEA'
edge [minlen = 3]
node [fontsize=40 shape=cylinder style=filled fontcolor='#595959' color='#595959' fillcolor = '#ededed' width=2 height=1.5 penwidth=4]
local [label=<local<br/>repository>]
remote [label=<remote<br/>repository>]
workdir [label=<working<br/>directory>]
stage [label=<stage<br/>(index)> penwidth=0.5]
workdir -> stage -> local -> remote
}
")
widgetframe::frameableWidget(gitsteps)
```
</center>
<br/>
.pull-left[
- **working directory**
- **stage**
- **local repository**
- .h3space[remote repository]
]
.pull-right[
<br/>
<br/>
<br/>
<br/>
<br/>
Le dépôt de version distant, sur une forge.
Enregistre tous les changements (commits) et permet de partager son dépôt.
]
---
# Un commit = un changement
......@@ -154,7 +377,7 @@ widgetframe::frameableWidget(gitsteps)
#### 1. On indique à git qu'il doit suivre ces fichiers et on intègre les modifications au prochain commit `git add`
.pull-left[
```{bash, eval=FALSE}
git add *
git add .
```
]
......@@ -180,16 +403,17 @@ gitsteps <- DiagrammeR::grViz("
rankdir = TB;
bgcolor = '#EAEAEA';
edge [minlen = 3]
node [fontsize=40 shape=cylinder style=filled color='#822744' fillcolor='#c98399' fontcolor='#822744' width=2 height=1.5]
local [label=local penwidth=4]
stage [label=stage]
head [label=HEAD]
node [fontcolor='#b0b0b0' color='#b0b0b0' fillcolor = '#ededed']
remote [label=remote penwidth=4]
local -> stage [label = add fontsize=30 penwidth=4]
stage -> head [label=commit fontsize=30 penwidth=4]
head -> remote
{rank = same; local; stage; head; remote;};
node [fontsize=40 shape=cylinder style=filled color='#822744' fillcolor='#c98399' fontcolor='#822744' width=2 height=1.5 penwidth=4]
workdir [label=<working<br/>directory>]
stage [label=<stage<br/>(index)> penwidth=0.5]
local [label=<local<br/>repository>]
node [fontcolor='#595959' color='#595959' fillcolor = '#ededed']
remote [label=<remote<br/>repository>]
workdir -> stage [label = add fontsize=30 penwidth=4]
stage -> local [label=commit fontsize=30 penwidth=4]
local -> remote
{rank = same; workdir; stage; local; remote;};
}")
widgetframe::frameableWidget(gitsteps)
```
......@@ -200,14 +424,43 @@ widgetframe::frameableWidget(gitsteps)
En pratique (chez moi - sur RStudio) :
```{bash, eval=FALSE}
git add *
git add .
git commit -m "Ce que j'ai fait comme modif"
```
---
# Un projet versionné = une succession de commits.
#### Exemple sur forgemia
https://forgemia.inra.fr/elise.maigne/2021_git/-/commits/main
#### Exemple avec gitk
<img src="images/commits_gitk.png", width="90%">
---
# Un commit = un changement
```{r, echo=FALSE, fig.height=0.5}
gitbranch2 <- DiagrammeR::grViz("
digraph {
rankdir='LR';
bgcolor='transparent';
node[width=0.15, height=0.15, shape=point, color='#822744'];
edge[weight=2, arrowhead=none, color='#822744'];
node[group=master];
1 -> 2 -> 3 -> 4 -> 5 -> 6
6 -> 7 [penwidth=6]
7-> 8;
}")
widgetframe::frameableWidget(gitbranch2)
```
<img src="images/exemple_commit.png">
---
# Envoi des modifications au remote
#### Envoi des commits en attente sur le HEAD
#### Envoi des derniers commits au serveur distant
```{bash, eval=FALSE}
git push
```
......@@ -219,15 +472,17 @@ gitsteps <- DiagrammeR::grViz("
rankdir = TB;
bgcolor = '#EAEAEA';
edge [minlen = 3]
node [fontsize=40 shape=cylinder style=filled color='#822744' fillcolor='#c98399' fontcolor='#822744' width=2 height=1.5]
head [label=HEAD]
remote [label=remote penwidth=4]
node [fontcolor='#b0b0b0' color='#b0b0b0' fillcolor = '#ededed']
local [label=local penwidth=4]
stage [label=stage]
local -> stage -> head
head -> remote [label = push fontsize=30 penwidth=4]
{rank = same; local; stage; head; remote;};
node [fontsize=40 shape=cylinder style=filled color='#822744' fillcolor='#c98399' fontcolor='#822744' width=2 height=1.5 penwidth=4]
local [label=<local<br/>repository>]
remote [label=<remote<br/>repository>]
node [fontcolor='#595959' color='#595959' fillcolor = '#ededed']
workdir [label=<working<br/>directory>]
stage [label=<stage<br/>(index)> penwidth=0.5]
workdir -> stage -> local
local -> remote [label = push fontsize=30 penwidth=4]
{rank = same; workdir; stage; local; remote;};
}")
widgetframe::frameableWidget(gitsteps)
```
......@@ -239,59 +494,53 @@ git pull
```
<center>
```{r, echo=FALSE, fig.height=1.5}
```{r, echo=FALSE, fig.height=2}
gitsteps <- DiagrammeR::grViz("
digraph {
rankdir = TB;
bgcolor = '#EAEAEA';
edge [minlen = 3]
node [fontsize=40 shape=cylinder style=filled color='#822744' fillcolor='#c98399' fontcolor='#822744' width=2 height=1.5]
local [label=local penwidth=4]
remote [label=remote penwidth=4]
node [fontcolor='#b0b0b0' color='#b0b0b0' fillcolor = '#ededed']
head [label=HEAD]
stage [label=stage]
local -> stage -> head -> remote
remote -> local [label = pull fontsize=30 constraint=false penwidth=4]
{rank = same; local; stage; head; remote;};
node [fontsize=40 shape=cylinder style=filled color='#822744' fillcolor='#c98399' fontcolor='#822744' width=2 height=1.5 penwidth=4]
workdir [label=<working<br/>directory>]
remote [label=<remote<br/>repository>]
node [fontcolor='#595959' color='#595959' fillcolor = '#ededed']
local [label=<local<br/>repository>]
stage [label=<stage<br/>(index)> penwidth=0.5]
workdir -> stage -> local -> remote
remote -> workdir [label = <<br/>pull> fontsize=30 constraint=false penwidth=4]
{rank = same; workdir; stage; local; remote;};
}")
widgetframe::frameableWidget(gitsteps)
```
</center>
---
# Processus "classique" de travail avec git
# Exemple de processus "simple" de travail avec git
#### 1. Un projet versionné sur un serveur distant
#### 2. Je travaille comme d'habitude sur mes fichiers
#### 3. De temps en temps = une modification en particulier :
#### 3. De temps en temps = je marque un point d'étape de mon travail :
```{bash, eval=FALSE}
git add *
git commit -m "Ce que j'ai fait"
git add .
git commit -m "J'explique en 2 moits ce que j'ai fait"
git push
```
#### 4. Si on travaille à plusieurs : on récupère les modifications des autres (avant de me remettre à travailler)
#### 4. Si travail à plusieurs : je récupère les modifications des autres (avant de me remettre à travailler)
```{bash, eval=FALSE}
git pull
```
---
# Visualiser l'historique = les commits
[Exemple :](https://forgemia.inra.fr/elise.maigne/2021_package_renv/-/commits/master/)
![excommits](images/commits_renv.png)
---
# Regarder les différences entre le local et un autre état
```{bash, eval=FALSE}
git diff
git diff --staged
git diff HEAD
```
![gitdiff](images/gitdiff.png)
---
# Les fichiers git
......@@ -340,9 +589,9 @@ digraph {
node[group=branch];
2 -> 6 -> 7 -> 4;
node[group=branch];
2 -> 8 -> 9 -> 10;
2 -> 8 -> 9 -> 10 -> 5;
node[group=branch];
2 -> 11 -> 12 -> 13 -> 14 -> 15;
3 -> 11 -> 12 -> 13;
}")
widgetframe::frameableWidget(gitbranch1)
```
......@@ -351,7 +600,7 @@ widgetframe::frameableWidget(gitbranch1)
--
.pull-right[
Développement d'un package R : une branche correspond à une modification majeure du code. La branche main est toujours supposée tourner.
Développement d'un package R : une branche correspond à une modification majeure du code, faite à plusieurs.
```{r, echo=FALSE, fig.height=4}
gitbranch2 <- DiagrammeR::grViz("
digraph {
......@@ -410,11 +659,11 @@ Il faut choisir entre les 2 versions pour pouvoir finaliser le merge
---
# Les branches
#### Merge request/pull request
#### Merge request/pull request (sur une forge)
Crée une demande de rajout de code.
Outil pour superviser les "merge" à l'intérieur d'un projet ou permet à une personne extérieure au projet de contribuer.
Superviser les "merge" à l'intérieur d'un projet ou permet à une personne extérieure au projet de contribuer.
- Dicussion
- Gestion des conflits
......@@ -446,6 +695,7 @@ Exemple : j'ai un projet qui crée un fichier html à l'aide de Rmarkdown. --> S
#### CI/CD (integration continue)
Compiler ses Rmd automatiquement.
Faire des tests automatiques (ex. `R cmd CHECK`).
--
......@@ -469,6 +719,9 @@ Un projet "principal" forké (`git fork`) par les étudiants qui partent de la m
#### Visualiser
- `git diff`
- `git blame`
#### Savoir où on en est
- `git status`
]
.pull-right[
......@@ -481,11 +734,16 @@ Un projet "principal" forké (`git fork`) par les étudiants qui partent de la m
#### Revenir en arrière
- `git revert`
#### Savoir où on en est
- `git status`
...
#### Des mots que l'on risque de croiser en travaillant avec git
- `HEAD` = pointe vers un commit (= un état du dépôt, classiquement le dernier commit de la branche sur laquelle on est)
]
---
# Des points de repère
<img src="images/git-transport.png">
<p style='font-size: 10px;'>&copy;Oliver Steele, <a>https://blog.osteele.com/2008/05/my-git-workflow/</a></p>
---
# des questions ?
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment