I recently joined a SaaS company that has so far not been using source control track and maintain their development, instead just separately working on their own portions of a given client's codebase. In an effort to help and positively contribute, I've begun using git on my own contributions and want to bring more (in the future, all) of my coworkers into the VCS fold.
My question comes from the complex nature of the development environment(s) we write in, and the best-practices for version controlling it. I'll give a description of the set-up and then present the specific questions afterwards.
Set-up:
The business is built on Archibus. We deploy, support, and customize each customer's install. Each customer has a dedicated server pair, which hosts all of the production code and the in-testing pre-production code. In addition to this, we host our own copy, and each developer either access that through a remote desktop client or runs a copy of the server locally to make development easier.
Into this, I've tried to inject some VCS by shifting the burden of code changes from within my local install to a development directory where I manage my npm transpilation stack: I write in my directory and then run a powershell script that calls npm run build
and then moves all necessary files to their correct folders within the server.
For moving the changes to production, I created an empty branch that lives in the server and only tracks the transpiled code. When a feature or fix is ready, I commit and tag it, push it to my repo, and then pull the changes to prod-test (and later production), without carrying with it any leftovers from node or my development system.
This has worked fine until I was tasked with developing a new Java module within the complex internal structure itself, which will by necessity include changes to a large number of discrete files across multiple sub-directories, including multiple jars. Now I can't just write the code elsewhere and then move it in when necessary unless I'm willing to write some extremely annoying additions to my Powershell script and rework the Eclipse dependencies.
But if I want to track the entire project folder, that would track over 30k files across 4.5k directories, sitting at around 1 gig. Additionally, I'd lose the ease of tracking my ES6 code separately from the production-ready transpiled ES4 code.
Questions:
- What are the best-practices for managing large code-bases like this?
- Do I need to bite the bullet and just include the entire structure in my repository?
- Do I expand the complexity of my scripts to move only what needs to be moved when necessary?
If there's more I need to add, please let me know. This is my first major project in software, and I'm feeling anxious to get it right.