Let’s assume you have configured your brand new git repository on a brand new server and now you want to setup it in a way that every push done on a master branch update your production directory. How can you achieve that?

You can use git hooks feature. In hooks/ directory in your git repo you can find a file called post-receive, take a look at quick example below:

{% codeblock lang:bash %} #!/bin/bash

while read oldrev newrev ref do branch=echo $ref | cut -d/ -f3

if [ “master” == “$branch” ]; then git –work-tree=/YOUR-PRODUCTION-DIRECTORY-HERE/ checkout -f $branch echo ‘Changed pushed to production’ fi done {% endcodeblock %}

What this script does is checking out repository to a specific directory (–work-tree) if this push was done on master branch. Of course you can add more stuff there, it’s just simple example but it works great (tested with git 1.5). Unfortunately I can’t remember where I found out about this solution, but the credit goes to the original author.

Also - don’t forget to add execute permission for that file (chmod +x post-receive).