[llvm-dev] [RFC] One or many git repositories?

Robinson, Paul via llvm-dev llvm-dev at lists.llvm.org
Tue Jul 26 10:42:01 PDT 2016

>> 3. For many (most?) developers, changing to a monolithic git repo is a
>> *bigger* workflow change than switching to separate git repos. Many
>> people (and at least some downstream infrastructure) use the git
>> mirrors exclusively, aside from git-svn for committing.
>> I believe the idea is to continue to maintain the read-only independent
>> git repos for each project. The only change is instead of sourcing those
>> commits from the official upstream(independent) svn repos, they will be
>> sourced from the official upstream monorepo.
>> Thus downstream developers can continue to use the read-only view of
>> the independent projects if that is easier for them; but people hacking
>> on llvm/clang itself get the benefits of easier checkout, patching,
>> bisection, atomic commits between projects, etc that come from using a
>> monorepo as the official repository.
> It is true that downstream should be able continue to work easily based
> of these official independent *git* repos ( i.e.:
> http://llvm.org/git/llvm.git will continue to exist and be updated
> without changing its history). 
> However for individual developers that are continuously upstreaming their
> work it does not seem sustainable, how do you pull from the individual
> repos, do you work, commit as today, and push upstream? Today it is
> possible with git-svn, while with the monorepo it won’t be possible.

Speaking only for myself, the problem you suggest simply does not exist.
Or another way of saying it:  I already can't work the way you imagine.
Our downstream repo is fed by the upstream projects, but it's simply
impossible to directly commit work from there into upstream.  I create
a patch based on local work, apply it to a separate "vanilla" upstream 
checkout and commit from there.  The upstream version of the patch 
cycles back into our repo and we use it to supersede the local version.
All done.  Git or svn, makes no difference.  Monorepo or submodules,
makes no difference.  Those are all implementation details.

Even if it were possible, I would still keep my upstream checkout
separate just as a safety measure, to keep from sending private stuff
upstream by accident.

More information about the llvm-dev mailing list