Preview of EGit integration with Synchronization View

Since of May 16 I’m officially working on integration EGit with Synchronization View. Right now I know that this task is more complicated then I was thinking before GSoC. But thanks Remy Suen and his initial contribution to EGit which gave me some foundation this isn’t so scary as it could be ;). Here is a very quick overview of current situation.

Currently there are three way to launch synchronization:

  1. From synchronize wizard
    Second step of wizard requires some work, it has some usability issues …
  2. From branch context menu in Repositories View
    In this case we are synchronizing current HEAD (active branch), with selected branch; locally made uncommited changes are excluded in this comparison.
  3. From project’s context menu by selecting Team -> Synchronize
    After this we would see above dialog:
    Where we can select source and target branch or tag (both are supported) and declare does we want include local changes in this comparison

No matter with way will you use, you always will see something similar to this:

When you will use EGit Synchronization view there are few important things that you have in mind:

  1. Synchronization always occur on repository level. What it means ? It means that you cannot synchronize a single folder or file (for “file synchronization” there is a Compare With -> HEAD Revision / Git index). If you have more then one project in repository (eg. two or more maven modules), synchronize action will compare all of them.
  2. Changes are organized in commits and can’t be extracted or moved between them. You can only merge entire commit.

This two things distinguish Git from CVS/SVN.

This isn’t end of my work with synchronization view. There are lots of things that should be improved, implemented and fixed 😉 eg.:

  • showing proper files in Compare view (currently compare view always compares local file with remote, in some cases it should compare file that is in selected branch instead of current local)
  • splitting changes into commits when we will presenting it in Synchronize view (this is important because after it would be implemented we can start thinking of implementing merging from synchronize view)
  • performance improvements
  • usability improvements
  • (and of course) bug fixes 😉

EGit @ Poznań Eclipse DemoCamp

Yesterday Matthias Sohn, my mentor in Google Sumer of Code, ask me would I like to talk about EGit on Poznan Eclipse DemoCamp. After a moment’s reflection I’ve decided that this a great opportunity for me to get more involved in Eclipse community.

There are not much time for preparation, but I’m not a guy that prefer to have everything fixed, I’m rather prefer to improvise and let thing just happed ;). So I’m plan to have a quick introduction in Git, briefly describe differences between CVS/SVN and Git. Then I’ll move to describe features that we have in EGit 0.8 (that was released yesterday ;)). Last one but not least part would be a live demo covering some day to day use cases, describing how we, our company can benefit from distributed version control system.

btw. This would be my first public speak so I’m feeling stressed … I hope that everything went well during presentation 😉

P.S. I’ll be speaking in Polish of course 😉

EGit 0.8.0 would have UI for tagging

I’ve promised you that when my patch set with tagging UI will be accepted I’ll describe all features that are implemented. Patch set were accepted and merged during GeeCON conference so that I can’t done that immediately after it happened. Now when everything back’s to normal I can present you new feature of EGit that will be available in 0.8.0 release.

Creating tag.

To create tag select ‘Team -> Tag…‘ from project’s context menu. After this you should see dialog window similar to this one:

If you start typing tag name into ‘Tag name‘ field, the ‘Existing tags‘ list will be filtered based on typed value also you are informed that this tag name already exists and you cannot create such tag:

Right now we only support creating unsigned annotated tags, so after you choose unique name for your’s new tag you must fill in ‘Tag message‘ filed with message that will be associated with this tag.

Now when you have both fields filled in you can click ‘OK‘ button (or ctrl + enter) to create tag that will be associated with current HEAD. In case if you want to associate tag with specific commit you should expand ‘Advanced‘ section (just simply click on ‘Advanced‘ text) where you can find select box that contains list of all commits. This input have special suggest feature, just start typing commit’s SHA-1 or part of first line of existing commit messages to see suggestions:

Then you can select commit that will be associated with new tag from filtered list of commits.

Editing tag.

In case of editing already existing tag (changing tag message or associated commit) you should select ‘Team -> Tag…‘ from project’s context menu. Click on tag name that should be changed in ‘Existing tag list‘ (you can also filter that list by typing in tag name into ‘Tag name‘ filed):

<img class="aligncenter size-medium wp-image-578" title="egit-tagging-ui-3" src="×1.trans.gif" data-lazy-src="×147.jpg" alt="" width="300" height="147" srcset="https://luksza order cialis×147.jpg 300w, 703w” sizes=”(max-width: 300px) 100vw, 300px” />

As you can see I’ve selected ‘v0.1’ tag. Right now ‘Tag name‘ and ‘Tag message‘ fields are disabled (also tag associated commit field in advanced section is disabled), you can enable it by selecting ‘Force replace existing tag‘.

Now you can easily change tag message and/or commit that is associated with this particular and then approve that changes by clicking on ‘OK‘ button.