Many shared hosting sites don't allow you to have shell access on their server, and some don't have git installed. If you depend on pulling changes directly to the production server, then when you're asked to install on a server that doesn't support shell/git, you have to do something different... which is painful.
Here's a solution that works for me:
- Read up on git-flow
- Have a project folder that directly mirrors your development files. This is in the develop branch.
- Have a project folder that directly mirrors your production files. This is the master branch.
When you are happy with your development site, commit and push your changes. Then change your project (in your IDE) to the production version. Pull and merge your changes (but don't commit just yet). My IDE then allows me to upload just the changed files, which I then commit.
I realise that this isn't the solution that many people adopt, and as cornelb said, a continuous integration server would probably streamline this process a bit. But it works very well for me, and only requires FTP access to the shared server where you are deploying your code.