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://www-cs-students.stanford.edu/~blynn/gitmagic/intl/fr
http://www.siteduzero.com/informatique/tutoriels/gerez-vos-codes-source-avec-git