There are a lot of tools out there to do SCM for file based languages but Smalltalk SCMs have one advantage and that is that the scope of what needs to be compared in much more focused. In Smalltalk the unit of compilation is not a file but rather the method , that includes the class definition which is in reality a method call. So when you browse history you can just immediately scan across time what has occurred for that method. The Smalltalk IDE’s operate on method objects , compiling its at this level and changes to those methods are are tracked for eventual publication to the SCM which stores said changes at the method level. Of course methods changes are associated to classes which are associated to packages etc., so one can as easily understand what has changed with a class or package.
Ruby has a great runtime model but unlike Smalltalk the IDE’s available do not live in a Ruby runtime. If they did I think IDE makers would possibly think about exploiting incremental level method compilation which in turn would promote the persisting of changes at the method level and thus much easier tracking of code versioning.