I've got a few different approaches for deployments.
For static sites, which are built from templates, or by hand, I just deploy via rsync. This is nice and efficient, and is carried out over SSH which allows me to be secure in-transit and avoid having to enter passwords.
For dynamic applications I've tended to write simple recipes via fabric (http://fabfile.org/) which allows me to bundle up the local state of a repository, transfer it over SSH, and run a few commands.
For some things in the middle I use git pushes to different environments, but I'm trying to move away from that and into more scripted deployment via ansible, fabric, slaughter, etc.
For static sites, which are built from templates, or by hand, I just deploy via rsync. This is nice and efficient, and is carried out over SSH which allows me to be secure in-transit and avoid having to enter passwords.
For dynamic applications I've tended to write simple recipes via fabric (http://fabfile.org/) which allows me to bundle up the local state of a repository, transfer it over SSH, and run a few commands.
For some things in the middle I use git pushes to different environments, but I'm trying to move away from that and into more scripted deployment via ansible, fabric, slaughter, etc.