Take the 2-minute tour ×
Server Fault is a question and answer site for system and network administrators. It's 100% free, no registration required.

I am attempting to setup GIT to deploy my project to different locations based on the branch. (I think this is what I want to do anyway).
My current setup is this: Local dev machine running Netbeans to make changes. Remote server hosting GIT projects (same server running apache) - 2 subsites exist a test.FQDN.com and a live.FQDN.com

What I would like to do is have 1 GIT project (MyProject) and create a new feature branch. Any commits done to the new feature branch would push to test.FQDN.com. Once the features have been tested and then merged into the master branch, it would push to live.FQDN.com. I have looked at GIT's post-receive hooks and was able to use "git checkout -f" command to pull on the test.FQDN.com site however that only pulls the master branch and not the new feature branch. I do not have any funding to use a third party to make this work, and would prefer to stay within GIT but have full root access to the web server if there is a package to install which would help control this. Any suggestions would be great!

EDIT Here is what my post-receive looks like currently:

#!/bin/sh
umask 002
cd /srv/git/projects/APP.git
git push --mirror backupLocation:APP
branch=$(git branch | grep "*" | sed "s/* //")

if [ "$branch" == "master" ]
then
    GIT_WORK_TREE=/srv/www/ssl_apps/APP git checkout -f
else
    GIT_WORK_TREE=/srv/www/ssl_apps/APPtest git checkout -f
fi
share|improve this question
    
What are you using to deploy? –  nickgrim Feb 8 '13 at 12:02
    
I am still using Git's post-receive hooks for all deployments, please refer to my edit above for the code I am currently using. –  Brian Feb 10 '13 at 4:22

2 Answers 2

our system in a nutshell:

www.git-server.com

if a branch was pushed, git post-receive hooks increments a number in static file /var/www/<branch>.version

at client server (there are multiple servers, multiple installations per server):

cron script runs every minute, it checks www.git-server.com/<branch>.version for every branch

if version was incremented it does the update:

cd /var/<branch>.subsite;
git pull --rebase

one minute delay (max) is OK for our purposes

share|improve this answer
    
Your post-receive hooks are vital here, yet not included in the answer. –  gertvdijk Dec 14 '12 at 14:39

You can use reset --hard <branchname> to put your working copy in a detached-HEAD state; change the latter part of your post-receive hook to:

if [ "$branch" == "master" ]
then
    GIT_WORK_TREE=/srv/www/ssl_apps/APP git reset --hard $branch
else
    GIT_WORK_TREE=/srv/www/ssl_apps/APPtest git reset --hard $branch
fi
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.