SSH and rsync? Or even better, use hg/bzr/git to maintain a version history of the files and then just sync across devices (it's uber easy with Mercurial, not sure about the other two). I personally use the latter (Mercurial).
At that point, why not use SparkleShare to simplify it?
Either way, hg/git/bzr don't work for a lot of cases, because they are extremely inefficient for synchronizing large files, such as music, photos, video, etc.
True RE: large files that don't really need to be versioned. I use a mix of shell scripts that manage rsync'ing large files and mercurial for anything that isn't binary.
Another annoyance with unison is that you must have the same version of unison on both hosts. It's a pain if you have (say) 2 different releases of ubuntu.