Do you develop code stored in git, and want to push changes out to production boxes automatically? I’ve used this method successfully plenty of times: ###Target Server

On the receiving server, we first need to create a bare git repo. We then use the post-receive hook to automatically deploy changes to a working directory. In this case, the code will be deployed to /var/www/html.

# Make the 'bare' git repo
mkdir /home/app/git
cd /home/app/git
git --bare init

# Add a hook to automatically deploy the code when updated
cat << EOF > hooks/post-receive
#!/bin/bash
GIT_WORK_TREE=/var/www/html git checkout -f
EOF
chmod +x hooks/post-receive

###Development Server

Next we add a remote repo called prodservers with the first server’s details:

git remote add prodservers ssh://app@10.15.10.1/home/app/git/

Remember to stick your SSH key on the target box, so git doesn’t need to ask for a password.

ssh-copy-id app@10.15.10.1

Then push your code out!

git push prodservers master

If everything has worked, you should see your code appear in /var/www/html of your application server.

Note: git remote doesn’t support adding more than one remote target, so to add multiple target servers you’ll need to edit .git/config by hand (please correct me if I’m wrong!). In this case, your .git/config file would have a section which looks a bit like this:

[remote "prodservers"]
	url = ssh://app@10.15.10.1/home/app/git/
	url = ssh://app@10.15.10.2/home/app/git/
	url = ssh://app@10.15.10.3/home/app/git/
	url = ssh://app@10.15.10.4/home/app/git/
	fetch = +refs/heads/*:refs/remotes/prodservers/*