{{tag>dev git worflow}}
:TODO_DOCUPDATE:
====== Workflow avec git ======
===== Création du dépôt nu =====
Créer un dépôt nu sur le serveur, le dossier **mon-projet.git** conteneur du projet sera créé automatiquement après validation de la commande suivante:
$ git init --bare mon-projet.git
===== Clonage =====
pour pouvoir accéder au dépôt l'utilisateur doit avoir un compte sur le serveur et les droits de lecture/écriture sur le dépôt. On utilise ici le protocole ssh pour cloner le dépot du serveur sur la machine de dev.
$ git clone user@server:port/path/to/repo
===== Import initial =====
Configurer les préférences git sur la machine de dev (nom utilisateur, signature). Créer le squelette du projet. Pour procéder au premier commit:
# Placer l'ensemble des fichiers dans l'index
$ git add --all
# Faire le premier commit avec signature
$ git commit -S
# Pousser les modifications sur le serveur distant
$ git push origin master
===== Créer une version : Commiter =====
- On modifie le projet dans le working directory ;
- On regroupe dans la zone d'index (staging area) les modifications que l'on souhaite retenir pour la prochaine révision **%%git add%%** ou **%%git add --patch%%**, **git mv** ou **git rm** ;
- On vérifie le contenu de l'index avec **%%git status%%** et **%%git diff --staged%%** ;
- On commit avec **git commit**: le contenu de la zone d'index est alors enregistré dans le dépôt Git (local repository), une nouvelle révision est créée.
===== Branches =====
Conserve des versions fonctionnelles du projet sur la branche master. Pour développer une nouvelle fonctionnalité, créer une branche expérimentale et développer dans la branche.
$ git checkout -b experimental
Récupérer les modification effectuées par
$ git fetch
Par défaut les branches locales ne sont pas poussées sur le serveur distant. Pour partager une branche locale, il faut le faire explicitement:
$ git push origin master
La commande précédente pousse les modifications apportées sur la branche master locale vers la branche origin/master
Pour partager une branche créée localement
git push origin ma-branche
Une fois le programme fonctionnel dans la branche expérimentale, on peut procéder à la fusion (merge) sur la branche master.
===== Merge =====
Lors de la fusion bien penser à ne pas utiliser le **fast forward** (comportement par défaut) en spécifiant l'argument **%%--no-ff%%**
===== Références =====
* https://git-scm.com/book/fr/v1/Les-branches-avec-Git-Les-branches-distantes
* [[https://delicious-insights.com/fr/articles-et-tutos/git-zones/|Présentation des zones]]