Aim: get the site deployed like so; [webroot]/[branch_name]
I’m using this on our development server, so the devs can view all branches on it.
I first set our server up as described in this previous post on deploying with virtualmin. Then use the following in hooks-receive:
#!/bin/sh
#get the ref name
while read oldrev newrev ref
do
refbranch=”$ref”
done
#remove ref path</h1>
branch=`basename $refbranch`
#add full path
branchpath=”[your_webroot_full_path]/$branch”
#create directory if it doesn’t exist
if [ ! -d “$branchpath” ]; then
mkdir “$branchpath”
echo “Created new folder for branch $branch”
fi
cd “$branchpath”
git –git-dir=[path_to_git_dir] –work-tree=”$branchpath” checkout -f “$branch”
git –git-dir=[path_to_git_dir] –work-tree=”$branchpath” clean -fd
echo “Updated files in $branch directory”
Once you’ve done that, you may want to add a file to the web root so people know what branches they can view. I’m using the following very simple php script (index.php, in my webroot):
<?php
$dirs = scandir(‘.’);
$remove = array(‘.’,’..’,’.gitignore’,’.project’,’index.php’,’git’);
$html = ”;
foreach($dirs as $dir){
if(!in_array($dir,$remove)){
$date = date(‘jS M Y’,filemtime($dir));
$html .= ‘<a href=”/’ . $dir . ‘”>’ . $dir . ‘</a> – ‘ . $date . ‘<br />’;
}
}
?>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN”
“http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html>
<head>
<title>Development site</title>
</head>
<body>
<p>Please choose your branch (branch name – last modified):<br />
<?php echo $html; ?>
</p>
</body>
</html>
Add to the $remove array any files/directories you do not want showing up.