Create Git commands authored by Elise  JACQUEMET's avatar Elise JACQUEMET
## Sommaire <a name="sommaire"></a>
- [Configuration Git](#config)
- [Workflow Git](#workflow)
- [Nouvelle feature](#new-feature)
- [Correction de bug](#bugfix)
- [Correction critique sur master](#hotfix)
- [Déploiement nouvelle version](#MAJ)
<a name="config"></a>
## Configuration Git
Configuration obligatoire du `~/.gitconfig` :
```ini
[user]
name = Prénom Nom
email = prenom.nom@pasteur.fr
[branch]
autosetuprebase = always
```
Alias utiles :
```ini
[alias]
co = checkout
st = status
ci = commit
br = branch
ds = diff --staged
unstage = reset HEAD --
amend = commit --amend --no-edit
lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=iso --branches --tags --remotes
```
[:arrow_up:](#sommaire)
<a name="workflow"></a>
## Workflow Git
Le workflow se base sur [Git Flow](http://nvie.com/posts/a-successful-git-branching-model/) dans les grandes lignes. La branche `develop` contient les développements de la prochaine version, et `master` représente la version déployée sur le server Shinypro.
<a name="new-feature"></a>
#### Développement d'une nouvelle feature :
A faire sur develop !
```bash
$ git checkout develop
$ git checkout -b feature/ma-nouvelle-feature
... réaliser les développements
$ git commit -a
$ git push -u origin feature/ma-nouvelle-feature
```
Créer la Merge Request (banche feature/ma-nouvelle-feature -> develop dans GitLab. Référencer l'issue concernée dans le message de merge (en écrivant *issue #num-de-l'issue*)
[:arrow_up:](#sommaire)
<a name="bugfix"></a>
#### Correction de bug lié à une issue :
A faire sur develop !
```bash
$ git checkout develop
$ git checkout -b bugfix/mon-bugfix
... réaliser les développements
$ git commit -a
$ git push -u origin bugfix/mon-bugfix
```
Créer la Merge Request (banche bugfix/mon-bugfix -> develop dans GitLab. Référencer l'issue concernée dans le message de merge (en écrivant *issue #num-de-l'issue*)
[:arrow_up:](#sommaire)
<a name="hotfix"></a>
#### Hotfix :
Utilisé pour corriger rapidemment uetne erreur directement sur master, sans passer par develop.
```bash
$ git checkout master
$ git checkout -b hotfix/mon-hotfix
... réaliser les développements
$ git commit -a
$ git push -u origin hotfix/mon-hotfix
```
Créer la Merge Request associée dans GitLab. Une fois la branche mergée dans `master` il est possible de `cherry-pick` les commits sur `develop` par exemple :
```bash
$ git checkout develop
$ git cherry-pick identifiantducommit1
$ git cherry-pick identifiantducommit2
$ git push
```
[:arrow_up:](#sommaire)
<a name="MAJ"></a>
#### MAJ de master sur une nouvelle version (à déployer sur le server) :
Commencer par créer un tag sur **develop** lorsqu'une version satisfaisante pourrait être déployée
```bash
$ git checkout develop # (1)
$ git merge master # pour être sûrs que develop dispose de tous les commits de master (2)
# doit renvoyer "already up to date". Sinon, un commit de merge sera ajouté, avec de potentiels conflits.
$ git tag # pour voir les tags existants
$ git tag -a vx.x -m "stuart version x.x"
$ git push origin develop --tags # (3)
```
Une fois que le déploiement est validé, on met à jour master sur le tag créé
```bash
$ git checkout master # on retourne sur master
$ git merge --ff-only vx.x # on remonte master au niveau du tag en fast-forward (4)
$ git push origin develop master --tags
```
```
(1)
master o o develop
| |
o o
\ /
o
|
(2)
o develop
/ |
/ |
master o o
| |
o o
\ /
o
|
(3)
o develop
|
o vx.x
|
o
/ |
/ |
master o o
| |
o o
\ /
o
|
(4)
o develop
|
master o vx.x
|
o
/ |
/ |
o o
| |
o o
\ /
o
|
```
**NB :** les tests doivent être faits après l'étape `(2)`, une fois que `develop` dispose de tous les commits de `master`.
Si une branche de hotfix doit être créée à partir de `master` créer la branche de hotfix à partir de ce point.
**Impotant :**
- Toujours vérifier l'état di repository local avec `git lg` avant de les push sur le dépot distant.
- Une fois une Merge Request est mergée sur gitlab, vérifier le graph en ligne avant de pull les mises à jour en local : en cas d'erreur de merge, on peut forcer un pushde la version local sur le repository distant pour "annuler" le merger (en cas d'erreur dans le choix des branches par ex)
[:arrow_up:](#sommaire)
[Go back to Home page](Home)
\ No newline at end of file