I can vouch for Unison too.
It is particularly good in comparison to rsync if you need changes to be synchronised in both directions. (rsync is a one way sync tool afaik)
I believe unison uses rsync technology to transfer files, and I believe that it will also only transfer the part of the file that has been modified - not the entire file.
Unison also keeps databases of the last known state on both machines which means it does not need to send a full list of files over the network for comparison each time making it much faster, and more suitable for use over slower WAN links with larger file systems.