git

Git est un logiciel de gestion de versions décentralisé. Sa principale tâche est d’enregistrer l’évolution du contenu d’une arborescence de fichiers. Ce logiciel est utilisé pour gérer des projets informatiques de toutes tailles.

Site officiel : http://git-scm.com/

Installation

Téléchargement

site officiel http://git-scm.com/downloads

Git pour Windows http://msysgit.github.io/

Configuration

Commandes pour modifier les informations :

git config --global user.name "votre_pseudo"
git config --global user.email "moi@email.com"

Le fonctionnement d’un dépôt local

Stockage des instantanés

Git conserve en mémoire l’évolution des fichiers d’un projet. A chaque étape du projet, un instantané du répertoire de travail est stocké dans une base de donnée d’objets.

Type d’objets de la base de donnée d’objets :

  • blobs : contenu d’un fichier.
  • tree : liste d’objets blobs.
  • commit : résultat de la commande commit, point d’accès de l’historique car il donne un pointeur vers les commits parents.
  • tag : représente un commit spécifique.

Git utilise la somme de contrôle de chaque objet pour les identifier dans la base de données. L’index des objets enregistrés est donc une chaîne de caractères composée de 40 caractères hexadécimaux.

Création des instantanés

L’enregistrement d’une évolution du répertoire de travail se fait en deux temps. Les fichiers modifiés sont d’abord ajoutés à la zone d’index et deviennent des fichiers indexés. Les modifications des fichiers référencés dans la zone d’index sont ensuite enregistrées dans le répertoire git. Les fichiers indexés deviennent alors des fichiers validés.

Les trois espaces de traitements pour les fichiers gérés par Git :

  • Le répertoire de travail : dernière version des fichiers et répertoires du projet utilisables et modifiables.
  • La zone d’index : fichier de préparation du prochain instantané.
  • Le répertoire Git : la base de données des objets et des instantanés du projet.

HEAD représente le derniers instantané de la branche courante.

.gitignore

Le fichier .gitignore précise les fichiers que Git doit ignorer. Chaque ligne d’un fichier .gitignore spécifie un fichier ou un motif de chemin pour un groupe de fichiers.

Commandes pour gérer un dépôt local

git init

Créer un nouveau dépôt.

git init transforme le répertoire courant en dépôt git.

git init --bare depot.git crée un dépot depot.git sans répertoire de travail.

git add

Enregistre dans l’index les ajouts de fichiers et leurs modifications.

git add fichier ajoute ou met à jour fichier dans l’index.

git add . ajoute ou met à jour le répertoire de travail dans l’index, ne supprime pas les fichiers supprimés du répertoire de travail.

git add -u . modifie les entrées d’index pour correspondre à l’arbre de travail et supprime les fichiers supprimé dans le répertoire de travail, mais n’ajoute pas de nouveaux fichiers.

git add --all . ajoute, modifie et supprime les entrées d’index pour correspondre à l’arbre de travail. équivalent à git add . puis git add -u . .

git rm

Supprimer les fichiers de l’index.

git rm fichier supprime fichier du répertoire de travail et de l’index.

git rm --cached fichier supprime fichier de l’index mais ne le supprime pas du répertoire de travail.

git rm -r répertoire supprime récursivement répertoire du répertoire de travail et de l’index.

git rm -r --cached répertoire supprime récursivement répertoire de l’index et le conserve dans le répertoire de travail.

git mv

Renommer un fichier ou un dossier indexé.

git mv anciennom nouveaunom renomme anciennom de l’index et du répertoire de travail en nouveaunom.

git commit

Construit un instantané en enregistrant le contenu de l’index.

git commit ouvre un éditeur pour inscrire le message de commit et enregistre le commit.

git commit -m msg enregistre le commit avec le message de commit msg.

git commit -a ajoute à l’index les fichiers modifiés avant d’enregistrer le commit, n’ajoute pas les nouveaux fichiers.

git commit fichier ajoute à l’index fichier modifié et enregistre uniquement les changements de fichier.

git commit --amend -m newmsg remplace le dernier commit (HEAD) par un nouveau commit avec pour message newmsg.

git status

Affiche l’état du répertoire de travail et de la zone de d’index.

Catégories possibles d’un fichier :

  • untracked files : les fichiers ne sont ni dans l’index ni dans le répertoire de git.
  • Changes not staged for commit : les fichiers modifiés dans le répertoire de travail et non ajoutés dans l’index.
  • changes to be committed: les fichiers de l’index modifiés par rapport au répertoire de git.

git diff

Afficher la différence entre les différents espace de travail.

git diff affiche la différence entre contenu de l’index et celui du répertoire de travail.

git diff --cached affiche la différence entre le dernier commit (HEAD) et celui de l’index.

git diff HEAD affiche la différence entre le dernier commit (HEAD) et celui de l’index.

git diff A B affiche la différence entre un objet d’index A et un objet d’index B.

git log

Affiche l’historique des instantanées.

git log affiche l’historique depuis HEAD.

git log A affiche l’historique depuis l’index de commit A.

git blame

Affiche l’historique au niveau du fichier

git blame fichier pour chaque ligne de fichier indique l’index de commit qui l’a modifiée.

git reset

Efface les changements de l’index.

git reset rétabli le contenu de HEAD dans l’index.

git reset --hard rétabli le contenu de HEAD dans l’index et le répertoire de travail.

git reset fichier rétabli le contenu de fichier dans l’index depuis son contenu dans HEAD.

git reset A fichier rétabli le contenu de fichier dans l’index depuis son contenu dans le commit A.

git checkout

Efface les changements du répertoire de travail

git checkout fichier rétabli le contenu du fichier du répertoire de travail avec celui de l’index.

git checkout HEAD fichier rétabli le contenu du fichier du répertoire de travail et celui de l’index avec celui de HEAD.

git checkout A fichier rétabli le contenu du fichier du répertoire de travail et celui de l’index avec celui du commit A.

git clean

supprime les fichiers du répertoire de travail non suivis par git.

git clean -f force l’opération de suppression des fichiers non suivis.

git clean -n teste l’opération de suppression des fichiers non suivis.

Géré différentes versions d’un projet

Une branche du projet pointe sur un instantané. A chaque étape, la branche courante pointe sur le nouveau commit.

git branch

Liste et crée des branches

git branch liste les branches locales.

git branch -r liste les branches distantes.

git branch -a liste toutes les branches.

git branch branche créé une branche pointant sur HEAD .

git branch branche A créé une branche pointant sur A .

git branch -d branche supprime la branche branche.

git branch -m nouveaunombranche renomme la branche courante en nouveaunombranche.

git checkout

Change la branche courante.

git checkout branche change la branche courante vers branche et met à jour le répertoire de travail.

git checkout -b branche crée une nouvelle branche et change la branche courante vers branche.

git checkout -b branche A crée une nouvelle branche à partir de A et change la branche courante vers branche et met à jour le répertoire de travail.

git merge

fusionne des branches.

git merge branche fusionne la branche courante avec branche. Créé un commit si il n y a pas de conflits.

git tag

Marque les étapes importantes de l’avancement du projet.

git tag nom crée un tag nom et l’associe au commit courant.

Résolutions des conflits

Si une même partie de fichier est modifiée sur deux branches, leur fusion produit un conflit qu il faut résoudre. La commande git status indique les fichiers contenant des conflits. Les lignes à éditer sont indiquées par les marqueurs ««««, ======== et »»»». la commande git mergetool lance un utilitaire pour faciliter la résolution.

travailler avec des dépôts distants

cloner un dépôt

Les différents protocoles pour cloner un dépôt


local|Utilise les permissions du système de fichiers|$ git clone /opt/git/projet.git
$ git clone file:///opt/git/projet.git http ou https | Généralement en lecture seule | $ git clone http://exemple.com/projetgit.git git|Généralement en lecture seule, en écoute sur le port 9418, sans authentification| ssh|Sécurisé mais pas d’accès anonyme|$ git clone ssh://utilisateur@serveur/projet.git
$ git clone utilisateur@serveur:projet.git

local, git et ssh nécessitent l’installation de git sur le serveur.

git clone

Copie un dépôt distant.

git clone urldudepot copie le dépôt distant en local. Le dépôt distant est alors nommé origin.

git remote

Liste et gère les dépôts distants.

git remote liste les dépôts distants.

git remote -v liste les dépôts distants et les urls.

git remote add nomdudepot urldudepot ajoute un dépôt distant nomdudepot situé a l’adresse urldudepot.

git remote update met à jour les copies locales. Équivalent à git fetch pour chaque dépôt distant.

git fetch

Met à jour la copie locale d’un dépôt distant.

git fetch dépot récupère les commits de la branches distante. Ne modifie pas le répertoire local.

git push

Envoie les changements locaux vers les branches distantes

git push envoie les modifications de la branche locale du dépôt courant vers le dépôt distant origin .

git push depotdistant branche envoie les mises à jour de branche dans branche de depotdistant.

git push depotdistant branchelocale:branchedistante envoie les mises à jour de branchelocale dans branchedistante de depotdistant.

git pull

Synchronise la branche locale avec la branche distante.

git pull met à jour le dépôt local avec le contenu du dépôt distant.

références

http://git-scm.com/book/fr

http://www-cs-students.stanford.edu/~blynn/gitmagic/intl/fr

http://doc.ubuntu-fr.org/git

http://www.siteduzero.com/informatique/tutoriels/gerez-vos-codes-source-avec-git

Notes

notes
  • 23 Juin, 2013 » Git
  • 02 Juin, 2013 » Jekyll