Trunk vs Tags? Which is Better? (Answer: Tags)
tl;dr – We strongly recommend you use tagged folders for your releases of your plugins. Future you will thank you.
While we have always advocated for people to use a tag folder with their plugins instead of trunk, it persists that a number of developers like using the “Stable Tag” of trunk. There are logical reasons for this. Having your stable tag be trunk feels like it’s one less thing to keep in mind when you update your plugin for a new release.
The problem with that setup is that you suddenly made it harder for everyone else to keep tabs on your plugin, to make sure they downloaded the correct version, and worst of all … you made it nearly impossible to roll back to a previous release. And with the advent of automated plugin updates, that last one is going to be damaging to you in the long run.
In fact, here’s what you’re making worse:
- No easy way to download older versions to debug compatibility issues
- Translators cannot work in ‘advance’ of a release, meaning as soon as you push your code, the translations are out of date until volunteers can work on it
- You increase your risk of an accidental release
- No way to allow people to download the ‘pre-release’ version from official WordPress.org sources
- No ability to ‘roll back’ versions
So what’s the right way?
- Make sure your readme.txt has the stable tag to your stable version in the main plugin file (those need to match)
- Put everything into your trunk folder on your local checkout (use
svn addand so on as needed)
svn cp trunk tags/1.2.3— this will copy from trunk to the tag folder
svn ci -m "Releasing new version"— this will push both trunk and tag
That’s it. You’re done. Now you can upload and edit trunk all you want, for a dev version, and as long as the readme points to the proper stable tag, your users won’t get any updates.
Okay, but what if you want to have a trunk version for testing? Do not edit the stable tag in the trunk readme! It’s that value that tells WordPress which version is ‘stable’ and if you’re working on 1.2.3, keep stable as 1.2.2 in trunk and no one will get the new code until you’re ready.