We’ve recently started using Ensemble as the engine of our business integration needs. While our team gain experience and knowledge in InterSystems platform, we have a consultant with expertise to help and guide the solution development process. But, one doubt remains: how to work with Atelier and Git in a collaborative way.
Git development flow and its strategies are not a problem, but we still could not find a way to use a single Dev environment to manage this scenario:
To simplify, imagine a Git repository containing one namespace and an Atelier project also with all namespace files (Git working directory == Atelier Workspace).
We’re working with integration of different solutions (distinct business departments), but most of them communicates with the organization ERP. So, It’s not uncommon that one developer changes the same code in which another one is working - note: they’re working in two different features that share some “component”.
Considering versioning approach, these solutions are related to distinct issues, belongs to their own development branch and must be delivered in different commits (maybe scheduled to different releases).
Considering Ensemble Server architecture, as soon as one of them compile and test the code, it’s synchronized to the server and all others are notified to update the local copy. Here, we risk to lose one developer’s work by overwriting local changes in the same file AND not tracking changes in Git as we don’t know who coded it... We may, also, have two developers working in the same solution, but in different classes. When this is the case we should synchronize the code using Git and not Ensemble server - once more, we should guarantee the authorship tracking and this is a Git responsibility.
Another challenging situation: if any developer wants to analyse another version of this solution and checkout to another branch / commit, it may accidentally overwrite server environment.
I believe that the collaborative Git approach and the Ensemble server dependency, especially in the Dev environment due to the synchronization process, are somewhat incompatible.
Maybe we’re still in the wrong mindset to solve this or we missed some simple concept that changes the whole perspective, but does anyone have a suggestion or can share experience to clear this kind of problem?