Managing Multi-Project Branches in Git

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):

  • How to maintain independence of pull request branches in the face of shared code
  • Cloning git repo
  • how to sync a repo mirror to a new upstream repo
  • Hiding GitHub token in .gitconfig
  • How to fetch all remote branches?
  • Why “git cvsimport” only returns an empty Git repo?
  • 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.

  • interactive git rebase failed with “git-rebase-todo: No such file or directory”
  • Libgit2Sharp : How to get author details from Diff.Compare?
  • ASP NET Core: How to create wwwroot/lib on build
  • Perl and Ruby modules in the same repository?
  • Push single outgoing commit in TFS Git
  • Is it possible to create branch that is tracking non-existing remote
  • 2 Solutions collect form web for “Managing Multi-Project Branches in Git”

    Setup a Jenkins server.

    It can build each maven module as a separate project and then automatically rebuild any other projects that has a snapshot dependency relationship.


    The GIT plugin for Jenkins has a feature for managing the automatic merging of development feature branches into a “master” or “integration” branch. See the documentation:

    Another option is to control feature development using a code review tool like Gerrit.
    Again it’s Gerrit that controls changes integrated onto the shared code stream and Gerrit can be integrated with Jenkins to ensuring all submitted change-sets pass the code tests.

    Finally releases are cut using the M2 Release plugin, which is a wrapper around the standard release plugin. (Means you’ll always have two types of build in Jenkins. Automated builds triggered by code commits and release builds explicitly triggered via the UI).

    Look what I found looking for something else about Gitflow:

    It doesn’t work with Maven, so it doesn’t fit my needs, but maybe it helps you.

    Git Baby is a git and github fan, let's start git clone.