As someone who's never heard of a metarepo before, I'm still not sure exactly what it is or why I should use it after reading their landing page. I think a metarepo explainer video would helpful.
Vlad from metahead here. We answer this in the FAQ – metarepo is just a git repo that you can slice and dice any way you want while preserving history and having the ability to work on your part of the code. We went with "meta" because it's not exactly mono- or poly- – it's flexible enough so that you can make anything out of it. It also stores information about how your repos / projections relate – in that sense it's "meta" as well.
The readme is understandable and the failure modes means it degrades to an ordinary git repo.
> This git command "clones" an external git repo into a subdirectory of your repo. Later on, upstream changes can be pulled in, and local changes can be pushed back. Simple.
One of the reasons to have a mono repo is to avoid the mirroring of PRs between repos. If you have 40+ repos and each time a package gets updated and you need to raise 39 PRs to bump the package. It's getting really old to do mirroring etc.
Not sure how this is an improvement over using a mono repo
One thing to note is that we don't bump package versions but rather "mirror" the source code, so in that sense it works like a monorepo. But you're right that PR mirroring doesn't work beyond a certain point, and we certainly intend to scale beyond that in future
> Maintaining an open-source library as part of your proprietary codebase? You can use metahead to publish and synchronise part of your code in its own public repo. Accept external contributions and check them against your internal usage of the library. You have the choice to make as much or as little as you want public, with file-granularity filters.
I've wished for this in multiple open-source oriented companies.
We will add a FAQ entry about scalar and we have one about submodules. But in short, here's why you might want to use this instead of the existing solutions:
* sub-repos -- projections as we call them -- are still a part of the one big history. But the history is filtered on your end and you only see relevant commits. You don't need to manually bump the version of projections
* you could also get "one big history" behaviour with a traditional monorepo, but with projections you get benefits like fine-grained ACL
Git doesn't actually perform that well with monorepos of a certain scale and linear history. From what I read they're trying to give you a git interface to a monorepos that scales well.
We're pretty worried about trying to monorepoize our existing code bases together.
How do we not break all the merge commits that link a project specific PR? Complex filter-branch I guess. How do we make GitHub able to actually help us navigate the past effectively?
It seems like we need some custom tooling to help us replay the past step by step across multiple repos, doing some rewriting as we go.
And what if it's not just your own repos one is managing? What if you also are trying to manage external deps too?
I see much validity to wanting good git-of-gits. Also if anyone has any suggestions for stitching together monorepos out of existing repos, please please comment!
Is that your reasoned conclusion after reading what this team actually built, and considering the deficiencies in today's repos + monorepos which led them to invent this new approach?
You've also posted some good unpredictable comments so I definitely don't want to ban you. Basically, any form of predictability is what we're trying to avoid here.
fuddle|2 years ago
vlad_ivanov|2 years ago
umvi|2 years ago
I would guess a "metarepo" is a repo that contains other repos.
Why would you want this? It's an alternative to monorepos or hacky homegrown solutions for managing related repos.
iFire|2 years ago
iFire|2 years ago
> This git command "clones" an external git repo into a subdirectory of your repo. Later on, upstream changes can be pulled in, and local changes can be pushed back. Simple.
wdb|2 years ago
Not sure how this is an improvement over using a mono repo
vlad_ivanov|2 years ago
edgyquant|2 years ago
rbetts|2 years ago
I've wished for this in multiple open-source oriented companies.
btown|2 years ago
bananskalhalk|2 years ago
[0]: https://git-scm.com/docs/scalar
[1]: https://git-scm.com/docs/gitsubmodules
vlad_ivanov|2 years ago
* sub-repos -- projections as we call them -- are still a part of the one big history. But the history is filtered on your end and you only see relevant commits. You don't need to manually bump the version of projections * you could also get "one big history" behaviour with a traditional monorepo, but with projections you get benefits like fine-grained ACL
kissgyorgy|2 years ago
sgammon|2 years ago
Or, feel free to drop a GitHub link?
da39a3ee|2 years ago
digger495|2 years ago
[deleted]
oooyay|2 years ago
jauntywundrkind|2 years ago
How do we not break all the merge commits that link a project specific PR? Complex filter-branch I guess. How do we make GitHub able to actually help us navigate the past effectively?
It seems like we need some custom tooling to help us replay the past step by step across multiple repos, doing some rewriting as we go.
And what if it's not just your own repos one is managing? What if you also are trying to manage external deps too?
I see much validity to wanting good git-of-gits. Also if anyone has any suggestions for stitching together monorepos out of existing repos, please please comment!
khazhoux|2 years ago
Or did you just read the headline?
opentokix|2 years ago
vosper|2 years ago
/s
iFire|2 years ago
https://github.com/josh-project/josh/blob/master/LICENSE
dang|2 years ago
You've also posted some good unpredictable comments so I definitely don't want to ban you. Basically, any form of predictability is what we're trying to avoid here.