You probably need some form of "don't commit unless the image being
changed is such-and-such", aka the compare and swap model. Otherwise too
many changes get lost. There is a trade-off here. This model favors the
small change. I have seen a situation where a large change always failed
because someone always checked in a small change while the person
responsible for the large change adsorbed and re-tested the large change
with the previous small changed incorporated. When this situation happened
it was handled by social means. I.e. No checkins until the large one is
checked in.
CVS works a lot better if people don't have write access to its repository.