Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Git: updating website when pushing to remote repository?

Tags:

git

workflow

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.

like image 725
Olivier Lalonde Avatar asked Dec 29 '22 03:12

Olivier Lalonde


2 Answers

This worked for me, it might work for you: A web-focused Git workflow

like image 97
leonbloy Avatar answered Jan 05 '23 17:01

leonbloy


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

like image 34
OderWat Avatar answered Jan 05 '23 18:01

OderWat