Skip to main content
Jump to: navigation, search

Difference between revisions of "Platform-releng/Git Workflows"

(Tag the mapfile for a build)
(Commit changes to the main repo)
Line 123: Line 123:
  
 
= Commit changes to the main repo =
 
= Commit changes to the main repo =
 +
 +
Committing a change to the main repo is a 2-step process in git.  In git, a commit creates a commit with the changed files in your local clone repository.  A push will put that commit in our main repo.  Committing and pushing are distinct operations in git.
  
 
Refer to the [[EGit/User Guide]] for more detailed instructions and pictures.
 
Refer to the [[EGit/User Guide]] for more detailed instructions and pictures.
 +
 +
To get your changes to the main repo in EGit:
 +
 +
# Do a '''pull''' or a '''fetch''' and a '''merge''' into your working branch
 +
# right-click on your project and use '''Team>Commit'''
 +
# Your commit message should include the bug number you are using for your fix/work.
 +
# check the files that should be included in the commit in the ''Files'' section
 +
# ''Commit''
 +
 +
Then you need to push your changes to make sure they've visible to everyone else
 +
 +
# right-click on your project and use '''Team>Push to Upstream'''
 +
# it should provide a status dialog with the refs that were updated, or a failure if the main repo has commits that you haven't either merged or rebased on.
 +
 +
 +
 +
Common commit message:
 +
  Bug 349177 - [releng] stitch ui.workbench fork back into main
 +
  Updating some code to reflect the real change
  
 
= Update to pull in the latest changes to HEAD =
 
= Update to pull in the latest changes to HEAD =

Revision as of 09:34, 5 July 2011

We'd like to capture some common CVS workflows used by the Eclipse Project and spell out the git/EGit equivalent.

Refer to the EGit/User Guide for more detailed instructions and pictures.

Clone a repo

The first step is to clone the one or more repos you need to work on. You want to clone the repo to a location outside your workspace. Then use the EGit Import Projects option to import the projects.

Refer to the EGit/User Guide for more detailed instructions and pictures.

  1. Switch to the Git Repository Exploring Perspective
  2. Use Clone a Git repository Clone a git repository
  3. you can paste in your connection URL and it should do the right thing. Some URLs:
    1. ssh://userid@git.eclipse.org/gitroot/equinox/rt.equinox.bundles.git
    2. ssh://userid@git.eclipse.org/gitroot/equinox/rt.equinox.framework.git
    3. ssh://userid@git.eclipse.org/gitroot/equinox/rt.equinox.incubator.git
    4. ssh://userid@git.eclipse.org/gitroot/equinox/rt.equinox.p2.git
    5. ssh://userid@git.eclipse.org/gitroot/equinox/rt.equinox.security.git
    6. ssh://userid@git.eclipse.org/gitroot/jdt/eclipse.jdt.core.git
    7. ssh://userid@git.eclipse.org/gitroot/jdt/eclipse.jdt.debug.git
    8. ssh://userid@git.eclipse.org/gitroot/jdt/eclipse.jdt.git
    9. ssh://userid@git.eclipse.org/gitroot/jdt/eclipse.jdt.ui.git
    10. ssh://userid@git.eclipse.org/gitroot/pde/eclipse.pde.build.git
    11. ssh://userid@git.eclipse.org/gitroot/pde/eclipse.pde.git
    12. ssh://userid@git.eclipse.org/gitroot/pde/eclipse.pde.incubator.git
    13. ssh://userid@git.eclipse.org/gitroot/pde/eclipse.pde.ui.git
    14. ssh://userid@git.eclipse.org/gitroot/platform/eclipse.platform.debug.git
    15. ssh://userid@git.eclipse.org/gitroot/platform/eclipse.platform.git
    16. ssh://userid@git.eclipse.org/gitroot/platform/eclipse.platform.releng.git
    17. ssh://userid@git.eclipse.org/gitroot/platform/eclipse.platform.resources.git
    18. ssh://userid@git.eclipse.org/gitroot/platform/eclipse.platform.runtime.git
    19. ssh://userid@git.eclipse.org/gitroot/platform/eclipse.platform.swt.git
    20. ssh://userid@git.eclipse.org/gitroot/platform/eclipse.platform.team.git
    21. ssh://userid@git.eclipse.org/gitroot/platform/eclipse.platform.text.git
    22. ssh://userid@git.eclipse.org/gitroot/platform/eclipse.platform.ua.git
    23. ssh://userid@git.eclipse.org/gitroot/platform/eclipse.platform.ui.git
  4. Next
  5. Select all branches to clone
  6. Next
  7. Confirm the location that it will clone the repository into.
  8. an initial branch of master and a remote name of origin are standard.
  9. Finish - Now just sit back while git copies the entire repo to your harddrive :-)

We need to get the projects from the repo into our workspace:

  1. right click on your newly cloned repo and select Import Projects
  2. you want Import existing projects from the Working Directory
  3. Next
  4. Select the projects that you want to import from the repository
  5. Finish

Now you can start working.

Start working in HEAD

To start working in HEAD you must clone your repository and checkout a working copy. By default, cloning the repo checks out the master branch, which is the same as HEAD in CVS.

See #Clone a repo.

Refer to the EGit/User Guide for more detailed instructions and pictures.

The constant HEAD is used in GIT as well, but has a completely different meaning. In GIT HEAD means the pointer to the latest commit in your currently checked-out branch (more or less).


Start working in a new branch

For example, create the R3_7_maintenance branch for your repo. This example is for the case that your branch doesn't already exist as refs/remotes/origin/R3_7_maintenance.

Refer to the EGit/User Guide for more detailed instructions and pictures.

  1. right click on one of your projects and choose Team>Switch To>New Branch
  2. you need to pick a source ref.
    1. HEAD == current checked out commit
    2. refs/heads/master means your master branch.
    3. refs/remotes/origin/R3_7_maintenance - the existing remote branch. If you pick this one and name your local branch the same, EGit will automatically create a tracked branch.
    4. refs/tags/R3_7 is the tags to branch from
  3. name the branch R3_7_maintenance
  4. leave "Check out the new branch" selected.

This will create a new branch for you to work on. Once you've made your initial commits, you need #Commit changes to the main repo. Pushing up to the repo will push any new branches you've created as well.

Create a patch

We have 2 options for accepting contributions from the community. See Development_Resources/Handling_Git_Contributions (prefered) and Git#IP_process_implications_of_DVCS. Refer to the EGit/User Guide for more detailed instructions and pictures.

To create a patch:

  1. You need to show the commits in the history view.
    1. Either right-click on a file you just committed and Show in history
    2. or right-click on the project and Show In>History, then find the commit you want
  2. right click on the commit in the History view, and select Create Patch
  3. use Next if you'd like the patch in the standard git mbox format

Apply a patch

A normal workspace patch will apply in the same fashion it does for CVS. Simply copy the file to the clipboard and paste it into the Package Explorer or use Team>Apply Patch.

Refer to the EGit/User Guide for more detailed instructions and pictures.

Patches created with git/EGit have a different pattern. They are diff statements that look like:

 diff --git a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/HandledContributionItem.java b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/HandledContributionItem.java
 index 99d339f..37bcf68 100644
 --- a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/HandledContributionItem.java
 +++ b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/HandledContributionItem.java

To apply a patch like this, you should:

  1. copy and paste the patch into the Package Explorer
  2. Select Apply patch to the workspace root
  3. Next
  4. under Patch Options set Ignore leading path name segments to 2
  5. now you can examine the patch and apply is normally.

Tag the mapfile for a build

We're still deciding on a best practice on tagging the repos and updating the map files for an I build.

One option under discussion is to allow the I build to tag the repos and update the map files automatically based on master. In the normal case, the build will run with master. If we need a fix, a map file can be reverted and a new I build with "no repo tagging" can be started.

When we have a bug for the discussion I'll update this item with the number.

Commit changes to the main repo

Committing a change to the main repo is a 2-step process in git. In git, a commit creates a commit with the changed files in your local clone repository. A push will put that commit in our main repo. Committing and pushing are distinct operations in git.

Refer to the EGit/User Guide for more detailed instructions and pictures.

To get your changes to the main repo in EGit:

  1. Do a pull or a fetch and a merge into your working branch
  2. right-click on your project and use Team>Commit
  3. Your commit message should include the bug number you are using for your fix/work.
  4. check the files that should be included in the commit in the Files section
  5. Commit

Then you need to push your changes to make sure they've visible to everyone else

  1. right-click on your project and use Team>Push to Upstream
  2. it should provide a status dialog with the refs that were updated, or a failure if the main repo has commits that you haven't either merged or rebased on.


Common commit message:

 Bug 349177 - [releng] stitch ui.workbench fork back into main
 Updating some code to reflect the real change

Update to pull in the latest changes to HEAD

Refer to the EGit/User Guide for more detailed instructions and pictures.

Merge conflicting changes

Refer to the EGit/User Guide for more detailed instructions and pictures.

Copyright © Eclipse Foundation, Inc. All Rights Reserved.