Как деплоить проект на серер по git pull?
Я бы порекомендовал внешнюю систему деплоя, например github.com/capistrano/capistrano

Вот мой конфиг для проекта на symfony2:

set :application, "appname"
set :deploy_to, "/var/www/#{application}"

set :repository, "git@github.com:vslinko/#{application}.git"
set :scm, :git

set :shared_files, ["app/config/parameters.yml"]
set :shared_children, ["app/logs", "web/uploads", "vendor"]
set :asset_children, []

set :user, "www-data"
set :use_composer, true
set :update_vendors, false

set :domain, "symfony.slinko.me"
role :app, domain

task :production do
  set :domain, "appname.com"
  role :app, domain
end


После чего cap deploy на тестовый сервер, а cap production deploy на рабочий
В mercurial есть hook update=…