Blog Zenika

#CodeTheWorld

Java

Eclipse Indigo et EGit 1.0.0

Personne n’a pu passer au travers : le 22 juin dernier la fondation Eclipse a sorti Eclipse Indigo, sa release simultanée d’Eclipse et de plus de 60 projets.
Mais cette année, un projet intéressant est sorti en version 1.0.0 avec Indigo : EGit, le plugin d’intégration de Git dans Eclipse. Avec la migration de ses projets sous Git, la fondation Eclipse se devait d’avoir un plugin à la hauteur. C’est maintenant chose faite !
Un petit tour des fonctionnalités d’EGit.

Installation

Avec l’Eclipse Marketplace qui existe depuis Helios, rien de plus simple : chercher EGit et cliquer sur « Install ».

Configuration

Dans les préférences d’Eclipse, il est possible de configurer les options d’EGit dans « Team > Git », rien de bien compliqué, des options classiques de plugin VCS.
Mais encore mieux : dans « Team > Git > Configuration » vous pouvez configurer Git lui-même avec un onglet pour chaque niveau : ‘User’ (=’global’), ‘System’ ou ‘Repository’.
EGit-Preferences_.png

Repositories

Egit ajoute une nouvelle perspective « Git Repository Exploring » qui permet de gérer les repositories Git :

  • ajouter un repository existant (que vous avez déjà cloné en dehors d’Eclipse)
  • cloner un repository existant
  • créer un nouveau repository

EGit-Git_Repository_Exploring.png
Dans la vue « Git Repositories » vous pouvez alors parcourir, sur chaque repository :

  • les branches locales (la branche courante est signalée par un petit tick)
  • les tags
  • les références
  • les repositories distants
  • le dossier local

Utilisation quotidienne

Branching

Il suffit simplement de faire un clique droit sur une référence de la vue « Git Repositories » et de choisir « Create Branche ».
EGit-Create_Branch_.png
Selon votre configuration de « Label Decoration » le nom du repository et de la branche courante devraient apparaître dans les vues d’exploration du code.

Status

Pour voir l’état des modification locales, plusieurs moyen :

  • les décoration classiques dans le code : un > devant le nom d’un dossier/fichier modifié ou une étoile s’il est indéxé
  • la vue « Synchronize » de la perspective « Team Synchronization » qui possède le mode « Git Change Set » permettant de voir les modification indexées et celles qui ne le sont pas et qui permet de plus de faire une synchronisation par rapport à n’importe quelle référence
  • la nouvelle vue « Git Staging » depuis laquelle vous pouvez glisser/déposer les modifications de/hors l’index.

EGit-Git_Staging.png

Diff

Là rien de plus classique : en cliquant sur un fichier depuis les vues de synchronisation, cela ouvre le diff.

Commit

Le commit peut être fait directement depuis la vue « Git Staging » ou bien en lançant la fenêtre de commit depuis le menu contextuel.
EGit-Commit_Changes_.png

Historique

History

La classique vue « History » a été adapté pour intégrer l’historique Git avec le graphique des branches comme dans gitk.
EGit-History.png
Comme d’habitude la vue peut être synchronisée avec l’élément sélectionné, mais chose nouvelle : on peut modifier la portée de l’historique :

  • la ressource et ses enfants
  • le dossier parent
  • le projet
  • le repository

Recherche

Il est aussi possible de rechercher dans l’historique via la recherche « Git Search ».
EGit-Search_.png EGit-Search_Results.png
Il est alors possible d’ouvrir les commits pour avoir les information sur un commit. Cette vue est très sympathique.
EGit-Commit_View.png

Annotation

J’ai l’impression de faire découvrir cette fonctionnalité des (D)VCS à chaque fois que j’en parle à quelqu’un mais pour moi, c’est une fonctionnalité vraiment utile et elle ici parfaitement intégré dans Eclipse.
Egit-Blame.png

Utilisation ‘Avancé’

Fetch/Push

Le menu contextuel des remotes de la vue « Git Repositories » permet de lancer un fetch ou un pull selon l’élément.
EGit-Fetch.png
S’ouvre alors une fenêtre indiquant les références à fetcher/puller (configurable de manière assez pointue mais complexe) et le fetch/pull et ensuite lancé à la validation.
EGit-Fetch-Results.png

Merge

Cette fois, c’est le menu contextuel des branches de la vue « Git Repositories » qui permet de lancer un merge.
EGit-merge.png
Ensuite, si tout se passe bien, tant mieux. Sinon EGit se met en état de conflit et tous les fichiers en conflits seront indiqués avec une double-flèche rouge.
EGit-Conflit.png
Une résolution des conflits, des ‘add’ et enfin un commit (avec le message de conflit classique Git proposé par défaut) et le tour est joué.

Rebase

Le rebase se lance comme pour le merge (juste en dessous dans le menu contextuel).
Pas de conflit, pas de problème. Dans le cas contraire, une fenêtre de gestion du rebase apparait proposant les étapes classiques de rebase :

  • résolution et continue
  • suppression du commit et continue
  • abandon

EGit-Rebase_Result_.png
Si on demande la résolution, EGit ouvre alors la vue Eclipse de résolution de merge. Il faut ensuite résoudre les conflits, faire les ‘add’ et lancer ‘Rebase > Continue’ depuis le menu contextuel du repository pour passer à l’étape suivante, mais cela ne semble pas fonctionner dans le cadre de mon test…

Les défauts

Problèmes

Voici les problèmes que j’ai rencontré en utilisant un peu EGit :

  • les clones se font par défaut dans un dossier USER_HOME/git, pourquoi pas le workspace ? C’est tout de même configurable.
  • mon post-commit hook n’est pas lancé lors d’un commit via EGit (un bug dans JGit ?)
  • problème dans la continuation du rebase

Lacunes

Rapidement, les choses que je trouve qu’il manque encore dans EGit :

  • ouverture de la vue de commit depuis l’historique
  • parcourt du reflog (mais cela semble venir avec la 1.1 : git-reflog)
  • intégration du stash (mais de même cale devrait arriver assez vite)
  • ajout à l’index hunk par hunk (git add --patch)
  • rebase interactif (git rebase -i)
  • option pour le merge (entre autre --no-ff)
  • une vrai vue de résolution de merge à la tortoiseMerge : MINE et THEIRS en côte à côte et le résultat du merge en dessous. Mais j’ai jamais vu ça dans aucune intégration VCS dans Eclipse
  • enregistrement des WorkingSet de la vue de synchronisation (il faut refaire toute la manipulation de création à chaque fois pour le moment…)

Bilan

En conclusion, un plugin qui est assez mature pour une utilisation simple au quotidien malgré quelques lacunes et la ligne de commande est encore parfois nécessaire. Mais comparé à la version 0.8 d’il y a un an les évolutions sont énormes et cela ne laisse présager que du bon pour le futur de ce plugin.
Et vous ? Que pensez-vous de EGit ? Quelle fonctionnalité vous plaît ? Laquelle vous manque ?

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

En savoir plus sur Blog Zenika

Abonnez-vous pour poursuivre la lecture et avoir accès à l’ensemble des archives.

Continue reading