Deploying Web Apps With Git

I had previously posted about using Git to publish changes to live websites on a VPS, but have recently started using a much simpler approach. 

The key is you can only Git “push” to a bare repo, but you can also checkout a branch from the bare repo to a working directory where your website code lives.

To start, create a directory for the bare Git repo somewhere convenient, like in your home directory. It's conventional to name this directory with a “.git” extension to signify it's a bare repo. Then inside that new directory, initialize your bare repo. Replace “project” with your project name.

mkdir project.git
cd project.git/
git init --bare

Now create a post-receive hook script, that is run when new code is pushed to your server, which checks out your branch into the working directory. (I'm using Nano editor to edit or create this file.)

cd hooks/
nano post-receive

The script looks like this, but of course your update with your own paths, and change master to your preferred branch. 

#!/bin/sh

git --work-tree=/path/to/your/web/app --git-dir=/path/to/your/project.git checkout -f master

# Optionally, do some other post deployment clean up
echo "composer install"
cd /path/to/your/web/app && composer install

echo "Clearing cache"
rm -rf cache/*

exit 0

Save your file, and then make it executable.

chmod +x

Finally, to be able to Git push, add your server as a remote on your local machine, where production is the name of the remote.

git remote add production <serveruser>@<ip>:project.git

Now, when it's time to deploy, it's as simple as,

git push production master

What Do You Think?

* Required