blob: a21170a8d5c9808ec4d2ed45cf4ee79d9ed61669 [file] [log] [blame] [view]
---
layout: website-normal
title: Merging Contributed Code
---
The Apache Brooklyn Git repositories are hosted in the ASF infrastructure and mirrored to Github. This is the current
repository layout:
- [Apache](https://git-wip-us.apache.org/repos/asf?s=brooklyn) - the main and official repository
- [GitHub](https://github.com/apache/brooklyn) - mirror of the ASF repository, used to accept contributions
and do code reviews
Before
------
For everything except the most trivial changes, the submitter must have a CLA on file. Check the [list of Apache
committers, and non-commiters with ICLAs on record](https://people.apache.org/committer-index.html) and prompt the
contributor to file an appropriate CLA if required.
For all significant changes, there must be a Jira issue. If a Jira issue is not referenced in the PR and/or commit
messages, prompt the contributor to open a Jira issue.
Rules of thumb
--------------
1. Every contribution is a piece of intellectual property. This is the precious sustenance that nourishes our
project. Please treat it with respect.
2. Always give credit where it is due, ensure every merged commit reflects properly the individual who authored that
commit. Preserve both the name and email address.
3. Ensure your name and email address are there as the committer prior to pushing it to the Apache repositories.
4. Always strive for linear commit history, avoid merge commits while pulling in contributor's changes.
Setting up your repository
--------------------------
Follow [these instructions](../code/git-more.html) to configure your local repositories.
Make sure the canonical ASF repo is enabled as that is where you'll need to push to merge changes,
and that you are able to fetch pull-requests.
Once that is done, run `git fetch --all` to update from all remote repositories - you will see all the pull requests appear:
* [new ref] refs/pull/98/head -> upstream/pr/1234
* [new ref] refs/pull/99/head -> upstream/pr/1235
Merging a pull request
----------------------
Fetch the latest remote branches, which will cause a remote branch for the PR to become available to you.
git fetch --all
If you want to inspect a particular PR and/or run tests, check out the branch:
git checkout upstream/pr/1234
To perform the merge, first update your master branch to the latest:
git checkout master
git pull --rebase
Then merge and push:
git merge --no-ff -m 'This closes #1234' upstream/pr/1234
git push apache-git master
Note that this commit message is important, as this is what will trigger the
pull request to be automatically closed, and the `--no-ff` means that a merge
commit will always be created.
Alternative options
-------------------
### Adding the remote reference to the contributor's repository
Fetch the branch of the user you want to merge from (replacing `-PROJECT` as appropriate):
git fetch https://github.com/user-to-merge-from/brooklyn-PROJECT.git branch-to-merge-from
If you commonly merge from a particular user, you'll want to add their repo as a remote to make fetching branches easier:
git remote add user-to-merge-from https://github.com/user-to-merge-from/brooklyn-PROJECT.git
git fetch user-to-merge-from
### Merging from a patch file
Save the patch from the Github patch link (just append '.patch' to the pull request link to get it). This patch will
keep the authorship of the commit, so we should use it instead of the diff.
Apply the patch preserving the original author:
git am pull-request-9876.patch
Additional information
----------------------
Particularly for new committers, you may find the following ASF information useful:
* [Guide for new project committers](https://www.apache.org/dev/new-committers-guide.html)
* [Committers FAQ](https://www.apache.org/dev/committers.html)
* [Git at Apache](https://git-wip-us.apache.org/)