Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
elisemaigne
Ecosystème git
Commits
be56f0e6
Commit
be56f0e6
authored
Nov 30, 2021
by
Elise Maigne
Browse files
review all pres, add git spaces
parent
90ce8591
Changes
4
Hide whitespace changes
Inline
Side-by-side
.gitlab-ci.yml
View file @
be56f0e6
...
...
@@ -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
:
...
...
images/exemple_commit.png
0 → 100644
View file @
be56f0e6
64.8 KB
mycss.css
View file @
be56f0e6
...
...
@@ -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
;
}
presentation.Rmd
View file @
be56f0e6
...
...
@@ -73,10 +73,7 @@ Qui permet :
]
---
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 (facultati
f sur linux et mac
)
####
un logiciel plus sympa que la ligne de comman
de
# Etape 2 (facultati
ve
)
####
choisir un endroit pour déposer son co
de
<center>
<img src="images/vocab2.png", width="90%">
</center>
---
# Etape 3 (facultative)
####
choisir un endroit pour déposer son co
de
# Etape 3 (facultative
sur mac et linux
)
####
un logiciel plus sympa que la ligne de comman
de
<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
in
it
git
clone git@forgemia.inra.fr:elise.maigne/2021_git.g
it
```
]
--
### 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>
---
#
P
rocessus "
classiqu
e" de travail avec git
#
Exemple de p
rocessus "
simpl
e" 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 "
C
e que j'ai fait"
git add
.
git commit -m "
J'explique en 2 moits c
e que j'ai fait"
git push
```
#### 4. Si
on
travail
le
à 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/)

---
# Regarder les différences entre le local et un autre état
```{bash, eval=FALSE}
git diff
git diff --staged
git diff HEAD
```

---
# 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 s
uperviser les "merge" à l'intérieur d'un projet ou permet à une personne extérieure au projet de contribuer.
S
uperviser 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;'>©Oliver Steele, <a>https://blog.osteele.com/2008/05/my-git-workflow/</a></p>
---
# des questions ?
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment