3

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 
2
  • What are you using to deploy? Commented Feb 8, 2013 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. Commented Feb 10, 2013 at 4:22

2 Answers 2

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

1
  • Your post-receive hooks are vital here, yet not included in the answer. Commented Dec 14, 2012 at 14:39
0

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 

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.