We use a versioning system (Subversion to be precise, git or mercurial
would probably be better for you). Then I commit everything to the
main repository and just checkout (update after the initial checkout)
on the development server. It's not too bad of a system although I
still have to go onto the server and type in "svn update" all of the
time (plus /etc/init.d/uwsgi restart since I run it behind nginx)