When my programs were stored in CVS I learned to backup draft work regularly by writing diff output to scratch files. It is an odd workflow. I got good at extracting hunks of unified diffs, and even editing them in place.

Since then I've worked in svn, darcs, hg, fossil, git, and perforce. Each of these has an alternative to this workflow, some ways better and some ways worse. At some point I've tried them all. Now the world I inhabit is settling on git, so I recently invested some extra time in the git toolchain: branches, cherry picking, amending, and rebasing. Add some gerrit topics for extra spice. So far some of these tools work. Branches are OK. Some of them are usability disasters, like rebase. So I find myself writing git diff head^ > ~/Dropbox/d1 and going back to my old ways.

Six new tools in the 18 years since I developed those silly tricks for CVS, and I still find my way back to them. I find this unsatisfactory. Version control systems have failed to capture control of versions.