You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Des _workflows_ plus complexes existent pour les projets de grande envergure.
42
+
43
+
</summary>
37
44
38
45
Il existe des *workflows* plus complexes, notamment le `Git Flow` que j'utilise
39
46
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`,
45
52
intègre des modifications à tester avant de les intégrer dans la version
46
53
officielle (`main`).
47
54
55
+
</details>
56
+
48
57
::: {.tip}
49
58
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...).
50
59
@@ -81,7 +90,7 @@ En revanche, l'intégration des dernières modifications de `main` vers une bran
81
90
82
91
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.
{#fig-history-simple}
85
94
86
95
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.
87
96
@@ -95,16 +104,18 @@ Maintenant, imaginons le cas plus compliqué où Bob avait fait évoluer son cod
95
104
96
105
Son historique local diverge donc de l'historique distant:
{#fig-history-complicated}
99
108
100
109
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:
La première méthode, la plus simple, est le _merge_.
106
115
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
+
{#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
108
119
109
120
```python
110
121
import pandas as pd
@@ -124,20 +135,23 @@ Le rapatriement des modifications d'Alice dans l'historique de Bob crée un prem
124
135
125
136
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`.
126
137
127
-
Une autre approche est accessible, le _rebase_.
138
+
Une autre approche est accessible, le _rebase_. _In fine_ ceci va correspondre à cet historique, propre.
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:
132
143
133
144
1. Supprime temporairement le _commit_ local
134
145
2. Réalise un _fast forward merge_ maintenant que le _commit_ local n'est plus là
135
146
3. Rajoute le commit local au bout de l'historique
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
140
151
152
+
```shell
153
+
git config pull.rebase false
154
+
```
141
155
142
156
# Mise en pratique
143
157
@@ -150,7 +164,7 @@ Cet exercice se fait par groupe de trois ou quatre. Il y aura deux rôles dans c
150
164
- Une personne aura la responsabilité d'être **mainteneur**
151
165
- Deux à trois personnes seront **développeurs**.
152
166
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`).
154
168
155
169
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.
Copy file name to clipboardExpand all lines: content/git/introgit.qmd
+1-1Lines changed: 1 addition & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -969,7 +969,7 @@ Le prochain exercice vise à illustrer le principe des branches en inventant un
969
969
::: {.exercise}
970
970
## Exercice 9: Créer une nouvelle branche et l'intégrer dans `main`
971
971
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é.
973
973
974
974
2️⃣ Retournez sur votre dépôt local. Vous allez créer une branche nommée
0 commit comments