If you're like me, you're stuck on Windows at your day job.
I know, I know. But it's reality. No point in getting all upset about it.
On my mac, if I need to sync a large number of files between me and a remote disk, I have trusty rsync.
There are a number of utilities that offer support for rsync in Windows, but they aren't that good. Cygwin runs like a dog on my work box and it's really not an option. I did the whole Cygwin thing at my previous day job and since moving to my current one, I find that I'm much happier just using native tools. Besides, the only tool that matters has native Windows support so life is good.
I ran into the situation recently working remotely, though, where I had to copy a large number of files over and over again, after changing only a few of them, to a remote server. The copy would take about 2 or 3 minutes every time to copy the entire tree. At any given point, I may have only edited 2 or 3 files but the work involved with diffing the two directories or keeping track of edited files so that I could copy only the changes was outweighed by simply copying the tree over again.
More than that, I would delete files every now and again, and my method would break. In that event, I just deleted the whole remote tree and copied my entire tree into it again.
2 or 3 minutes, every 2 or 3 minutes, is a bit of an overhead.
What I wanted was rsync for Windows. I didn't get that, but I got something that fit my needs just as well.
SyncToy is a little utility written by Microsoft and published as a PowerToy. An aside: PowerToys are programs that should really be included in Windows but aren't for some reason. You really should install many of them. That's another post.
SyncToy sports the ability to set up a group of Folder Pairs and run them as needed. A Folder Pair can be set up several ways:
Synchronize: Watches both folders and makes them look the same if you change either end.
Echo: Only watches the left side. Renames, updates and deletes are all done on the right.
Contribute: New and updated files, with renames, are updated from left to right. Deletions, however, are not.
The way it works is by adding a little file on either end that contains metadata about your tree. The file can be easily ignored if your using something like git. When you run a sync, it just compares metadata in your files and only copies changes which ends up being nice and fast.
There is a GUI, but you definitely want a CLI for quickly syncing up your directories directly from Emacs. To do that, you just add /path/to/install/directory to your PATH variable and run SyncToyCmd -R to run all your Folder Pairs. If you have too many Folder Pairs, there is a variant that accepts a Folder Pair name which only syncs that. The command line output is nicely descriptive and you can run the entire thing from the command line.
Not the most ground breaking discovery in the world, but hopefully it's useful to others.