Keeping a record of revisions is tricky... especially with binary files.
For ascii, you can just keep a record of the
diff , along with the newer file. For binary, if you want to keep track of revisions, you may need to keep those older files, which will start to take up alot of harddrive space.
As for locking files, that may be necessary. We use
cvs for version control at work, and the only way to check in changes is to have the most recent revision + your changes. If someone updates the file while you are changing it, you must update yours before checking in your changes.
You could put temporary locks on the files, and send e-mail reminders to the user to either renew the lock, or let the lock expire (or force-expire it, if they are not going to need it anymore). You could also put a system of lock requests into place, where people could request the next lock if the file they need is currently locked. That is something you'd need to work out in detail, though. There are alot of different scenarios that could happen.