Git est un outil de gestion de ressources fabuleux, qui détronera un jour ou l’autre les vieux CVS ou SVN (quoique c’est peut être déjà le cas…). En attendant, voici une petite liste des commandes utiles, pour ceux débutant avec ou bien qui, comme moi, on des trous de mémoire régulièrement.

De l’installation à l’utilisation en passant par la configuration, tout l’essentiel sur les commit, push, branchs, tags et autres choses à ne pas oublier.

Installation et configuration

Installation

Pour un OS basé sur Debian, dont Ubuntu :

sudo apt-get install git-core git-gui git-doc

Configuration

Si vous travaillez avec un repo nécessitant une authentification ou simplement pour bien identifier votre identité lors de commit, vous pouvez définir votre nom et email de façon permanente (peut être modifié par la suite en retapant cette commande, mais vous évite de le faire à chaque commit) :

git config --global user.name "Julien Tilap LA VINH"
git config --global user.email tilap@domain.tld

Avec certain repo distant, d’autres informations peuvent être optionnellement définie. Par exemple avec GitHub :

git config --global github.user jlavinh
git config --global github.token passphrase

Gérer les dépot

Dans les exemples suivants, j’ai proposé des exemples en se basant sur les valeurs suivantes :

  • répertoire local du projet : /var/www/MINA/
  • le dépot distant est sur GitHub
  • le repo distant est accessible sur github.com:jlavinh/MINA.git

Créer un nouveau projet vide sur un dépot git vide

mkdir MINA
cd MINA
git init
touch README
git add README
git commit -m 'first commit'
git remote add origin git@github.com:jlavinh/MINA.git
git push -u origin master

Initialiser un projet git depuis un dépôt existant

cd /var/www/MINA/
git init
git remote add origin git@github.com:jlavinh/MINA.git
git pull -u origin master

Changer le dépôt git distant

git remote set-url origin git@github.com:jlavinh/Mina.git

Connaitre le dépôt git actuel

git config --get remote.origin.url

Utilisation de git durant le développement

Ci dessous la liste des actions les plus courantes. Il en existe bien d’autres pour des cas plus complexes, mais celles là vous permettront de travailler avec git au quotidien.

Ajouter un fichier au prochain commit

git add myfile.ext

Ajouter tous les fichiers créés ou modifiés au prochain commit

git add -A

Retirer un fichier ajouté avant de commiter

git reset HEAD file/to/remove.txt

Commiter sur le dépôt git local

La commande commitera les fichiers ajoutés précédemment avec un commentaire « My log message ». Si besoin, il vous sera demandé de vous authentifier par la suite.

git commit -m "My log message"

Et pour commiter avec une identité particulière de façon occasionnelle :

git commit --author "Firstname Lastname" -m "My log message"

Modifier le message du dernier commit

Cette commande ne fonctionnera que si vous n’avez pas encore pushé sur le serveur distant. Elle permet de changer le message joint au dernier commit.

git commit --amend -m "Here the new comment"

ou simplement la commande suivante qui vous ouvrira votre éditeur de texte préféré pour modifier le texte :

git commit --amend

Voir l’historique des commits

git log

Annuler un commit

Avant un push, pour annuler tous les commits fait depuis la dernière synchronisation git avec le dépôt distant :

git reset HEAD

et de même, mais uniquement sur un fichier :

git reset HEAD nomdufichier

Récupérer un fichier dans sa dernière version commitée

git checkout -- myfile

Récupérer les sources du dépôt distants

git fetch
git pull origin master

Gérer les conflits git lors d’une synchronisation

Si une erreur survient (conflit sur dse fichiers), vous pouvez au choix :

  • faire un checkout local (ignore vos modification locales et les remplace par la source distante)
  • stocker la version dans un autre répertoire (stash) pour la retravailler proprement
  • fusionner les sources (merge)

Pusher ses commit sur le dépot distant

Pour pousser sur le depot origin, dans la branch master :

git push origin master

Branches

Créer un branche

git branch experimental

et pour créer une branche et switcher directement dessus :

git checkout -b experimental

Lister les branches

git branch -v

Changer la branche courante

git checkout experimental

Supprimer une branche

git branch -d experimental

Récupérer une branche du dépôt git distant en local

git checkout -b branchname origin/branchname

Merger (fusionner) une branche avec une autre

Par exemple, pour fusionner la branche « experimental » avec la branche « master » :

git checkout master
git merge experimental

Les tags avec git

Lister les tags existants

git tag

Tagguer le dépôt git local

git tag -a v1.4 -m 'version 1.4'

Pousser un tag local sur le dépôt git distant

git push --tags

Statistiques

Connaitre le nombre de commit git par utilisateur

git shortlog -sn

Packaging

Pour avoir une tarball propre de la version de votre dépôt sans les fichiers inutiles en production (dont le répertoire .git) :

git archive --format=tar --prefix=some-folder-name/ 1.0 | gzip > /path/to/tarball.tar.gz

Vous aurez alors une tarball /path/to/tarball.tar.gz contenant un répertoire nommé some-folder-name avec les fichiers sources utiles du projet.

Pour aller plus loin

J’ai posté un article Git : annuler proprement des commits après un push.

Par ailleurs, des services de dép git utiles, connus, gratuits (dans certaines limites en nombre de projet ou en nombre de collaborateurs) :

  • BitBucket, gratuit, dépôt public et privés (limite sur le nombre de contributeurs) ;
  • GitHub gratuit pour 5 repo publiques.

Pour gérer vos dépot, 2 outils pratiques sous debian/ubuntu pour gérer visuellement vos dépôts :

  • giggle: permet de visionner l’historique de votre dépôt de façon graphique
  • git-gui: de même en moins beau, mais permet aussi de commiter, pusher, …

Par ailleurs, si vous souhaitez connaître plus de commande (il y aen a tant…)je vous recommande cette documentation en français de très bonne facture faite par Alex Girard. Vous y trouverez des tutoriaux et des commandes sur pioupioum.fr.
Vous trouverez aussi une cheatsheet courte et graphique par Roger Dudler.