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’.
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
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”.
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.
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.
Historique
History
La classique vue “History” a été adapté pour intégrer l’historique Git avec le graphique des branches comme dans gitk.
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”.
Il est alors possible d’ouvrir les commits pour avoir les information sur un commit. Cette vue est très sympathique.
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.
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.
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.
Merge
Cette fois, c’est le menu contextuel des branches de la vue “Git Repositories” qui permet de lancer un merge.
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.
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
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 ?