Outils

Voici des listes d'outils liés à Git :

Généraux

Smartgit

http://www.syntevo.com/smartgit/

Non-libre, écrit en Java, fonctionne sous Windows, Mac et GNU/Linux. Il a l'air très complet et plutôt clair.

Git-gui

Libre. Développement arrêté en 2010. Pas très clair ni pratique...

Git-cola

Libre mais pas très pratique non plus.

Giteye

http://www.collab.net/downloads/giteye

Non libre mais gratuit. Très bien fait. Fonctionne sous Windows, Mac et GNU/Linux.

Historique

Gitk l incontournable

Pour moi le meilleur outil de visualisation pour Git et pour des DVCS en général. Il est parfaitement équilibré entre simplicité et possibilités.

Si on le lance sans paramètre depuis l'intérieur d'un dépôt, il montre simplement la liste des commits avec, pour chaque commit, la liste des fichiers modifiés et le détail des modifications. On peut aussi :

  • rechercher un commit en renseignant une partie du message de commit ou une partie d'une ligne qui a été modifiée ou encore sur un nom de fichier concerné par le commit.
  • voir les différences par ligne ou par mot.
  • se déplacer dans l'historique, supprimer un commit...
  • voir l'historique restreint à un utilisateur, à un fichier, à un dossier...

gitk

Gitstats

http://gitstats.sourceforge.net/

Libre et dans les dépôt de la plupart des distributions Linux. Gitstats est très simple d'utilisation. Lorsqu'on l'exécute on lui précise le dépôt à analyser et un dossier de résultat, il génère un site web statique à plusieurs onglets pour visualiser toute sorte d'informations et statistiques sur l'activité du dépôt. On peut ensuite simplement ouvrir avec son navigateur le fichier index.html qui se situe dans le dossier de résultat et consulter localement la page web.

Git instaweb

"git instaweb" est une commande fournie avec Git qui démarre un serveur web pour permettre la visualisation de l'historique d'un dépôt dans une interface web.

Diff évolué et gestion de conflits

Les outils de diff meld et vimdiff sont décrits dans ce chapitre.

Les autres diff évolués sont :

  • kdiff3
  • diffuse

Importer-transformer un dépôt SVN, CVS, Mercurial...

Mercurial to Git

http://hivelogic.com/articles/converting-from-mercurial-to-git/

Subversion to Git

Avec l'outil git-svn :

git svn clone svn+ssh://USER@URL

CVS to Git

Avec l'outil git-cvs qui ajoute la commande "git cvsimport" :

https://www.kernel.org/pub/software/scm/git/docs/v1.4.4.4/cvs-migration.html

Hébergement

Gitolite

http://gitolite.com/gitolite/install.html

Gitolite est une réécriture de gitosis. C'est un système de gestion de dépôts Git qui utilise les clés SSH comme authentification et SSH comme accès aux dépôts. La particularité de ce système est que sa configuration est elle même gérée par un dépôt Git. Il est facile à déployer et à maintenir. Il ne permet pas l'authentification par login/mdp via HTTP.

scm-manager

https://www.scm-manager.org/

Interface web facile à installer pour gérer des dépôts Git, Mercurial et Subversion. Cet outil ne fourni que la gestion des dépôt et pas une gestion de projet associé.

Gitlab

Gitlab est un clone de Github qu'il est possible d'héberger soi même. C'est une interface web sur laquelle on peut gérer l'accès par clé SSH et user/password HTTP et HTTPS. On dispose aussi d'un wiki par projet, un fil de discussion, des pull-requests etc...

Gitlab est assez fastidieux à installer mais sur cette page : https://about.gitlab.com/downloads/ est documentée une installation plus simple avec un paquet pour Ubuntu.

Astuces

Historique d un fichier

Si on lance gitk avec un fichier ou un dossier en paramètre, l'historique est filtré sur les événements concernant uniquement ce ou ces fichiers. C'est très pratique à l'usage pour voir les dernières modifications sur un fichier par exemple ou encore identifier les différentes personnes ayant travaillé sur un fichier en particulier.

Plugin VIM : GitGutter

J'utilise VIM et le plugin GitGutter qui affiche des infos en début de ligne pour savoir ce qui a été modifié depuis le dernier commit. Un + pour une nouvelle ligne, un - pour signaler une suppression et un ~ pour une modification :

gitgutter

word-diff

On peut demander au diff de Git de formater son résultat par mot ou bloc de mots au lieu de faire du diff classique par ligne :

diff

word-diff

Git Prompt

On peut modifier son prompt pour qu'il affiche des informations supplémentaires lorsqu'on se trouve dans un dépôt Git. C'est très pratique pour voir instantanément quelle est la branche courante, si on a déjà commité, combien de fichiers sont modifiés...

  • Simple

De base, Git fourni une fonction bash nommée __git_ps1 qui donne des infos sur le dépôt dans lequel on se trouve. Il suffit d'ajouter un appel à cette fonction à la fin de la définition de son prompt dans votre ~/.bashrc . Par exemple :

PS1='\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w$(__git_ps1)\$'
  • Avancé Plusieurs projets de définition de prompt très évolués existent. Ils s'appellent ou dérivent presque tous de bash-git-prompt . Celui que j'utilise : https://github.com/magicmonty/bash-git-prompt L'énorme avantage qu'il a par rapport au simple __git_ps1 est qu'il indique le nombre de commits en retard ou en avance par rapport à un dépôt distant (origin/master il me semble). On peut donc voir très facilement si on doit puller avant de commencer à travailler. Il indique aussi le nombre de fichiers non-suivis ce qui permet parfois d'éviter d'oublier un "git add". Ce prompt apporte le confort très appréciable de ne pas avoir à tapper "git status" toutes les deux minutes.