For my personal site, I use rsync, and I keep the command in a makefile so I don't have to remember it (I also use the makefile to generate the static pages from templates). It looks like this:
sync:
rsync -az --progress ./ user@host:public_html/
.PHONY: sync
But for anything significant, I use a VCS, currently svn or git.