====== Graphics stack: ports development workflow ======
===== Clone the repository and setup remote repositories =====
- Clone the Ports development repository:
git clone https://github.com/freebsd/freebsd-ports-graphics.git
- If you have write access to this repository, change the push URL:
git remote set-url --push origin git@github.com:freebsd/freebsd-ports-graphics.git}}}
1. Add the official Ports tree mirror as a second remote repository, called `upstream`: {{{
git remote add upstream https://github.com/freebsd/freebsd-ports.git}}}
The `master` branch (the default one) matches the official Potree tree Subversion repository. This branch must stay untouched: never commit anything on this one!
== Keep the "master" branch up-to-date ==
The `upstream` repository is used to fetch new changes made to the Ports tree Subversion repository. Your local `master` branch is a copy of this mirror, not a "symlink". You need to keep it up-to-date yourself. To do this:
1. Make sure you sit on the "master" branch: {{{
git checkout master}}}
1. Fetch changes from the upstream repository (ie. the official Git mirror): {{{
git fetch -p upstream}}}
1. Update your local copy: {{{
git merge --ff-only upstream/master}}}
1. Optionaly, push this up-to-date copy to the `origin` repository (xorg-dev): {{{
git push}}}
== Example: work on xorg-server 1.14 ==
=== Work with a topic branch ===
To ease the work on parallel non-related tasks, it's better to use topic branches, instead of a single branch receiving everything, like we did in the old xorg-dev Subversion repository. Here, we take an update to the xorg-server as an example.
1. Create the topic branch. This will create a branch called `xorg-server-1.14`, based on your local `master` branch. It's a good thing to update this `master` branch before, to permit you to work on a fresh up-to-date Ports tree. {{{
git checkout -b xorg-server-1.14 master}}}
1. At this point, your local working copy is the `xorg-server-1.14` branch, not the `master` branch. You can make whatever modifications you need to `x11-servers/xorg-server` to update it to 1.14.
1. Commit your changes: {{{
git add x11-servers/xorg-server
git commit}}}
1. Do this as often as you need/want
1. When your work is ready to be shared, push it to the public development repository: {{{
git push -u origin xorg-server-1.14:xorg-server-1.14}}}
1. The `-u` flag is here to save you some typing the next time you push. That's why you can make new changes, commit them and push your work again: {{{
git push}}}
=== Get changes from other developers ===
If other people are working on the same branch with you, you'll have to fetch their changes: {{{
git pull -r}}}
You can continue to work and commit, then push.
=== Generate the final patch ===
When xorg-server 1.14 is stable and ready to hit the official Ports tree, you must generate the final patch:
1. Update your `master` branch as shown above
1. Go back to your topic branch: {{{
git checkout xorg-server-1.14}}}
1. Merge the `master` branch: {{{
git merge master}}}
1. Generate the patch: {{{
git diff master...xorg-server-1.14 > xorg-server-1.14.patch}}}