Skip to content

Commit 1202a02

Browse files
authored
Git, modifs suite au cours de 2024 (#568)
* issues * no readme * historique
1 parent 6ff0f63 commit 1202a02

File tree

2 files changed

+23
-9
lines changed

2 files changed

+23
-9
lines changed

content/git/exogit.qmd

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,13 @@ la branche en question disparaît :
3434

3535
![](https://inseefrlab.github.io/formation-bonnes-pratiques-git-R/slides/img/ghflow.png)
3636

37+
<details>
38+
39+
<summary>
40+
41+
Des _workflows_ plus complexes existent pour les projets de grande envergure.
42+
43+
</summary>
3744

3845
Il existe des *workflows* plus complexes, notamment le `Git Flow` que j'utilise
3946
pour développer ce cours. [Ce tutoriel](https://www.atlassian.com/fr/git/tutorials/comparing-workflows/gitflow-workflow), très bien fait,
@@ -45,6 +52,8 @@ Cette fois, une branche intermédiaire, par exemple une branche `development`,
4552
intègre des modifications à tester avant de les intégrer dans la version
4653
officielle (`main`).
4754

55+
</details>
56+
4857
::: {.tip}
4958
Vous pourrez trouvez des dizaines d’articles et d’ouvrages sur ce sujet dont chacun prétend avoir trouvé la meilleure organisation du travail (_Git flow_, _GitHub flow_, _GitLab flow_...). Ne lisez pas trop ces livres et articles sinon vous serez perdus (un peu comme avec les magazines destinés aux jeunes parents...).
5059

@@ -81,7 +90,7 @@ En revanche, l'intégration des dernières modifications de `main` vers une bran
8190

8291
Imaginons deux personnes qui collaborent sur un projet, Alice et Bob. Bob a mis de côté le projet quelques jours. Il veut récupérer les avancées faites par Alice pendant cette période. Celle-ci a fait évoluer le projet, supposons avec un seul _commit_ puisque cela ne change rien.
8392

84-
![](https://inseefrlab.github.io/formation-bonnes-pratiques-git-R/slides/img/ff.png){#fig-history-simple}
93+
![Historique de Bob en retard (cas simple)](https://inseefrlab.github.io/formation-bonnes-pratiques-git-R/slides/img/ff.png){#fig-history-simple}
8594

8695
L'historique de Bob est cohérent avec celui sur `Github`, il lui manque juste le dernier _commit_ en bleu (@fig-history-simple). Il suffit donc à Bob de récupérer ce _commit_ en local avant de commencer à éditer ses fichiers.
8796

@@ -95,16 +104,18 @@ Maintenant, imaginons le cas plus compliqué où Bob avait fait évoluer son cod
95104

96105
Son historique local diverge donc de l'historique distant:
97106

98-
![](https://inseefrlab.github.io/formation-bonnes-pratiques-git-R/slides/img/ff.png){#fig-history-complicated}
107+
![Historique de Bob en retard (cas plus compliqué)](https://inseefrlab.github.io/formation-bonnes-pratiques-git-R/slides/img/divergence.png){#fig-history-complicated}
99108

100109
Les derniers commits ne sont pas les mêmes. `Git` ne peut pas résoudre de lui-même la divergence. C'est à Bob de trancher sur la version qu'il préfère. Deux stratégies pour réconcilier les historiques sont accessibles:
101110

102111
* Le _merge_ ;
103112
* Le _rebase_.
104113

105-
![](https://inseefrlab.github.io/formation-bonnes-pratiques-git-R/slides/img/merge.png){#fig-history-merge}
114+
La première méthode, la plus simple, est le _merge_.
106115

107-
Le rapatriement des modifications d'Alice dans l'historique de Bob crée un premier commit de merge. Les fichiers en question présenteront alors des balises permettant d'identifier la divergence de version et la source de celle-ci. Dans le fichier brut, cela donnera
116+
![Historique de Bob en retard: résolution par _merge_](https://inseefrlab.github.io/formation-bonnes-pratiques-git-R/slides/img/merge.png){#fig-history-merge}
117+
118+
Le rapatriement des modifications d'Alice dans l'historique de Bob crée un premier commit de _merge_. Les fichiers en question présenteront alors des balises permettant d'identifier la divergence de version et la source de celle-ci. Dans le fichier brut, cela donnera
108119

109120
```python
110121
import pandas as pd
@@ -124,20 +135,23 @@ Le rapatriement des modifications d'Alice dans l'historique de Bob crée un prem
124135

125136
Une fois les versions réconciliées, il ne reste plus qu'à faire un nouveau _commit_. Cette histoire réconcilie les versions d'Alice et Bob. L'inconvénient est qu'elle rend l'historique non linéaire (voir la [documentation d'Atlassian](https://www.atlassian.com/fr/git/tutorials/using-branches/git-merge) pour plus de détails) mais c'est `Git` qui a géré automatiquement ce sujet en créant une branche temporaire. Jusqu'à récemment, ceci était le comportement par défaut de `Git`.
126137

127-
Une autre approche est accessible, le _rebase_.
138+
Une autre approche est accessible, le _rebase_. _In fine_ ceci va correspondre à cet historique, propre.
128139

129140
![](https://inseefrlab.github.io/formation-bonnes-pratiques-git-R/slides/img/rebase1.png){#fig-history-rebase1}
130141

131-
`Git` effectue trois étapes:
142+
Néanmoins ceci implique des étapes intermédiaires qui consistent à réécrire l'historique, ce qui est déjà une opération avancée. En fait, `Git` effectue trois étapes:
132143

133144
1. Supprime temporairement le _commit_ local
134145
2. Réalise un _fast forward merge_ maintenant que le _commit_ local n'est plus là
135146
3. Rajoute le commit local au bout de l'historique
136147

137148
![](https://inseefrlab.github.io/formation-bonnes-pratiques-git-R/slides/img/rebase2.png){#fig-history-rebase2}
138149

139-
Le _commit_ local a changé d'identité, ce qui explique son nouveau SHA. Cette approche présente l'avantage de garder un historique linéaire. Néanmoins, elle peut avoir des effects de bord et est donc à utiliser avec précaution (plus d'explications dans [la documentation de `Git`](https://git-scm.com/book/fr/v2/Les-branches-avec-Git-Rebaser-Rebasing#s_rebase_peril))
150+
Le _commit_ local a changé d'identité, ce qui explique son nouveau SHA. Cette approche présente l'avantage de garder un historique linéaire. Néanmoins, elle peut avoir des effects de bord et est donc à utiliser avec précaution (plus d'explications dans [la documentation de `Git`](https://git-scm.com/book/fr/v2/Les-branches-avec-Git-Rebaser-Rebasing#s_rebase_peril)). Quand on débute, et même après, il est recommandé de privilégier la méthode _merge_. Pour cela, en ligne de commande, il faut taper la commande
140151

152+
```shell
153+
git config pull.rebase false
154+
```
141155

142156
# Mise en pratique
143157

@@ -150,7 +164,7 @@ Cet exercice se fait par groupe de trois ou quatre. Il y aura deux rôles dans c
150164
- Une personne aura la responsabilité d'être **mainteneur**
151165
- Deux à trois personnes seront **développeurs**.
152166

153-
1️⃣ Le.la mainteneur.e crée un dépôt sur `Github` avec un `README` et un `.gitignore`. Il/Elle donne des droits au(x) développeur.euse(s) du projet (`Settings > Manage Access > Invite a collaborator`).
167+
1️⃣ Le.la mainteneur.e crée un dépôt sur `Github` __sans cliquer sur l'option `Add a README`__. Créer un `.gitignore` selon le modèle `Python`. Il/Elle donne des droits au(x) développeur.euse(s) du projet (`Settings > Manage Access > Invite a collaborator`).
154168

155169
2️⃣ Chaque membre du projet, crée une copie locale du projet (un _clone_). Si vous avez un trou de mémoire, vous pouvez retourner au chapitre précédent pour vérifier la démarche.
156170

content/git/introgit.qmd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -969,7 +969,7 @@ Le prochain exercice vise à illustrer le principe des branches en inventant un
969969
::: {.exercise}
970970
## Exercice 9: Créer une nouvelle branche et l'intégrer dans `main`
971971

972-
1️⃣ Ouvrir une *issue* sur `Github`. Signaler qu'il serait bien d'ajouter un emoji chat dans le README. Dans la partie de droite, cliquer sur la petite roue à côté de `Label` et cliquer sur `Edit Labels`. Créer un label `Markdown`. Normalement, le label a été ajouté.
972+
1️⃣ Ouvrir une *issue* sur `Github` (cf. explications ci-dessus sur le principe des _issues_). Signaler qu'il serait bien d'ajouter un emoji chat dans le `README`. Dans la partie de droite, cliquer sur la petite roue à côté de `Label` et cliquer sur `Edit Labels`. Créer un label `Markdown`. Normalement, le label a été ajouté.
973973

974974
2️⃣ Retournez sur votre dépôt local. Vous allez créer une branche nommée
975975
`issue-1`

0 commit comments

Comments
 (0)