In essence, most source control routines are based on some form of difference engine and baseline. The question of change monitoring is then to track changes by playing forward all edits to the last approved version, and then running the difference engine to generate yet another difference file to take you from the last approved version to the next version. And if you like it and choose to save it, you use a routine to "bless" that change.
In essence, each change-file defines a new version of the targeted module. When you have multiple modules, each with an independent version ID, you have reached a point where your product has a CONFIGURATION comprised of the individual approved versions of the member components.
Using this concept and the command line DIFF command with some options, it becomes possible to define configurations in a script. I have not done this myself, but about 30 years ago on some old DEC equipment, a source code manager script was available using their command line scripting language.
Here is the catch that folks quickly found. If you get a code manager, you have to have the self-discipline to actually use it - because the damned thing slows you down horrendously vs. working by yourself as a developer and just taking good notes. It is always the case. With a development team, the "too many cooks" aphorism takes on practical meaning and becomes the justification for code management. For a single developer? Much tougher call.