Introduction à GIT

28 mai 2008

nicolas.thouvenin@inist.fr

Historique 2005
● ●

2009
Plus de 34 développeurs Des centaines de projets :
– – – – – –

Kernel Linux Gnome VLC GCC QT Etc ...

nicolas.thouvenin@inist.fr

Késako ?

« Every Git clone is a full-fledged repository with complete history and full revision tracking capabilities, not dependent on network access or a central server. Branching and merging are fast and easy to do. »

nicolas.thouvenin@inist.fr

« Et pourquoi qu'il est meilleur que les autres, s'il vous plaît »

Fini les .svn ou CVS qui traînent partout

Gestion globale d'une arborescence Valider ses modifications est différent d'envoyer ses modifications dans le tronc commun Valider, modifier, faire des branches se fait localement sans lien réseau sans lien avec un serveur central Gestion par dépôt centralisé ou distribué avec synchronisation

Commiter n'est pas publier

Enfin maître chez soi

Ne fait rien de moins que les autres

Interopérable

nicolas.thouvenin@inist.fr

Cas Pratique

A
~/conf/bash_aliases

B
~/conf/bash_aliases

C
~/conf/bash_aliases

nicolas.thouvenin@inist.fr

Initialisation sur A
[A]% [A]% [A]% [A]% [A]% [A]% [A]% mkdir ~/conf/ cd ~/conf/ git init echo "alias ll='ls -l'" > bash_aliases git status git add bash_aliases git commit

Sans serveur, proche des commandes svn

nicolas.thouvenin@inist.fr

Transférer sur B & C
[B]% git clone ssh://me@A/~/conf/ [C]% git clone ssh://me@A/~/conf/

Utilisation de ssh, mais possibilité d'utiliser le daemon Git : git:// ou un emplacement local

nicolas.thouvenin@inist.fr

Modification & synchronisation Réseau
[B]% [B]% [C]% [B]% [A]%
echo "alias rm='rm -i'" >> bash_aliases

git git git git

commit -a pull ssh://me@B/~/conf/ push ssh://me@A/~/conf/ reset --hard

Attention : par sécurité « push » ne répercute pas les modifications en local

nicolas.thouvenin@inist.fr

Modification & synchronisation par Patch
[B]% [B]% [B]% [B]% [C]% [C]%
echo "alias h='history'" >> bash_aliases

git git scp git git

commit -a format-patch origin -1 0001-message.txt @C:~ apply ~/0001-message.txt commit -a

Le patch est formaté idéalement pour être envoyé par mail plutôt que par scp. git am permet d'appliquer les patchs reçus dans sa boite aux lettres (mbox).

nicolas.thouvenin@inist.fr

Les branches
[A]% [A]% [A]% [A]% [A]% git branch cygwin git checkout cygwin
echo "alias cygc='cygcheck'" >> bash_aliases

git commit -a git diff master cygwin

Fusionner 2 branches est très simple :

git checkout master git merge cygwin

nicolas.thouvenin@inist.fr

Mise à disposition et partage
[B]% git clone --bare \ ~/conf ~/public_html/conf.git [B]% cd ~/public_html/conf.git [B]% git --bare update-server-info [B]% chmod a+x hooks/post-update [D]% git clone http://B/~me/conf.git

Avec http://, le dépôt est accessible en lecture seule. A la place d'un serveur web, on peut utiliser git-daemon qui permettra un partage optimal.

nicolas.thouvenin@inist.fr

En vrac
% % % % % % % % % git git git git git git git git git log revert status diff show tag archive svn bisect
● ● ● ● ● ● ● ● ● ●

gitk (TK) - livré en standard gitview (Python) - livré en standard gitX (Mac OS X) Git Extensions (windows) qgit (Qt) tig (text) giggle (gnome) Jgit (java) gitweb (web) git-browser (web)

etc ...

nicolas.thouvenin@inist.fr

Apprivoiser la bête

« git checkout » est différent de « svn checkout » !! « git update » n'existe pas !
Utiliser un dépôt de référence central !!! Ne pas oublier de partager/publier !!!!

nicolas.thouvenin@inist.fr

vs
● ● ● ● ● ● ● ● ● ● ●

git clone url git pull git add file git rm file git mv file git status git commit -a git diff git apply git branch git checkout

● ● ● ● ● ● ● ● ●

svn checkout url svn update svn add file svn rm file svn mv file svn status svn commit svn diff | less patch -p0
svn copy http://.../trunk http://.../branches/branch svn switch http://.../branches/branch

nicolas.thouvenin@inist.fr

Références

Fiche Plume http://www.projet-plume.org/fr/fiche/git Community Book (en français) http://alexgirard.com/git-book/ Site officiel http://git-scm.com/

nicolas.thouvenin@inist.fr