Working with SVN Cheat Sheet

After years of building and releasing plugins on the repository you learn a few things about SVN usage.

Since most of us use Git via Github or similar to manage the actual code and day to day changes, we must use SVN from time to time to get a release out to the public.

I’ve put together the following cheat sheet for SVN usage that has some optimized commands for doing the necessary stuff very quickly.

I know there are some good Github actions and workflows to automate this, but some times it just helps to have a few quick CLI commands that work.

Hope you find them helpful.


Checkout Trunk Only (Preferred)

If you don’t need to compare versioned tags or modify plugin page assets this is the ideal way to do it by only downloading the /trunk working branch.

To check out only the trunk working branch you will use the following methodology, replacing plugin-name with the correct plugin slug.

svn checkout --depth empty plugin-name
svn update --set-depth infinity plugin-name/trunk

Checkout WordPress Page Assets Only

To modify banner images or plugin icons this will get the correct folder set up.

svn checkout --depth empty plugin-name
svn update --set-depth infinity plugin-name/assets

Stage Changes

Remove Missing Files

Remove files that have been deleted since last release.

svn st | grep "!" | cut -d! -f2 | sed 's/^ *//' | xargs -n 500 -d "\n" -r svn rm

Add New Files

Add files that were created since last release.

svn st | grep ^? | cut -d? -f2 | sed 's/^ *//' | xargs -n 500 -d "\n" -r svn add

Fix Asset Content-Type

This only applies to the plugin /assets directory which needs to serve these files as images, not as binary data like the SVN repository does.

svn propset svn:mime-type image/png *.png
svn propset svn:mime-type image/jpeg *.jpg
svn propset svn:mime-type image/gif *.gif
svn propset svn:mime-type image/svg+xml *.svg
svn propset svn:mime-type image/svg+xml *.svgz

Push Changes

Commit Trunk Changes

Make sure to to run an svn st and double check everything looks right before proceeding. You would immediately follow this by tagging the release remotely, found below.

cd plugin-name/trunk
svn ci -m "Updating code to release vx.x.x"

# Example Output
> Enter your username
> Enter your password
> Sending        trunk/plugin-name.php
> Transmitting file data .................................
> Committing transaction...
> Committed revision 2687342.

Tagging Release Remotely

When working with only the /trunk branch locally this method allows first pushing the trunk updates, then remotely copying /trunk to a new versioned folder in the /tags directory on the remote SVN repository such as /tags/1.5.3.

svn copy \
           -m "Tagging the 1.0.0 release"

# Example Output
> Enter your username
> Enter your password
> Committing transaction...
> Committed revision 2687342.

Quick Hacks

Update already tagged readme

Sometimes you need to update just the readme.txt file. This can be done easily with only the /trunk branch locally. Update plugin-name and 1.0.0 version according to your needs.

First modify the readme.txt file then use the following.

cd plugin-name/trunk
svn ci -m "Readme update" readme.txt

# Remove the readme in the latest tag folder.
svn rm -m "Remove outdated readme" \

# Copy new trunk/readme to the latest tag folder.
svn copy -m "Updating readme for existing tag" readme.txt \

I am a founder & CEO of Code Atlantic and I've been working with WordPress for over 15 years creating plugins to help WP site owners grow for more than 10 of those. We have developed and maintained popular plugins including the best wordpress popup plugin, Popup Maker with over 4k 5 star reviews, as well as Content Control, Ahoy & User Menus.

Follow on:

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.