Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
Improve Eclipse Git integration
This project is part of the Google Summer of Code 2010
- Mentor: Matthias Sohn
- Student: Dariusz Luksza
Contents
Abstract
Git is one of the modern DVCS (distributed version control system); it is fast and effective, with lots of features and new solutions for version control systems. Right now, Eclipse has base support for Git ‘repositories’. Using EGit plug-in user interface developer can:
- commit changes
- create branches
- switch between branches
- fetch and push changes
- create and apply patches
- compare a single file with a local ‘repository’
One of disadvantage of the current plug-in version is the disability to review the current project status against local and remote repositories. Developer can only compare one file at a time with current local repository status. The first goal of this project is to integrate EGit plug-in with “Synchronize view” which is the default Eclipse view to show incoming and outgoing changes. Using this view, developer can clearly see changed files and compare them to the current repository status.
When talking about Git repositories, we must consider two situations: one, when we want to review the current state against the local repository and second, when we want to review the current state against the remote repository. In case of the local repository synchronization, we will always have to deal with staged and unstaged changes. In Git terminology staged change describes change that will be part of next commit. Using this view developer can easily add and remove changes from commit (this is equivalent with git add and git rm –cached command line actions). Beside that, there will be also possible review changes in particular file in Compare view that will gave us better overview on what changes will be included in commit.
Synchronizing with remote repository is more complicated task. First of all there should be a dialog or wizard that would gave possibility of adding (editing and removing) remote repositories. Secondly before synchronizing with particular repository developer should choose one repository from existing list, then select one branch from remote branches list. Then we can fire synchronize action with would be equivalent to calling sequence git fetch <repository> refs/<branch path>, git diff HEAD..FETCH_HEAD from the command line.
Second goal would be adding git stashing support to JGit and EGit. Stash is a useful feature of Git that gives the ability to 'hide' changes for a certain period of time and bring the current branch back to the previous state. Then, we can take our 'hidden' changes back from the stash. It is an indispensable tool when we start working on some new features and, all of a sudden, we must switch back to the previous repository state (or checkout different branch) to fix a bug.
My blog is available on http://luksza.org (right now 99% of posts are in Polish but new posts connected with this project will be published in English ;)).
You can reach me on e-mail dariusz dot luksza at gmail dot com or dariusz at luksza dot org for any details, questions, comments or criticism.
Project goals
- UI for tagging in EGit
- Integrate EGit with 'Synchronization View' with is Eclipse's default view for incoming and ongoing changes
- Integration for reviewing local unstaged and staged changes against current HEAD
- Integration for reviewing remote changes for current HEAD against selected remote branch
- Support for git stash
- Add stashing support to JGit
- Create corresponding UI in EGit.
Deliverables
- Source code for all features
- JUnits
- User guides
Source code location
All source code will be available as a patch set's in Gerrit. With each goal there will be connected an additional ticket in Bugzilla for detailed discussions.
- patch set for EGit tagging UI, 311262 - DONE. (blog entry describing this functionality)
- EGit Synchronization View support - I'll base my work on Remy's Suen's patch set, 309582 (change preview)
- first iteration - DONE (JUnits - DONE )
- fixing issues with common base ancestor and compare view - 317934 change set DONE
- Synchronize view should support changesets 318473 change set (change preview) DONE
- API improvements:
- Support for change direction indicator in ChangeSet patch DONE
All my work that I've done during Summer of Code can be downloaded from official Eclipse Google Summer of Code 2010 project download page hosted on Google Code.
Timeline
The primary goal of my project is to fully implement synchronization support in EGit. Before Summer of Code begins I was thinking that achieving primary goal would be much easier, but during the project it appears that my initial timeline was strongly underestimated. Therefore I'll keep my focus on synchronization view until it will be mature enough to be part of 0.9.0 release. I'll try to achieve that before Summer of Code ends so that I can work on initial stashing support in JGit(/EGit) as a GSoC student.
Date | Planned items |
---|---|
April 27 - May 15 | EGit tagging UI |
May 16 - July 16 | EGit Synchronization View support |
July 17 - July 31 | EGit Synchronization View ChangeSet support |
August 1 - August 16 | Fixing minor issues in synchronization |
Git Community: Related GSoC 2010 Projects
Find the accepted GSoC 2010 projects working on native git here