How to maintain multiple Git repositories with ease

We believed this was likely not the most straightforward workflow. The code inspection process was difficult also since the reviewer needed to test alterations across multiple repositories. These often did not make sense as you’re visiting them as separate from international changes that was made from another repositories.

Two Potential Methods to Move

We came to an agreement that preserving a zuul ci github volume of repositories would be quite hard at the moment, and could just be ineffective. Instead we chose to do more research and develop two ways of potential advancement — using a monolithic repository (also called monorepo) for our bundles, or utilizing Git submodules to the identical function. Let us take a better look at every alternative.

Monolithic repository

Monorepo is one Git repository which could comprise multiple more or less separate packages.

By way of instance, Symfony frame, together with all its elements, are a part of a single monorepo. So as to have the ability to use only the particular areas of the monorepo, the elements are divided into the different read-only repositories with the unique tool Splitsh.


Simpler development and simpler code review of qualities that span over 1 bundle.

Successfully Employed by PHP giants such as Symfony.


Not one of the bundles in the monorepo may have another version from others.

There isn’t any effortless method to create pull requests into some sub-repository of a monorepo. All donations have to be performed into the monorepo. Git submodulesSubmodules are a native Git method which permits you to maintain a Git repository for a subdirectory of the other Git repository.


Control of dependencies one of your packages is simpler than it is using the manyrepos strategy.

All of submodules are different repositories, ie. They may be published separately from one another.


Which you still should manage bundles across multiple repositories.

Leave a Reply

Your email address will not be published. Required fields are marked *