I did some literature research about versioning file systems. Versioning was already common practice in the very early operating systems such as the influential but almost forgotten Incompatible Timesharing System (ITS) and TENEX. OpenVMS, the successor of TENEX, seems to be still used in special applications and it still supports versioning. I found a number of experimental and historic file systems with versioning (see the ext3cow FAQ). But none of the major operating system (Linux, Windows, Mac OS) support versioning by default.
How come modern operating and file systems' do not support a feature available 40 years ago? Of course you can hack versioning into your systems somehow but this should be supported to the most basic level, transparent to applications. Just to clarify: Journaling and snapshot facilities (such as Apple's TimeMachine) are not the same. Versioning on file system level means: every process that modifies a file, automatically triggers the creation of a new version that you can directly access afterwords (for instance to undo the process). You can implement this cheaply with copy-on-write.
The only modern application of a versioning file system that I found is versioning in Amazon S3 which they introduced a few month ago. Why are there so little versioning file systems? What happened to progress of computer systems? Is versioning a bad idea anyway?