It's a common problem.
In Terminal, try `man rsync` to learn about the command-line tool to synchronise from one source to a destination. You can write simple shell wrappers to encode your favourite arguments.
However it doesn't directly support fancy two-way syncing, although if you were brave you could do two syncs, one in each direction just copying newer files. But then deleting files could become a problem.
If you're able to decide which disk is the "master" copy, then `rsync -av --delete SOURCE DEST` will (for appropriate values of SOURCE and DEST) make DEST look like SOURCE, ignoring all the unchanged data. But there are many options and
you should tread carefully before accidentally removing all your files.
Then there's the issue of which data are you going to copy? Presumably not the system, as you have different machines. Applications are also hard. Not just the programs, but the data too. Configurations/preferences are stored separately from the data, and if you copy the whole Library tree you'll probably break some other program.
If you have a folder (e.g. "data") under your home folder you could use rsync to copy from one to another. Take for example MACHINE1 and MACHINE2, with "Remote login" enabled under Sharing in System Preferences. On MACHINE1, you could type
Code:
rsync -av --delete ~/data/ MACHINE2.local:data/
to copy from MACHINE1 to MACHINE2, or
Code:
rsync -av --delete MACHINE2.local:data/ ~/data/
to copy in the other direction.
Obviously this benefits from a fast LAN connection if you've changed a lot of data. But rsync is designed to be efficient and not copy stuff it doesn't have to. Note that specifying a simple unique name for each machine in the Sharing pane of System Preferences allows you to refer to NAME.local instead of having to use the IP address that machine happens to be using at the time. "Pieter's MacBook Pro.local" is hard to type, and the punctuation and whitespace don't help either. Go for short and simple names.
Or you could mount the disk of one on the other via file sharing, and use the relevant volume names in the rsync command (without using the colon which specifies remote login). Anyway, like I said there are lots of options.... and
be careful!
Then there's another possible solution: store your files on an external disk and just take the disk with you to the other system.
There is the performance trade-off of using a slower disk, but it's conceptually very simple. We get students to do this with their Lightroom/Photoshop/etc files and it works great (as long as you tell Lightroom to store its database on the external drive too).
If you want to synchronise an external disk and files on an internal disk you can use rsync as above just use different SOURCE/DEST syntax (this can be faster than some network connections). It even works if one of the disks is FAT32 (although I find I need to add the rsync argument `--modify-window=1` to cope with the limited accuracy of FAT32 timestamps) so you can share between OS X and Windows machines.
If you have plenty of network connectivity and enough space in your Dropbox account you could put your files there. Or another cloud service.
Instead of rsync, there are commercial file-synchronisation tools with GUI interfaces (ChronoSync springs to mind as one example).
Managing more-complex situations such as iTunes libraries across multiple machines (one of which is mobile and has limited disk space) is something I'm working on over the coming month, as I'm in the process of transitioning from a single 15" MBP as main machine to a split laptop (eventually the MBP will become either an MBA or a 13" rMBP) plus monster-workstation configuration.
Mail can refer to the same IMAP server, although if you move messages to local folders you can only access them on one machine.
It's a big topic! What do other dual-machine folks do about it?