I have a website that I'd like to update whenever I push to a remote repository. I am coming from a svn background and still trying to figure out git.
Right now, I have done the following:
- Setup a Git repository on my local machine containing the website.
- Cloned the (bare) repository to my web server.
Now I'm a bit stuck. I can push the changes to my bare repository on the server but I have no idea of how to checkout a working copy of the repository in my www directory and automatically update it whenever I push my local repository to the server. I'll probably need a hook script right?
Related question, Deploy PHP using Git, partially answers my question, but I'd like to know what the script is actually doing.
This worked for me, it might work for you:
A web-focused Git workflow
I found a very good (and elegant) solution for me on the Caius Theory Website
It basically starts with a bare repository and changes the worktree to the web-server folder. After that it uses a post-receive hook to update the work-tree after every push it receives. An elegant and easy to follow procedure!
Additional to the setup in that article I added a soft-linked ".git" directory from the website location back to the git repository location:
ln -s /home/caius/git/somesite.git/ /home/caius/vhosts/somesite.com/htdocs/.git
This way I can checkout another branch on the web-server by logging into it and using "git checkout " in the website folder!
I also used a slightly modification on the Python-Script "ygit-push-all.py" from here to update my multiple machines which all run the same framework code with using different config files. You could even setup a branch per server (like Demo/Development).
In addition I added the following aliases to my global git config file:
[alias]
push-all = !ygit-push-all.py
check-all = !sh -c 'git branch -r -v | grep master | awk \"{ print \\$1, \\$2 }\"'
git push-all will update all my remote locations
git check-all will show me the rev on which every remote master branch is