Years ago I set this up with a bunch of convoluted scripts, and etc. No fun.

Today I did a bit of research and found out how to easily setup your web server to pull updates from your git repo anytime you publish to it – the proper way.

Here’s how to do it.

First, connect to your remote web server

    ssh youruser@yourserver.com

Note, we make some assumptions that you host your site in /var/www/html and that you’ve already added your ssh keys to your git server for both master, and production web server.

Next you’re going to want to issue the following commands

    cd /var/www
    git init --bare /var/www/theproject.git 
    cd theproject.git/hooks/
    nano post-receive 

Then you’re going to want to paste this in, shamelessly stolen from this site.

    #!/bin/bash
    TARGET="/var/www/html"
    GIT_DIR="/var/www/theproject.git"
    BRANCH="master"

    while read oldrev newrev ref
    do
        # only checking out the master (or whatever branch you would like to deploy)
        if [ "$ref" = "refs/heads/$BRANCH" ];
        then
            echo "Ref $ref received. Deploying ${BRANCH} branch to production..."
            git --work-tree=$TARGET --git-dir=$GIT_DIR checkout -f $BRANCH
        else
            echo "Ref $ref received. Doing nothing: only the ${BRANCH} branch may be deployed on this server."
        fi
    done

Edit the TARGET, and GIT_DIR then save and exit the file, and then make it executable.

    chmod +x post-receive 

Now you’re ready to test it all out.

Go back to your development machine (laptop, whatever) and issue the following commands.

    cd /path/to/git/repo
    git remote add production user@yourserver.com:/var/www/theproject.git

Note, you need to edit the username, server, and project name and path that coincide with your settings, and, whatever has a shared ssh key with your git server.

Now you just need to commit your changes, and then push to master and to production and you’re done!

    cd /path/to/git/repo
    echo "test" >> index.html 
    git add -A . 
    git commit -m "adding test html"
    git push origin master
    git push production master

Refresh your website and you should see the changes!