Since git won't (probably) run on my OS and I don't want to be dependent on another OS for hosting and building my OS eventually, I decided to design and implement a Version Control System that will run on Linux and other UNIX-like OSes for now, but will be easy to reimplement for my own OS. I also know there is no "ideal" design or workflow for anything, but maybe it can be better in some respects than in existing VCSs. So I'd like to get some input from you on this matter.
The list below is not exhaustive; I haven't thought about everything yet and I may be missing some stuff.
- Centralised vs Distributed: I think most of us agree a distributed VCS is better, because it allows us to commit locally and makes it easier to make forks. But I still included this question for the sake of completeness.
- Branching: I'm thinking of having a separate source directory for each branch, whose contents don't get altered when switching to another branch. Pretty sure most of us have lost uncommitted changes this way at least once. Also, I don't think there is the need for the VCS to remember which branch you are working on, just specify the branch in each command.
- Committing: For commits, I'm thinking of storing the file contents separately from the filename; in the case of renaming files, it would de-duplicate some data. Same for commit contents; i.e. separately from the commit metadata (author name/email/time, commit name/email/time, etc). Workflow-wise, I don't think there is much to be done differently though.
- Merging: I don't have any actual ideas here yet, but what are your opinions? Algorithms to use? Squashing or no squashing? Additional merge commit or just "literal" merging? Change commit name/email/time when merging? (Changing the commit time would imply that merged commits get appended after the existing commits on that branch instead of getting somewhere in between, depending on the original commit time.)
- Additional features
- Per branch integrated issue tracking: Having separate issues per branch is one idea I've been pondering around. The only VCS that I found that does this is fossil, and it takes it too far by also having wikis and full sites per branch.
- Other ideas you would like in a VCS?
Regards,
glauxosdever