HOW-TO:Create add-on PRs using Git Subtree Merging
|Add-on development||HOW-TO:Create add-on PRs using Git Subtree Merging|
1 First time setup
First fork and clone the relevant official add-on repository. In this example we use the plugins repo:
git clone [email protected]:me/repo-plugins.git cd repo-plugins
Add the git repository where your addon resides as a remote:
git remote add myaddon [email protected]:me/myaddon.git git fetch myaddon
Create a new branch for the addon:
git checkout -b myaddon_branch myaddon/master
The current directory should contain the files from the myaddon repository.
To switch back to gotham branch of the "repo-plugins" repository:
git checkout gotham
Note: gotham is just an example. Choose the branch which is the lowest version you want to support. The plugin is available for that version and later. (Do not submit PR for each version) e.g. For helix and above, submit the PR to helix.
Note: If your addon already exist in repo, it must first be removed with:
git rm -r plugin.my.addon/
Now we use subtree merge to pull myaddon into the gotham branch of repo-plugins:
git read-tree --prefix=plugin.my.addon/ -u myaddon_branch
To see the changes that are about to be committed:
git diff --staged
Finally, commit the changes:
git commit -m "[plugin.my.addon] 1.0.1" git push origin gotham
You can now open a PR on Github.
Note: Remember to send the PR to the correct branch. If you have pushed to gotham branch, you should request pull to the gotham branch in repo.
Note: If you have multiple plugins, create separate branches e.g. gotham_myplugin from current gotham branch, commit and push to that branch and send a PR from that branch. Else, github sends all commits to the same PR.
2 Updating addon to a new version
Updating the addon is now easy. For this example we pull the master branch from myaddon:
git checkout gotham git pull --strategy subtree --squash myaddon master git commit -m "[plugin.my.addon] 1.0.2" git push origin gotham
- NOTE: Does not work if pull.rebase=true in git config
- NOTE: if using git > 2.9, the second line will need to be
git pull --strategy subtree --squash myaddon master --allow-unrelated-histories
For more info about Subtree Merging see http://git-scm.com/book/en/v1/Git-Tools-Subtree-Merging