Are there tools to achieve the following abstract operations in a Maven project/SCM scenario?
- Given an application project, create branches for the application and all the snapshot libraries that it uses, transitively; these branches should be manageable as one logical branch (see next)
- Given the logical branch of an application project, release it (by running Maven release); this means releasing multiple branches, one per library
Background (original):
As you know, Git recommends using the repository-per-project structuring paradigm. At the same time, any serious project, in our case Maven-based, is attached to several in-house libraries. During any sprint, both the project and the libraries that it is attached to are modified. In a Git world, this means that modifications will exist across several Git repositories.
If we wanted to branch out the work in the sprint, perhaps because we use Gitflow, which invites that we create a release branch at the end of our sprint, how would we do it in a logical manner across all the libraries involved in the sprint, instead of manually branching each library?
A Maven-aware tool (one that can introspect the POMs to figure out the transitive snapshot dependency list) will be even better.
Can I create a logical relationship between my multiple physical branches (one per project) that represent my one logical branch?
Does Git, or some Git tool, support logical branches?
I'm hoping you're not going to say submodules. What I'm looking for here is to abstract out the details of the VCS, not to become a Git guru. Also, I'm looking to do things in one operation where possible, as having to individually branch each library is error prone and easily forgotten.