GIT Development Workflow
From FirebugWiki
(Created page with "== General Workflow == # Anything in the <code>master</code> branch is deployable # To implement a new features or bug fix, create a new feature branch off of <code>master</cod...") |
Sebastianz (Talk | contribs) (Fixed spelling and formatting) |
||
| (11 intermediate revisions not shown) | |||
| Line 1: | Line 1: | ||
| - | == General | + | == General workflow == |
# Anything in the <code>master</code> branch is deployable | # Anything in the <code>master</code> branch is deployable | ||
| - | # To implement a new | + | # To implement a new feature or bug fix create a new feature branch out of <code>master</code> |
# Commit all your changes to the branch and push on the server | # Commit all your changes to the branch and push on the server | ||
| - | # When you need feedback/review/help open a pull request | + | # When you need feedback/review/help, open a pull request |
# After testing your branch by running Firebug test suite on it, merge it into <code>master</code> | # After testing your branch by running Firebug test suite on it, merge it into <code>master</code> | ||
| - | # When doing a release create a branch off of <code>master</code> | + | # When doing a release create a tag/branch off of <code>master</code> |
| - | === | + | === 1. <code>master</code> branch === |
| - | The master branch should be stable. It should be always safe to make a release from it. | + | * The <code>master</code> branch should be stable. |
| - | If you push changes into master they must be tested by Firebug automated test suite and | + | * It should be always safe to make a release from it. |
| - | all tests must pass. | + | * If you push changes into master, they must be tested by Firebug automated test suite and all tests must pass. |
| + | * You should feel guilty if you break the <code>master</code> branch. | ||
| - | === | + | === 2. Create a feature branch === |
| - | When you work on a new feature or | + | When you work on a new feature (or fix a bug), create a new feature branch named after the feature or the issue number it represents. |
| - | First clone Firebug repo: | + | First clone the Firebug repo: |
| - | < | + | <syntaxHighlight lang="bash"> |
$ git clone git@github.com:firebug/firebug.git | $ git clone git@github.com:firebug/firebug.git | ||
| - | </ | + | </syntaxHighlight> |
Create a new <code>myfeature</code> branch: | Create a new <code>myfeature</code> branch: | ||
| - | < | + | <syntaxHighlight lang="bash"> |
$ cd firebug | $ cd firebug | ||
$ git checkout -b myfeature master | $ git checkout -b myfeature master | ||
| - | </ | + | </syntaxHighlight> |
| - | Commit all changes into your feature branch: | + | === 3. Commit to the feature branch === |
| - | < | + | Commit all your changes into your feature branch and publish all to the public server ([http://github.com github.com]). |
| + | |||
| + | Commit to <code>myfeature</code> branch. | ||
| + | <syntaxHighlight lang="bash"> | ||
$ git add <modified-file> | $ git add <modified-file> | ||
$ git commit -m "This is my new feature" | $ git commit -m "This is my new feature" | ||
| - | </ | + | </syntaxHighlight> |
| - | Push to public server | + | Push to public server into <code>myfeature</code> branch: |
| - | < | + | <syntaxHighlight lang="bash"> |
$ git push -u origin myfeature | $ git push -u origin myfeature | ||
| - | </ | + | </syntaxHighlight> |
| + | |||
| + | === 4. Open a pull request === | ||
| + | If you need somebody from the team to review your code, [http://help.github.com/send-pull-requests/ open a pull request]. | ||
| + | |||
| + | === 5. Merge to <code>master</code> === | ||
| + | After you are done with your changes you can merge your branch back to <code>master</code>. Since <code>master</code> could have changed in the meantime you should update your branch before merging and solve any possible conflicts. | ||
| + | |||
| + | Switch into <code>myfeature</code> branch: | ||
| + | <syntaxHighlight lang="bash"> | ||
| + | $ git checkout myfeature | ||
| + | </syntaxHighlight> | ||
| + | |||
| + | Get changes from <code>master</code>. Using rebase here will cause git to pull off the branch commits, update the branch to <code>master</code>, then re-apply the commits. Conflicts are easier to fix in this direction than with a merge. | ||
| + | <syntaxHighlight lang="bash"> | ||
| + | $ git fetch | ||
| + | $ git rebase master | ||
| + | </syntaxHighlight> | ||
| + | |||
| + | Solve any possible conflicts and run Firebug test suite then merge to master. | ||
| + | <syntaxHighlight lang="bash"> | ||
| + | $ git checkout master | ||
| + | $ git merge --no-ff myfeature | ||
| + | </syntaxHighlight> | ||
| + | |||
| + | Don't forget to remove your feature branch after a successful merge. It's not needed anymore. | ||
| + | <syntaxHighlight lang="bash"> | ||
| + | $ git branch -d myfeature | ||
| + | </syntaxHighlight> | ||
| + | |||
| + | Push to public server: | ||
| + | <syntaxHighlight lang="bash"> | ||
| + | $ git push -u origin master | ||
| + | </syntaxHighlight> | ||
| + | |||
| + | Delete <code>myfeature</code> branch on the <code>origin</code> remote: | ||
| + | <syntaxHighlight lang="bash"> | ||
| + | $ git push origin :myfeature | ||
| + | </syntaxHighlight> | ||
| + | |||
| + | === 6. Create a release branch/tag === | ||
| + | When doing a minor (alpha or beta) release, create a tag at the appropriate revision that bumps up the version number. In the case of a major (final) release create a branch (e.g. <code>firebug1.11</code>). | ||
| + | |||
| + | Create minor version tag: | ||
| + | <syntaxHighlight lang="bash"> | ||
| + | $ ./bump-version.sh 1.10.0a5 | ||
| + | $ git commit -a -m "[firebug-1.11.0a5]" | ||
| + | $ git tag 1.11.0a5 | ||
| + | $ git push --tags | ||
| + | </syntaxHighlight> | ||
| + | |||
| + | Create major version branch: | ||
| + | <syntaxHighlight lang="bash"> | ||
| + | $ git checkout branch firebug-1.11.0a5 | ||
| + | </syntaxHighlight> | ||
| + | |||
| + | Push to public server: | ||
| + | <syntaxHighlight lang="bash"> | ||
| + | $ git push -u origin master | ||
| + | </syntaxHighlight> | ||
| + | |||
| + | TODO: process for hot fixes in existing release branches | ||
| + | |||
| + | == Recommended settings == | ||
| + | Recommended settings in your ''.gitconfig'' file: | ||
| + | |||
| + | Entire Firebug repository should use Unix line endings. | ||
| + | |||
| + | * Windows: | ||
| + | <syntaxHighlight lang="bash"> | ||
| + | git config --global core.autocrlf true | ||
| + | git config --global core.safecrlf false | ||
| + | </syntaxHighlight> | ||
| + | |||
| + | * Linux: | ||
| + | <syntaxHighlight lang="bash"> | ||
| + | git config --global core.autocrlf input | ||
| + | git config --global core.safecrlf false | ||
| + | </syntaxHighlight> | ||
| + | |||
| + | It's also useful to have the following aliases defined in your ''.gitconfig'' | ||
| + | |||
| + | <syntaxHighlight lang="ini"> | ||
| + | [alias] | ||
| + | co = checkout | ||
| + | ci = commit | ||
| + | st = status | ||
| + | br = branch | ||
| + | hist = log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short | ||
| + | </syntaxHighlight> | ||
Revision as of 21:05, 14 October 2012
Contents |
General workflow
- Anything in the
masterbranch is deployable - To implement a new feature or bug fix create a new feature branch out of
master - Commit all your changes to the branch and push on the server
- When you need feedback/review/help, open a pull request
- After testing your branch by running Firebug test suite on it, merge it into
master - When doing a release create a tag/branch off of
master
1. master branch
- The
masterbranch should be stable. - It should be always safe to make a release from it.
- If you push changes into master, they must be tested by Firebug automated test suite and all tests must pass.
- You should feel guilty if you break the
masterbranch.
2. Create a feature branch
When you work on a new feature (or fix a bug), create a new feature branch named after the feature or the issue number it represents.
First clone the Firebug repo:
$ git clone git@github.com:firebug/firebug.git
Create a new myfeature branch:
$ cd firebug $ git checkout -b myfeature master
3. Commit to the feature branch
Commit all your changes into your feature branch and publish all to the public server (github.com).
Commit to myfeature branch.
$ git add <modified-file> $ git commit -m "This is my new feature"
Push to public server into myfeature branch:
$ git push -u origin myfeature
4. Open a pull request
If you need somebody from the team to review your code, open a pull request.
5. Merge to master
After you are done with your changes you can merge your branch back to master. Since master could have changed in the meantime you should update your branch before merging and solve any possible conflicts.
Switch into myfeature branch:
$ git checkout myfeatureGet changes from master. Using rebase here will cause git to pull off the branch commits, update the branch to master, then re-apply the commits. Conflicts are easier to fix in this direction than with a merge.
$ git fetch $ git rebase master
Solve any possible conflicts and run Firebug test suite then merge to master.
$ git checkout master $ git merge --no-ff myfeature
Don't forget to remove your feature branch after a successful merge. It's not needed anymore.
$ git branch -d myfeature
Push to public server:
$ git push -u origin master
Delete myfeature branch on the origin remote:
$ git push origin :myfeature6. Create a release branch/tag
When doing a minor (alpha or beta) release, create a tag at the appropriate revision that bumps up the version number. In the case of a major (final) release create a branch (e.g. firebug1.11).
Create minor version tag:
$ ./bump-version.sh 1.10.0a5 $ git commit -a -m "[firebug-1.11.0a5]" $ git tag 1.11.0a5 $ git push --tags
Create major version branch:
$ git checkout branch firebug-1.11.0a5Push to public server:
$ git push -u origin master
TODO: process for hot fixes in existing release branches
Recommended settings
Recommended settings in your .gitconfig file:
Entire Firebug repository should use Unix line endings.
- Windows:
git config --global core.autocrlf true git config --global core.safecrlf false
- Linux:
git config --global core.autocrlf input git config --global core.safecrlf false
It's also useful to have the following aliases defined in your .gitconfig
[alias] co = checkout ci = commit st = status br = branch hist = log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short