Pushing WordPress Theme Updates With Git

Pushing WordPress Theme Updates With Git

Do you frequently update WordPress themes? It's kind of a pain in the ass, right? Typically has to be done manually through FTP or uploading a new zip through the backend.

Well, today I'm going to show you how to update your site with just:

$ git push live

Sounds to good to be true? It's not. Check it out:


  1. SSH Access to your web server
  2. Git installed on your local machine and on your web server

This setup works best for one off customs themes (like the one on HarnerDesigns.com) and not for themes produced to be distributed.

Create Your Repo Locally

First things first, create a folder for your project and enter it:

$ mkdir git-test && cd git-test

then initialize the repo:

$ git init

Alternatively, you can just clone my Blank2 - Blank WordPress Theme repo to get started:

$ git clone https://github.com/harnerdesigns/blank2.git git-test

Create A Bare Repo On The Remote Server

A bare repo is a directory containing the working tree of your git project, just without storing all the files. It's essentially just a directory of all the files noramlly in your .git directory.

SSH into your server:

$ ssh <user>@<server>:<sshPort>

Create a folder for the bare repo and enter it:

<user>@<server> $ mkdir git-test.git && cd git-test.git

Remember where on the server you created this directory, you'll need that later (Doing it in your home directory works perfectly fine).

Initialize the bare repo:

<user>@<server> $ git init --bare


Hook It Up

Your shiny new bare git repo has a directory hooks and in it are a bunch of .sample files. We want to do something after the repo receives new data, so create a new file called post-receive (no extension) and add the following to it:

GIT_WORK_TREE=<pathToWordPressInstall>/wp-content/themes/git-test git checkout -f

What this will do is, any time you push to this git repo, set the working tree for the repo to the theme folder in your WordPress install and then force checkout the files.

Back Down From The "Cloud"

Now logout of your remote server. It's time to add the new repo as a remote for your local one.

Make sure you're in your project's folder:

$ git remote add live ssh://<server>/home/<user>/git-test.git

and that's it! All you need to do to update your live theme now is add some files, commit them like normal and then run:

$ git push live

Being able to Update WordPress sites quickly allows for quicker bug fixes and less time spent wrangling files. Combine this idea with a taskrunner like Gulp and you'll be flying through updates.

Let me know if you use this method or if you have any other ways to manage WordPress Themes!