I tend to work on the same projects but on two different machines, so I use RSYNC to keep them up “mirrored”.

In simple terms, to rsync a remote directory named bin to the current directory:

rsync -aruvz username@hostname:/home/username/bin/ .

-a = archive mode (keeps all permissions, etc)
-r = recursive
-u = update newer files only
-v = verbose
-z = compress files for transfer (then uncompress)