tags:

views:

86

answers:

2

I'm using git to track a project, and if it's possible, I'd like to set things up so git handles all my code staging, I can have a local repository for testing, and then push changes to the server with git to make them live. However, in trying to use standard git push calls, I just end up with inconsistent branching and a terrible mess of conflicting histories. Is there a way to manage staging using git?

A: 

Even though git is a distributed version control system, it is usually a good idea to have a central repository (could be a --bareone). It will simplify things.

Antony Hatchkins
Yes, but how does this help with having to manage a staging branch and a production branch and one or more development branches?
Thilo
Should I have a central repository, then clone it both locally and on the live server, and then SSH in and do manual pulls to update? That makes sense, but it feels like there ought to be a more elegant solution.
futuraprime
One bare central repository on live server would be enough. Since you're getting conflicting histories, I guess you make some changes in the production site. If doing that seems convenient for you, then manual pulls should be ok. If you can go without such changes, use post-update hook as suggested by VonC.
Antony Hatchkins
+4  A: 

You have in this blog post an example of Git repo used for staging:

IDE => local Git repository => remote bare Git repository 
                                   => Git repository with the live web application

It involves a post-update hook on the bare repo side, in order to trigger the update of the repo on the live web server side.

The final step is to define the “post-update” hook script on the bare repository, which is called when the bare repository receives data.
To enable the “post-update” hook, we have to either make hooks/post-update executable or rename hooks/post-update.sample to hooks/post-update, depending on the Git version.
In this script, we simply change to the folder of the live application, and start the pull operation:

#!/bin/sh
cd $HOME/example.org
unset GIT_DIR
git pull bare master

exec git-update-server-info

The reason there is a bare remote repo is because it is “discouraged” to do a push into a repo with a working directory.

VonC