Pushing WordPress Theme Updates With Git
Tags: wordpress, git, webdev
Published: 2018-09-11 05:41:35

---
title: Pushing WordPress Theme Updates With Git
published: true
description: 
tags: WordPress, Git, webdev
canonical_url: "https://harnerdesigns.com/blog/pushing-wordpress-theme-updates-with-git/"
cover_image: https://harnerdesigns.com/wp-content/uploads/2018/09/alexandru-acea-582050-unsplash-e1536643522194.jpg
---

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: 

## Prerequisites 

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](https://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](https://github.com/harnerdesigns/blank2) 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:

```
#!/bin/bash
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! 

### More Of My Writing
* [Using Font Awesome 5 In Pseudo elements](https://harnerdesigns.com/blog/using-font-awesome-5-in-pseudo-elements/)
* [Custom Post Type Archives Not Showing Up In WordPress Menus](https://harnerdesigns.com/blog/missing-custom-post-type-archives/)
* [I Finally Own JackHarner.com Again!](https://dev.to/jackharner/i-finally-own-jackharnercom-again-ppk)