Ce guide est une introduction simple et pratique pour commencer à travailler avec Git à partir de zéro. Ici, nous allons aller droit au but. Ce guide en 5 étapes d'un flux de travail vise à donner toutes les cartes pour la gestion de tout projet avec Git.

Commençons à utiliser Git maintenant.
Vérifions que Git soit installé à l'aide de la commande suivante dans le terminal:
git --version
Pour commencer à travailler sur un projet (dépôt - repository) Git, nous avons le choix d'en créer un nouveau ou d'en utiliser un existant (à partir de GitHub par exemple).

Créer un nouveau projet

Créer un nouveau dossier, l'ouvrir et exécuter la commande
git init
pour créer le nouveau dépôt.

Cloner un projet existant

Créer une copie de notre dépôt local en exécutant la commande
git clone /path/to/repository
si nous utilisons un serveur distant, cette commande sera
git clone username@host:/path/to/repository

Notre repository local est composé de trois "arbres" gérés par git.
Le premier est l'espace de travail qui contient réellement nos fichiers.
Le second est un l'Index qui joue un rôle d'espace de transit pour nos fichiers.
Et enfin, HEAD qui pointe vers la dernière validation faite.


Git répertoire de travail et validation

A. Commit

Nous recommandons d'utiliser une interface graphique pour gérer les commit, cela nous donne un meilleur aperçu de ce que nous voulons enregistrer.

  $ git gui // (git-gui)

Ajouter & Valider

Nous pouvons proposer un changement (l'ajouter à l'Index) en exécutant les commandes
git add <filename>
git add *
C'est la première étape dans un workflow git basique. Pour valider ces changements, utiliser
git commit -m "Commit message"
Les fichiers sont ainsi ajoutés au HEAD, mais pas encore dans notre dépôt distant.


B. Push

Tout d'abord, nous avons besoin d'un hôte (comme Github, Gitlab, Bitbucket ...) pour mettre notre projet en ligne. Si cela n'a pas encore été fait, créer simplement un compte sur l'une de ces plateformes.

Envoyer des changements

Nos changements sont maintenant dans le HEAD de la copie de notre dépôt local. Pour les envoyer à notre dépôt distant, exécuter la commande
git push origin master
Remplacer master par la branche dans laquelle nous souhaitons envoyer vos changements.

Si nous n'avons pas cloné notre dépôt existant et voulons le connecter à notre dépôt sur un serveur distant, nous devons l'ajouter avec
git remote add origin <server>
Maintenant, nous pouvons envoyer nos changements vers le serveur distant sélectionné

Le flux de travail complet devient ainsi:

Git pousser le changement vers le référentiel distant

A. Branches

Le 'Branching' permet à chaque développeur de créer une nouvelle version à partir du code d'origine afin d'isoler son travail des autres. Cela aide également Git à fusionner facilement les versions plus tard.

Imaginez que vous travaillez avec vos collègues sur le même fichier. Il y a de fortes chances que quelqu'un écrase, au moins partiellement, le travail d'un autre. Nous pouvons éviter cela en créant des branches afin d'isoler notre travail de celui des autres membres de l'équipe.

Git - branches et fusion workflow
En bref, une branche Git est une ligne de développement indépendante.
Remarque: chaque nœud d l'image ci-dessus représente un commit.

Branches

La branche master est la branche par défaut quand nous créons un dépôt. Utiliser les autres branches pour le développement et fusionner ensuite à la branche principale quand c'est fini.

Créer une nouvelle branche nommée "feature_x" et passer dessus pour l'utiliser
git checkout -b feature_x
retourner sur la branche principale
git checkout master
et supprimer la branche
git branch -d feature_x
une branche n'est pas disponible pour les autres tant que nous ne l'avons pas envoyée vers le dépôt distant
git push origin <branch>

Remarque: Git est livré avec des outils GUI intégrés pour explorer les branches - gitk . Nous recommandons de l'utiliser afin d'avoir un bon aperçu de l'organisation. Il suffit de le lancer dans le terminal:
gitk

B. Update & Merge


Mettre à jour & Fusionner

Pour mettre à jour notre dépôt local vers les dernières validations, exécuter la commande
git pull
dans l'espace de travail pour récupérer et fusionner les changements distants.
pour fusionner une autre branche avec la branche active (par exemple master), utiliser
git merge <branch>
dans les deux cas, git tente d'auto-fusionner les changements. Malheureusement, ça n'est pas toujours possible et résulte par des conflits. Nous devons alors résoudre ces conflits manuellement en éditant les fichiers indiqués par git. Ensuite, nous devons les marquer comme fusionnés avec
git add <filename>
après avoir fusionné les changements, nous pouvons en avoir un aperçu en utilisant
git diff <source_branch> <target_branch>


Annuler des changements

Si nous voulons, au contraire, supprimer toutes les modifications et validations locales, il faut récupérer le dernier historique du serveur et y pointer notre branche principale comme ceci:

Remplacer les modifications locales

git fetch origin
git reset --hard origin/master

Tag & Version

Il est recommandé de créer des balises pour les versions logicielles. Nous pouvons créer un nouveau tag nommé Hurna v1.3.0 en executant
git tag -a v1.3.0 -m "Hurna v1.3.0"

Log

Dans sa forme la plus simple, nous pouvons étudier l'historique en utilisant
git log
Nous pouvons ajouter de nombreux paramètres pour controler notre recherche. Pour voir uniquement les commits d'un certain auteur:
git log --author=michael-jeulinl
Pour voir un journal très compressé où chaque commit est une ligne:
git log --pretty=oneline
Pour voir un arbre ASCII de toutes les branches, décoré avec les noms des balises et des branches:
git log --graph --oneline --decorate --all
Voir uniquement les fichiers modifiés:
git log --name-status
Ce ne sont là que quelques-uns des paramètres possibles. Pour en savoir plus, utiliser
git log --help

Magnifique! Nous maîtrisons maintenant tout ce dont nous avons besoin pour gérer un projet et ses versions. Les prochains cours portent sur la mise en pratique plus avancée.