У меня есть следующий код:
echo shell_exec('cd ' . $dir . ' && /usr/bin/git pull origin HEAD');
Если я запускаю его из консоли VPS - все нормально работает.
Если запускаю чисто из nginx (ну через адресную строку) - ничего не делает.
Вообще реализовываю web-hook для BitBucket, чтобы делал git pull origin HEAD, когда я с локального компьютера залил изменения на ветку.