views:

241

answers:

2

Here's what I'm trying to do:

I have a GitHub repository, a portion of which I'd like to make web viewable. Right now I've cloned the repository on my own server and it works well, but in order to keep it up to date, I have to manually login and pull the latest changes.

I'm not sure if this is the best idea (or the best approach), but I'd like the remote server to automatically pull whenever someone pushes to repository. GitHub makes it easy enough to run a script when someone pushes, but I'm not sure how to pull once someone does that.

I was using PHP for simplicity, but just doing something like git pull naturally doesn't work because of permissions. Is this a bad idea or is there another way of achieving what I want to do? This seems like a common set up, but I wasn't sure.

Thanks.

+1  A: 

If it is easy to run script to push, you could setup hooks to push:

  • from GitHub to a bare (empty worktree) repo on your web server
  • from your bare repo on your web server to your "live" repo (with a worktree representing your web site)

You can then associate that with a hook on your "live" repo to update itself (through a "git merge", merging the content of your bare repo to your "live" repo), whenever your bare repo push anything.

You get the effect you want: any push to your GitHub repo (for a certain branch I suppose) will trigger a refresh on your "live" web server repo.

VonC
+1  A: 

I've made something that works almost exactly this way, except that the "remote" repo that receives the push is on the same machine as the repo that afterward pulls. It is true (and important) that exactly the same set of users have permissions on both repositories. (But this should be OK; you don't want random people pushing your repo.) In any case I simply have the git post-update hook call a shell script that does the pull for me. The one tricky bit is that you have to clean the environment (I used env -i, or you can unset git-related variables), otherwise the pull gets confused.

Norman Ramsey