Software versioning best practices
Posted on 2014-09-08
I'm working in VB.NET, and using BitBucket for offsite source code storage only at this point.
One of my projects is about to be released to a much larger audience, which will result in more requests for that utility. Each of those utilities has some form of customization - generally business rules type of thing, but often revisions that should be added to the "main" source. I would like suggestions or best practices regarding the correct way to create my new projects, based on the source, so that I can better manage updates, revisions, feature additions, etc.
I've read quite a bit about branches, forks and merges, but I'm not entirely sure how this would be handled, especially since some of the revisions should NOT be saved back to the main source code (i.e. the specific business rules), while other items (feature requests, bug fixes, etc) will almost certainly need to be saved back. I'm comfortable pulling down the project, and saving it back to the BitBucket server, but that's about the extent of my interaction.
One example scenario would be this:
I've created a utility for CompanyA, and have deployed that project as Version1. That project contains all of my common source code, along with a module to contain the specific business rules for CompanyA.
CompanyB buys the same utility, with requests for revisions for specific business rules. No major functionality changes to this.
CompanyC buys the same utility, but asks for a major feature integration (perhaps email capabilities), and they also need revisions for specific business rules.
In my current process, I have been copying the project over to a new directory and maintaining specific versions. This works, but as you can imagine this will become a huge mess very shortly (I only have 3 now, but there are many more coming down the pipe). I have to go back and update all 3 projects now for code fixes, and that's obviously not going to work.
So my goal is to better understand versioning and such in general, and GIT and BitBucket in specific. Can anyone help me with this?