Utilisation

Fichier index et Working Directory

Le fichier index est un fichier contenant la liste de tous les blobs/trees présents dans les précédents commits, et représente tous les fichiers qui seront enregistrés lors de la prochaine action de commit.

Le Working Directory, comme son nom l'indique, est le repertoire de travail actuel sur lequel vous effectuez vos modifications. Ces dernieres doivent être intégrées à l'index pour qu'elles soient prises en compte dans le prochain commit. On peut facilement voir les différences entre le fichier index et le Working Directory avec la commande git status. Très facile grâce aux SHA1 encore une fois.

En local

Bien que Git soit un outil distribué, pour échanger ses fichiers il faut les modifier en local. Le principe de base pour respecter le Git Branching est :

  1. Création d'une branche dérivée à partir de la branche actuelle , git checkout -b
  2. Faire ses modifications
  3. Ajout des modifications au fichier index, avec la commande git add
  4. Effectuer un commit qui va sauvegarder vos modifications avec git commit
  5. Retourner sur la branche précédente
  6. Faire la fusion des deux branches avec git merge

Les principales opérations dont vous avez besoin en local sont : add, commit, status, diff ( liste les différences entre deux commits), reset (Reset le fichier index à une ancienne version), et merge (fusion)

A noter qu'avec Git, l'action de revenir à une version précédente ne fait pas pointer vers une ancienne version, mais crée un nouveau commit identique à la version souhaitée sur la branche actuelle

En distribué

La première chose à faire dans un travail collaboratif est définir le serveur distant, ou remote et donc de créer la branche origin. Pour cela il existe la commande git clone.

Une fois ceci fait, nous avons trois nouvelles possibilités : Pull, Push ou Fetch.

Fetch signifie : Donne moi tous les commits distants que je n'ai pas en local. . Une fois les pointeurs créés pour y accèder, je peux consulter le code, regarder les différences éventuelles avec mon travail etc... Pour le coller à mon Working Directory je dois explicitement demander un merge des branches désirées.

Le Pull, quant à lui, récupère tous les commits distants non présent et local, et les merge tout seul. Cette pratique un peu magique doit être restreinte car on ne sait pas ce qui peut se passer et peut engendrer des conflits avec le merge. On peut affirmer que Pull = Fetch + Merge l'un à la suite de l'autre.

En cas de conflit, Git vous préviendra des fichiers concernés, et vous demandera de manuellement résoudre le conflit en modifiant les fichiers.

L'action de push est d'envoyer ses commits au serveur remote.

La bonne pratique est la suivante :

  1. Créer le lien vers le serveur distant avec git clone
  2. Création d'une branche dérivée à partir de la branche actuelle , git checkout -b
  3. Faire ses modifications
  4. Ajout des modifications au fichier index, avec la commande git add
  5. Effectuer un commit qui va sauvegarder vos modifications avec git commit
  6. Retourner sur la branche précédente
  7. Effectuer un Fetch + Merge des branches concernées sur le serveur distant pour récupérer la dernière version
  8. Faire la fusion de la branche actuelle avec la branche contenant nos modifications avec git merge
  9. Regler les conflits éventuels
  10. Envoyer nos modifications au serveur avec git push

Outils