HOW-TO:Create add-on PRs using Git Subtree Merging

From Official Kodi Wiki
Jump to navigation Jump to search
Home icon grey.png   ▶ Add-on development ▶ HOW-TO:Create add-on PRs using Git Subtree Merging

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

Now we use subtree merge to pull myaddon into the gotham branch of repo-plugins:

git read-tree -u myaddon_branch

To see the changes that are about to be committed:

git diff --staged

Finally, commit the changes:

git commit -m "[] 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.

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 "[] 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